Roll Abseil and QUICHE QUICHE needs to be rolled to Open Screen in order to permit removing the obsolete QuicSession::CreateIncomingStream() method. The new version of QUICHE requires absl::down_cast, so Abseil needs to be rolled to permit QUICHE to be rolled. The new version of Abseil no longer includes a definition of memcpy() in string_view.h, which makes compilation fail on GCC with older versions of QUICHE. For this reason, QUICHE and Abseil need to be updated in the same CL. Roll third_party/quiche/src/ d54ca111b..a849d35c9 (299 commits) https://quiche.googlesource.com/quiche.git/+log/d54ca111b108..a849d35c908d $ git log d54ca111b..a849d35c9 --date=short --no-merges --format='%ad %ae %s' 2026-05-07 ianswett Update CWND calculations to match the latest BBR draft. https://www.ietf.org/archive/id/draft-ietf-ccwg-bbr-05.html 2026-05-07 rch No public description 2026-05-06 ricea Temporarily add a dummy definition of CreateIncomingStream() to quic::QuicSession 2026-05-06 haoyuewang Increase the QUIC_BUG threshold. 2026-05-06 vasilvv Add functions to interop between absl::Cord and QuicheMemSlice. 2026-05-05 rch No public description 2026-05-04 rch Deprecate QUIC reloadable flag quic_close_connection_on_underflow. 2026-05-04 vasilvv Rewrite MOQT control message parser. 2026-05-02 ianswett Update BBR3 to more closely align with the BBRv3 draft. 2026-05-01 ianswett Remove tests for the deprecated kB201 connection option from BBR2 and BBR3 simulator tests. 2026-04-29 ianswett Enable gfe2_reloadable_flag_quic_reject_empty_cid_in_ncid in Chrome. 2026-04-29 ianswett Deprecate gfe2_reloadable_flag_quic_no_path_degrading_before_handshake_confirmed. 2026-04-28 ripere Add gzip response decompression support to Masque OHTTP client. 2026-04-28 dschinazi MasqueOhttpClient: Print chunked body to stdout 2026-04-27 dschinazi Deprecate quic_stop_sending_legacy_version_info and quic_stop_parsing_legacy_version_info 2026-04-27 ianswett BBR3: Update startup pacing gain, drain gain, and max ack height window to match the BBR IETF draft: https://datatracker.ietf.org/doc/draft-ietf-ccwg-bbr/ 2026-04-23 rch Additional PendingStream cleanup * Remove unused constructors * Pass PendingStream by reference in CreateIncomingStream 2026-04-23 rch Remove unused QuicSession::CreateIncomingStream(PendingStream*). Remove overrides in subclasses which considered it an error to call this method. Move from override to virtual in those subclasses which actually use this method. 2026-04-22 wub No public description 2026-04-22 rch Refactor QuicSession PendingStream methods to take references. 2026-04-22 ianswett Refactor: Cache Bbr2DebugState in simulator tests. 2026-04-22 rch Refactor QuicStream constructor to take PendingStream by reference. 2026-04-21 martinduke Allow MoqtClient and MoqtServer to control session parameters. 2026-04-21 martinduke Move some non-message-related data structures out of moqt_messages.h 2026-04-21 ianswett Refactor BBR2/BBR3 initialization and inline some methods. 2026-04-21 rch Convert quic::PendingStream constructor to take QuicSession reference. 2026-04-20 ianswett Refactor BBR2/BBR3 parameters by moving kDefaultMinimumCongestionWindow and kInitialPacingGain into Bbr2Params. 2026-04-20 quiche-dev Add ohttp_ping_pong_mode_{gateway_name} to test ping-pong interactive chunking. It guarantees there is no buffering between the client and server, bidirectionally. 2026-04-20 ianswett Refactor: Extract DebugState from Bbr2Sender and Bbr3Sender to a common header. 2026-04-20 martinduke Get rid of moqt::SubscribeWindow. 2026-04-20 ianswett Refactor and simplify BBR3. 2026-04-20 quiche-dev Add support for sending OHTTP request bodies in multiple chunks. 2026-04-17 ianswett Branch Bbr2Sender to create Bbr3Sender and no long have modes extend from Bbr2ModeBase. 2026-04-16 martinduke Permanently cancel subgroups if the stream has STOP_SENDING. 2026-04-16 haoyuewang QUIC_BUG on the size of connection_state_map_. 2026-04-16 ianswett Move Bbr2ProbeBwMode::CyclePhase to bbr2_misc.h and rename it to ProbePhase. 2026-04-15 reubent Reset streams which surpass MAX_HEADER_LIST_SIZE 2026-04-15 ianswett Deprecate --gfe2_reloadable_flag_quic_send_connection_close_on_max_age. 2026-04-14 birenroy Enabling rolled out flags. 2026-04-14 martinduke Deprecate gfe2_reloadable_flag_quic_disconnect_early_exit. 2026-04-14 vasilvv Merge QuicStreamSendBufferBase into QuicStreamSendBufferInlining. 2026-04-14 martinduke Limit Joining FETCH to largest_object at time of SUBSCRIBE. 2026-04-13 dmcardle Deprecate MASQUE PerRequestConfig::SetExpectedEncapsulatedResponseBody() 2026-04-10 dmcardle Add encapsulated response body callback to MASQUE client's PerRequestConfig 2026-04-10 ripere Add `num_ohttp_chunks` flag and remove `chunked` flag. 2026-04-10 ripere Add `num_bhttp_chunks` flag and remove `indeterminate_length` flag. 2026-04-10 ianswett Reject NEW_CONNECTION_ID frames with empty connection IDs and close the connection, per RFC9000. Based on cr/896368856 2026-04-10 wub No public description 2026-04-09 reubent Enforce a limit on the amount of total, uncompressed header bytes 2026-04-09 dschinazi Improve connection logging in OHTTP toy client (...) 2026-01-15 ripere Refactor HttpHeaderBlock tests to use const-qualified functors. 2026-01-15 birenroy One more fix for the case of a nulled out pending frame. 2026-01-14 martinduke Consolidate MOQT *_ERROR message into REQUEST_ERROR. 2026-01-14 haoyuewang Add QuicServerSessionBase::enable_reset_ssl_after_handshake that reset SSL after handshake is done to save connection level memory on the server side. 2026-01-13 quiche-dev Add UpdateMaxSize to QuicLRUCache. 2026-01-13 birenroy Fixes behavior in OgHttp2Session::CloseStream when frames have been removed from the pending frames queue. 2026-01-12 dschinazi Unblock quic_stop_sending_legacy_version_info 2026-01-12 martinduke Rename MoqtRequestError to MoqtErrorPair. 2026-01-12 vasilvv Implement bandwidth probing in MoQ bitrate adjuster. 2026-01-12 ripere Refactor BHTTP test constants. 2026-01-12 dmcardle Deprecate gfe2_reloadable_flag_quic_delay_connection_close_on_invalid_sni 2026-01-12 wangsteve Automated g4 rollback of changelist 840297420. 2026-01-09 martinduke Update MoQT malformed track detection to draft-16. 2026-01-09 ripere Refactor BHTTP content terminated sections decoding. 2026-01-09 dmcardle Add --request_trust_anchors to the QUIC toy client 2026-01-09 ripere Return absl::Status from test helper functions 2026-01-09 ripere Refine IndeterminateLengthMessageSection enum for BinaryHttpResponse encoding. 2026-01-09 ripere Refactor OHTTP client, gateway, and BHTTP decoder creation methods to pass the retained parameter as pointer instead of a reference. 2026-01-08 vasilvv Add missing QUICHE_EXPORT directives. 2026-01-08 martinduke Implement MOQT draft-16 version negotiation. 2026-01-08 martinduke Change MOQT key-value pair lists to have diff-encoded keys. 2026-01-07 diannahu Mark --gfe2_restart_flag_quic_stop_sending_legacy_version_info as enabling_blocked_by. 2026-01-07 birenroy No public description 2026-01-07 quiche-dev Fix gap filling ACK logic in QuicReceivedPacketManager. 2026-01-06 haoyuewang Do not instantiate QpackSendStream if qpack_maximum_dynamic_table_capacity_ is 0 in QuicSpdySession. 2026-01-06 vasilvv Implement a dedicated WebTransport-only dispatcher. 2026-01-06 vasilvv Ensure WebTransport QUIC streams are always set to level-triggered mode. 2026-01-06 ianswett Deprecate --gfe2_reloadable_flag_quic_bbr2_probe_two_rounds. 2026-01-06 ripere Refactor BinaryHttpRequest IndeterminateLengthDecoder to use a local checkpoint. 2026-01-06 danzh Rename methods in QuicConnectionMigrationManager for readability. Callback methods like FinishFoo() are renamed to ContinueFoo() if Foo() is async or DoneWithFoo() if it merely does clean up. 2026-01-06 ripere Wrap chunk handler errors in InternalError. 2026-01-05 ianswett Deprecate quic_bbr2_simplify_inflight_hi. 2026-01-05 rch Remove unreachable return in quic_spdy_session_test.cc 2026-01-05 birenroy Uses `quiche::QuicheCircularDeque` as the type backing the pending frame queue, rather than `std::list`. 2026-01-05 vasilvv Move moqt::TrackNamespace and friends into a separate header. 2025-12-30 quiche-dev No public description 2025-12-29 rch Fix unused parameter warning in quic_session.h 2025-12-23 rch Add support for sending immediate GOAWAYs in HTTP/3. 2025-12-23 quiche-dev QBONE ICMP reachable: eliminate last usage of `SOCK_RAW`. 2025-12-23 quiche-dev Make the masque client return a special error when it gets an expected failure 2025-12-23 quiche-dev Move balsa_fuzz_util to a separate quiche_fuzz_support glob. 2025-12-22 quiche-dev QBONE ICMP reachable: convert to "ping sockets" to avoid the need for `SOCK_RAW` permissions. 2025-12-20 dschinazi Allow content-type parameters in MASQUE/OHTTP test code 2025-12-20 dschinazi Properly handle TLS error in MasqueH2Connection 2025-12-20 dschinazi Allow key fetch and key proxy requests without the Accept header in masque_tcp_server 2025-12-20 dschinazi Properly handle query parameters in MASQUE/OHTTP test code 2025-12-20 dschinazi Only respond to key requests on gateway path in masque_tcp_server 2025-12-20 dschinazi Add --key_proxy option to masque_tcp_server 2025-12-20 dschinazi Increase connection-level flow control in MasqueH2Connection 2025-12-19 dschinazi Make gateway actually proxy requests in masque_tcp_server Created with: roll-dep third_party/quiche/src Roll third_party/abseil/src/ 987c57f32..8a6b6ae90 (332 commits) https://chromium.googlesource.com/external/github.com/abseil/abseil-cpp.git/+log/987c57f325f7..8a6b6ae902ac $ git log 987c57f32..8a6b6ae90 --date=short --no-merges --format='%ad %ae %s' 2026-04-21 absl-team Automated rollback of commit 34e723033bf6e31b196258451c6cdc684804a88d. 2026-04-21 absl-team Change abseil hardening assertions in types directory from macros to functions 2026-04-21 absl-team Change abseil hardening assertions in types directory from macros to functions 2026-04-21 ckennelly Replace ABSL_INTERNAL_LOG with ABSL_RAW_LOG in ReadMonotonicClockNanos. 2026-04-21 goldvitaly Introduce HashtableCapacity wrapper for capacity_ and rename HashtableSize to HashtableInlineData and move capacity into it. 2026-04-20 ckennelly Use if constexpr around allocator type check for hashtable sampling. 2026-04-20 mkruskal Add a friendship for gloop testing 2026-04-16 absl-team Optimzie crc32 on AMD Milan+ 2026-04-16 tokarip Optimzie crc32 on AMD Milan+ 2026-04-16 dmauro Stop exporting internal Base64 escaping functions that do not need to be exported. The one function that is currently using it is easily implemented with absl::Base64Escape(). 2026-04-14 absl-team Add additional bounds check functions to cover most ABSL_HARDENING_ASSERTs. 2026-04-13 absl-team Undo unintended inlining of absl::void_t -- the inlining didn't actually replace it with std::void_t 2026-04-10 ckennelly Consume result from various SampleRecorder methods. 2026-04-09 absl-team Remove unnecessary usages of absl::void_t 2026-04-09 akraman StrFormat: format %g without heap allocation 2026-04-09 absl-team Remove unnecessary namespace bracketing for an internal nullability macro. 2026-04-08 dmauro Introduce ABSL_OPTION_INLINE_HW_ACCEL_STRATEGY in absl/base/options.h to provide a centralized policy for hardware-accelerated implementations in headers. 2026-04-07 sbenza Refactor error factories to propagate static knowledge to the compiler, where supported. 2026-04-07 absl-team Inline absl::void_t to std::void_t wherever possible 2026-04-06 absl-team Deprecate and inline a lot of C++17 Abseil type traits 2026-04-06 absl-team Remove more lingering C++17 type traits polyfill usages 2026-04-06 absl-team nullstream: fix a header guard comment 2026-04-06 absl-team Add SKIP_ABSL_INLINE_NAMESPACE_CHECK to absl/base/internal/exception_safety_testing.h as it doesn't use the absl namespace at all 2026-04-06 mkruskal Expose gloop peer friendship for testing 2026-04-03 absl-team Stop using C++17 type traits polyfills 2026-04-03 dmauro Remove the forward declaration of base::scheduling::Schedulable from thread_identity by using a void*, and fix callers to use base::scheduling::Schedulable::GetBoundSchedulable(). 2026-03-31 absl-team Support passing I/O manipulators such as std::endl to StringifyStream 2026-03-31 absl-team Add absl::Status::MakeNonOkStatusWithOkCode() and absl::status_internal::StatusPrivateAccessor for private/internal use 2026-03-30 dmauro Add cleanup dependency 2026-03-28 dmauro Prepare to move callers away from get_bound_schedulable() to remove the forward declaration of base::scheduling::Schedulable. 2026-03-26 absl-team Prevent users of absl::AnySpan::subspan(pos, len) from relying on truncation behavior while the migration from this nonstandard function is in progress. 2026-03-26 absl-team Add support for [[clang::annotate("clang-tidy", "bugprone-use-after-move", "null_after_move")]] annotations. 2026-03-25 lar Reduce duplication in absl/random/internal. 2026-03-25 cramertj Use absl::SourceLocation for Rust source locations in Status 2026-03-24 absl-team Avoid using lambdas in Abseil assertion macros 2026-03-23 dmauro Minor changes to #includes 2026-03-23 cmihelic Document that DemangleRustSymbolEncoding omits some details on purpose. 2026-03-20 mvels Add gloop/perftools/tracing visibility 2026-03-18 mkruskal Add //gloop/util/status:status_macros to Gloop 2026-03-17 absl-team Remove the legacy stateless symbol decorator API. 2026-03-16 dmauro Add additional tests in str_split_test.cc 2026-03-13 absl-team Add absl::strings_internal::AbslStringifyStream 2026-03-13 absl-team Add supporting code for absl::SourceLocation 2026-03-13 absl-team Open-source absl::AnySpan 2026-03-12 mkruskal Add //gloop/util/gtl:iterator_range to Gloop 2026-03-12 mkruskal Internal functionality 2026-03-12 goldvitaly Fix sampling for the insert into a non-SOO table with capacity==1. 2026-03-12 goldvitaly Add benchmark for string erase/emplace. 2026-03-11 dmauro Minor reformatting 2026-03-11 sbenza Prepare GenericPrinter for the rename of ArenaSafeUniquePtr. (...) 2025-09-30 absl-team Remove unnecessary dep on `core_headers` from the `nullability` cc_library 2025-09-29 jmr type_traits: Add type_identity and type_traits_t backfills 2025-09-26 ezb Refactor raw_hash_set range insertion to call private insert_range function. 2025-09-25 absl-team Fix bug in absl::FunctionRef conversions from non-const to const 2025-09-24 anton.klaren PR #1937: Simplify ConvertSpecialToEmptyAndFullToDeleted 2025-09-23 absl-team Improve absl::FunctionRef compatibility with C++26 2025-09-23 dmauro Add a workaround for unused variable warnings inside of not-taken if-constexpr codepaths in older versions of GCC 2025-09-23 absl-team Annotate ABSL_DIE_IF_NULL's return type with `absl_nonnull` 2025-09-22 goldvitaly Move insert index computation into `PrepareInsertLarge` in order to reduce inlined part of insert/emplace operations. 2025-09-21 absl-team Automated Code Change 2025-09-20 keithbsmiley PR #1939: Add missing rules_cc loads 2025-09-19 durandal Expose (internally) a LogMessage constructor taking file as a string_view for (internal, upcoming) FFI integration. 2025-09-15 absl-team Fixed up some #includes in mutex.h 2025-09-15 absl-team Make absl::FunctionRef support non-const callables, aligning it with std::function_ref from C++26 2025-09-15 goldvitaly Move capacity update in `Grow1To3AndPrepareInsert` after accessing `common.infoz()` to prevent assertion failure in `control()`. 2025-09-13 sohaibiftikhar Fix check_op(s) compilation failures on gcc 8 which eagerly tries to instantiate std::underlying_type for non-num types. 2025-09-12 goldvitaly Use `ABSL_ATTRIBUTE_ALWAYS_INLINE`for lambda in `find_or_prepare_insert_large`. 2025-09-12 derekbailey Mark the implicit floating operators as constexpr for `absl::int128` and `absl::uint128` 2025-09-09 self PR #1931: raw_hash_set: fix instantiation for recursive types on MSVC with /Zc:__cplusplus 2025-09-09 absl-team Add std::pair specializations for IsOwner and IsView 2025-09-09 durandal Cast ABSL_MIN_LOG_LEVEL to absl::LogSeverityAtLeast instead of absl::LogSeverity. 2025-09-08 absl-team Fix a corner case in the aarch64 unwinder 2025-09-04 absl-team Fix inconsistent nullability annotation in ReleasableMutexLock 2025-09-04 absl-team Remove support for Native Client 2025-09-03 absl-team Rollback f040e96b93dba46e8ed3ca59c0444cbd6c0a0955 2025-09-02 durandal When printing CHECK_XX failures and both types are unprintable, don't bother printing " (UNPRINTABLE vs. UNPRINTABLE)". 2025-09-02 rsworktech PR #1929: Fix shorten-64-to-32 warning in stacktrace_riscv-inl.inc 2025-09-02 ezb Refactor `find_or_prepare_insert_large` to use a single return statement using a lambda. 2025-09-02 ckennelly Use possible CPUs to identify NumCPUs() on Linux. 2025-09-02 qrczak Fix incorrect nullability annotation of `absl::Cord::InlineRep::set_data()`. 2025-09-02 goldvitaly Move SetCtrl* family of functions to cc file. 2025-09-01 dmauro Change absl::InlinedVector::clear() so that it does not deallocate any allocated space. This allows allocations to be reused and matches the behavior specification of std::vector::clear(). 2025-08-27 avassalotti Mark Abseil container algorithms as `constexpr` for C++20. 2025-08-27 dmauro Fix `CHECK_<OP>` ambiguous overload for `operator<<` in older versions of GCC when C-style strings are compared 2025-08-27 absl-team stacktrace_test: avoid spoiling errno in the test signal handler. 2025-08-26 nafi Optimize `CRC32AcceleratedX86ARMCombinedMultipleStreams::Extend` by interleaving the `CRC32_u64` calls at a lower level. 2025-08-26 absl-team stacktrace_test: avoid spoiling errno in the test signal handler. 2025-08-26 absl-team stacktrace_test: avoid spoiling errno in the test signal handler. 2025-08-26 bgraur std::multimap::find() is not guaranteed to return the first entry with the requested key. Any may be returned if many exist. 2025-08-26 derekbailey Mark `/`, `%`, and `*` operators as constexpr when intrinsics are available. 2025-08-26 dmauro Add the C++20 string_view contructor that uses iterators 2025-08-22 absl-team Implement absl::erase_if for absl::InlinedVector 2025-08-20 absl-team Adjust software prefetch to fetch 5 cachelines ahead, as benchmarking suggests this should perform better. 2025-08-20 goldvitaly Reduce maximum load factor to 27/32 (from 28/32). 2025-08-19 dmauro Remove unused include 2025-08-18 absl-team Remove unused include statement 2025-08-18 30942300+past-due PR #1921: Fix ABSL_BUILD_DLL mode (absl_make_dll) with mingw 2025-08-18 zebreus PR #1922: Enable mmap for WASI if it supports the mman header 2025-08-14 absl-team Rollback C++20 string_view constructor that uses iterators due to broken builds 2025-08-14 dmauro Add the C++20 string_view contructor that uses iterators Created with: roll-dep third_party/abseil/src Manual changes: - Update abseil/BUILD.gn. Only add new source files that are actually used, for consistency with existing practice. - Add -Wno-deprecated to the protobuf BUILD.gn, as protobuf uses absl::disjunction, which is deprecated in the newer versions of Abseil. Bug: b:508413463 Change-Id: Iadaacdc024231789f7c9c62ade695fadc10596c2 Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/7831666 Commit-Queue: Adam Rice <ricea@chromium.org> Reviewed-by: Mark Foltz <mfoltz@chromium.org>
diff --git a/DEPS b/DEPS index 767c55e..9881aee 100644 --- a/DEPS +++ b/DEPS
@@ -179,7 +179,7 @@ # maintainers may be needed for some breaking changes. 'third_party/quiche/src': { 'url': Var('quiche_git') + '/quiche.git' + - '@' + 'd54ca111b1085b9fea302560b41e371df349061c', # 2025-12-19 + '@' + 'a849d35c908d800de783c7434ffcdb44378af823', # 2026-05-07 'condition': 'not build_with_chromium', }, @@ -199,7 +199,7 @@ 'third_party/abseil/src': { 'url': Var('chromium_git') + '/external/github.com/abseil/abseil-cpp.git' + '@' + - '987c57f325f7fa8472fa84e1f885f7534d391b0d', # 2025-11-11 + '8a6b6ae902ac1eb7d9d8db810ecabc9c3cf88cf5', # 2026-04-21 'condition': 'not build_with_chromium', },
diff --git a/third_party/abseil/BUILD.gn b/third_party/abseil/BUILD.gn index 1ae52d5..d9bf729 100644 --- a/third_party/abseil/BUILD.gn +++ b/third_party/abseil/BUILD.gn
@@ -40,13 +40,10 @@ source_set("internal") { sources = [ "src/absl/base/internal/atomic_hook.h", - "src/absl/base/internal/identity.h", "src/absl/base/internal/inline_variable.h", "src/absl/base/internal/invoke.h", "src/absl/base/internal/raw_logging.cc", "src/absl/base/internal/raw_logging.h", - "src/absl/base/internal/throw_delegate.cc", - "src/absl/base/internal/throw_delegate.h", "src/absl/container/internal/common.h", "src/absl/hash/internal/city.cc", "src/absl/hash/internal/city.h", @@ -79,6 +76,8 @@ "src/absl/base/optimization.h", "src/absl/base/policy_checks.h", "src/absl/base/port.h", + "src/absl/base/throw_delegate.cc", + "src/absl/base/throw_delegate.h", "src/absl/hash/hash.h", "src/absl/hash/hash_testing.h", "src/absl/memory/memory.h", @@ -320,6 +319,8 @@ ] sources = [ + "src/absl/base/casts.cc", + "src/absl/base/casts.h", "src/absl/crc/crc32c.cc", "src/absl/crc/crc32c.h", "src/absl/debugging/stacktrace.cc", @@ -357,7 +358,6 @@ "src/absl/status/statusor.h", "src/absl/strings/cord.cc", "src/absl/strings/cord.h", - "src/absl/strings/string_view.cc", "src/absl/strings/string_view.h", "src/absl/synchronization/mutex.cc", "src/absl/synchronization/mutex.h",
diff --git a/third_party/abseil/src b/third_party/abseil/src index 987c57f..8a6b6ae 160000 --- a/third_party/abseil/src +++ b/third_party/abseil/src
@@ -1 +1 @@ -Subproject commit 987c57f325f7fa8472fa84e1f885f7534d391b0d +Subproject commit 8a6b6ae902ac1eb7d9d8db810ecabc9c3cf88cf5
diff --git a/third_party/protobuf/BUILD.gn b/third_party/protobuf/BUILD.gn index 4f6a798..65fda8a 100644 --- a/third_party/protobuf/BUILD.gn +++ b/third_party/protobuf/BUILD.gn
@@ -25,6 +25,12 @@ if (!is_win) { defines += [ "HAVE_PTHREAD" ] } + if (is_clang) { + cflags = [ + # Prevent errors from deprecated absl::disjunction + "-Wno-deprecated", + ] + } } config("protobuf_config_internal") {
diff --git a/third_party/quiche/src b/third_party/quiche/src index d54ca11..a849d35 160000 --- a/third_party/quiche/src +++ b/third_party/quiche/src
@@ -1 +1 @@ -Subproject commit d54ca111b1085b9fea302560b41e371df349061c +Subproject commit a849d35c908d800de783c7434ffcdb44378af823