From ceadcbc3e8b41bd55c08ac7a449bd0d89d1f0f78 Mon Sep 17 00:00:00 2001 From: 3fault Date: Tue, 1 Jul 2025 17:50:45 -0400 Subject: [PATCH 001/184] Add dispatch_guard_page_violation to exception_dispatch --- src/windows-emulator/exception_dispatch.cpp | 11 +++++++++++ src/windows-emulator/exception_dispatch.hpp | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/windows-emulator/exception_dispatch.cpp b/src/windows-emulator/exception_dispatch.cpp index e4626cf2..df4164b1 100644 --- a/src/windows-emulator/exception_dispatch.cpp +++ b/src/windows-emulator/exception_dispatch.cpp @@ -2,6 +2,7 @@ #include "exception_dispatch.hpp" #include "process_context.hpp" #include "cpu_context.hpp" +#include namespace { @@ -182,6 +183,16 @@ void dispatch_access_violation(x86_64_emulator& emu, const process_context& proc }); } +void dispatch_guard_page_violation(x86_64_emulator& emu, const process_context& proc, const uint64_t address, + const memory_operation operation) +{ + dispatch_exception(emu, proc, STATUS_GUARD_PAGE_VIOLATION, + { + map_violation_operation_to_parameter(operation), + address, + }); +} + void dispatch_illegal_instruction_violation(x86_64_emulator& emu, const process_context& proc) { dispatch_exception(emu, proc, STATUS_ILLEGAL_INSTRUCTION, {}); diff --git a/src/windows-emulator/exception_dispatch.hpp b/src/windows-emulator/exception_dispatch.hpp index 4a717c3d..428c55ef 100644 --- a/src/windows-emulator/exception_dispatch.hpp +++ b/src/windows-emulator/exception_dispatch.hpp @@ -19,6 +19,8 @@ void dispatch_exception(x86_64_emulator& emu, const process_context& proc, const void dispatch_access_violation(x86_64_emulator& emu, const process_context& proc, uint64_t address, memory_operation operation); +void dispatch_guard_page_violation(x86_64_emulator& emu, const process_context& proc, uint64_t address, + memory_operation operation); void dispatch_illegal_instruction_violation(x86_64_emulator& emu, const process_context& proc); void dispatch_integer_division_by_zero(x86_64_emulator& emu, const process_context& proc); void dispatch_single_step(x86_64_emulator& emu, const process_context& proc); From a8ae617e50d0be3d5d1f679d751d171abd7bec34 Mon Sep 17 00:00:00 2001 From: 3fault Date: Tue, 1 Jul 2025 18:14:02 -0400 Subject: [PATCH 002/184] Add memory_permission_ext to windows-emulator --- .../memory_permission_ext.cpp | 0 .../memory_permission_ext.hpp | 160 ++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 src/windows-emulator/memory_permission_ext.cpp create mode 100644 src/windows-emulator/memory_permission_ext.hpp diff --git a/src/windows-emulator/memory_permission_ext.cpp b/src/windows-emulator/memory_permission_ext.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/windows-emulator/memory_permission_ext.hpp b/src/windows-emulator/memory_permission_ext.hpp new file mode 100644 index 00000000..ca410475 --- /dev/null +++ b/src/windows-emulator/memory_permission_ext.hpp @@ -0,0 +1,160 @@ +#pragma once +#include "memory_permission.hpp" + +enum class memory_permission_ext : uint8_t +{ + none = 0, + guard = 1 << 0, +}; + +/***************************************************************************** + * + ****************************************************************************/ + +constexpr memory_permission_ext operator&(const memory_permission_ext x, const memory_permission_ext y) +{ + return static_cast(static_cast(x) & static_cast(y)); +} + +constexpr memory_permission_ext operator|(const memory_permission_ext x, const memory_permission_ext y) +{ + return static_cast(static_cast(x) | static_cast(y)); +} + +constexpr memory_permission_ext operator^(const memory_permission_ext x, const memory_permission_ext y) +{ + return static_cast(static_cast(x) ^ static_cast(y)); +} + +constexpr memory_permission_ext operator~(memory_permission_ext x) +{ + return static_cast(~static_cast(x)); +} + +inline memory_permission_ext& operator&=(memory_permission_ext& x, const memory_permission_ext y) +{ + x = x & y; + return x; +} + +inline memory_permission_ext& operator|=(memory_permission_ext& x, const memory_permission_ext y) +{ + x = x | y; + return x; +} + +inline memory_permission_ext& operator^=(memory_permission_ext& x, const memory_permission_ext y) +{ + x = x ^ y; + return x; +} + +/***************************************************************************** + * + ****************************************************************************/ + +struct nt_memory_permission +{ + memory_permission common; + memory_permission_ext extended; + + constexpr nt_memory_permission() : common(memory_permission::none), extended(memory_permission_ext::none) {} + constexpr nt_memory_permission(memory_permission common) : common(common), extended(memory_permission_ext::none) {} + constexpr nt_memory_permission(memory_permission common, memory_permission_ext ext) : common(common), extended(ext) {} + + // Implicit coercions + operator memory_permission() const { return common; } + operator memory_permission_ext() const { return extended; } + + // This just does memberwise equality on each of the members in declaration order + bool operator==(nt_memory_permission const&) const = default; + + nt_memory_permission& operator=(memory_permission const& y) + { + this->common = y; + return *this; + } + + constexpr bool is_guarded() const { + return (this->extended & memory_permission_ext::guard) == memory_permission_ext::guard; + } +}; + +/***************************************************************************** + * + ****************************************************************************/ + +constexpr nt_memory_permission operator&(const nt_memory_permission x, const memory_permission y) +{ + return nt_memory_permission { x.common & y, x.extended }; +} + +constexpr nt_memory_permission operator&(const nt_memory_permission x, const memory_permission_ext y) +{ + return nt_memory_permission { x.common, x.extended & y }; +} + +constexpr nt_memory_permission operator|(const nt_memory_permission x, const memory_permission y) +{ + return nt_memory_permission { x.common | y, x.extended }; +} + +constexpr nt_memory_permission operator|(const nt_memory_permission x, const memory_permission_ext y) +{ + return nt_memory_permission { x.common, x.extended | y }; +} + +constexpr nt_memory_permission operator^(const nt_memory_permission x, const memory_permission y) +{ + return nt_memory_permission { x.common ^ y, x.extended }; +} + +constexpr nt_memory_permission operator^(const nt_memory_permission x, const memory_permission_ext y) +{ + return nt_memory_permission { x.common, x.extended ^ y }; +} + +inline nt_memory_permission& operator&=(nt_memory_permission& x, const memory_permission y) +{ + x = x & y; + return x; +} + +inline nt_memory_permission& operator&=(nt_memory_permission& x, const memory_permission_ext y) +{ + x = x & y; + return x; +} + +inline nt_memory_permission& operator|=(nt_memory_permission& x, const memory_permission y) +{ + x.common | y; + return x; +} + +inline nt_memory_permission& operator|=(nt_memory_permission& x, const nt_memory_permission y) +{ + x.extended | y; + return x; +} + +inline nt_memory_permission& operator^=(nt_memory_permission& x, const memory_permission y) +{ + x.common ^ y; + return x; +} + +inline nt_memory_permission& operator^=(nt_memory_permission& x, const nt_memory_permission y) +{ + x.extended ^ y; + return x; +} + +/***************************************************************************** + * + ****************************************************************************/ + +inline bool is_guarded(const memory_permission_ext permission) +{ + return (permission & memory_permission_ext::guard) != memory_permission_ext::none; +} From 7d8daf7c686cd34c314eaa866846a1336ae055fa Mon Sep 17 00:00:00 2001 From: 3fault Date: Tue, 1 Jul 2025 18:28:54 -0400 Subject: [PATCH 003/184] Update map_nt_to_emulator_protection to support PAGE_GUARD flag --- src/emulator/memory_interface.hpp | 2 +- src/windows-emulator/memory_utils.hpp | 49 +++++++++++++++++---------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/emulator/memory_interface.hpp b/src/emulator/memory_interface.hpp index 2f735e9a..3f472040 100644 --- a/src/emulator/memory_interface.hpp +++ b/src/emulator/memory_interface.hpp @@ -2,7 +2,7 @@ #include #include -#include "memory_permission.hpp" +#include "windows-emulator/memory_permission_ext.hpp" using mmio_read_callback = std::function; using mmio_write_callback = std::function; diff --git a/src/windows-emulator/memory_utils.hpp b/src/windows-emulator/memory_utils.hpp index 70b1a1f8..d524ffd3 100644 --- a/src/windows-emulator/memory_utils.hpp +++ b/src/windows-emulator/memory_utils.hpp @@ -19,28 +19,43 @@ inline std::string get_permission_string(const memory_permission permission) return res; } -inline memory_permission map_nt_to_emulator_protection(uint32_t nt_protection) +inline nt_memory_permission map_nt_to_emulator_protection(uint32_t nt_protection) { - nt_protection &= ~static_cast(PAGE_GUARD); // TODO: Implement that + memory_permission_ext ext = memory_permission_ext::none; + // TODO: Check for invalid combinations + if (nt_protection & PAGE_GUARD) + { + // Unset the guard flag so the following switch statement will still work + nt_protection &= ~static_cast(PAGE_GUARD); + ext = memory_permission_ext::guard; + } + memory_permission common = memory_permission::none; switch (nt_protection) { - case PAGE_NOACCESS: - return memory_permission::none; - case PAGE_READONLY: - return memory_permission::read; - case PAGE_READWRITE: - case PAGE_WRITECOPY: - return memory_permission::read | memory_permission::write; - case PAGE_EXECUTE: - case PAGE_EXECUTE_READ: - return memory_permission::read | memory_permission::exec; - case PAGE_EXECUTE_READWRITE: - return memory_permission::all; - case PAGE_EXECUTE_WRITECOPY: - default: - throw std::runtime_error("Failed to map protection"); + case PAGE_NOACCESS: + common = memory_permission::none; + break; + case PAGE_READONLY: + common = memory_permission::read; + break; + case PAGE_READWRITE: + case PAGE_WRITECOPY: + common = memory_permission::read | memory_permission::write; + break; + case PAGE_EXECUTE: + case PAGE_EXECUTE_READ: + common = memory_permission::read | memory_permission::exec; + break; + case PAGE_EXECUTE_READWRITE: + common = memory_permission::all; + break; + case PAGE_EXECUTE_WRITECOPY: + default: + throw std::runtime_error("Failed to map protection"); } + + return nt_memory_permission { common, ext }; } inline uint32_t map_emulator_to_nt_protection(const memory_permission permission) From 1276c7e2bc987cdab62027899d51f68098b3a874 Mon Sep 17 00:00:00 2001 From: 3fault Date: Tue, 1 Jul 2025 19:04:22 -0400 Subject: [PATCH 004/184] Update occurances of memory_permission to nt_memory_permission where needed --- .../icicle_x86_64_emulator.cpp | 8 ++--- .../unicorn_x86_64_emulator.cpp | 8 ++--- src/emulator/memory_interface.hpp | 4 +-- src/windows-emulator/memory_manager.cpp | 36 ++++++++++++------- src/windows-emulator/memory_manager.hpp | 18 +++++----- src/windows-emulator/syscalls/memory.cpp | 2 +- 6 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index cb759e3a..6bb1d6fa 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -193,9 +193,9 @@ namespace icicle icicle_map_mmio(this->emu_, address, size, read_wrapper, ptr, write_wrapper, ptr); } - void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override { - const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions)); + const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions.common)); ice(res, "Failed to map memory"); } @@ -222,9 +222,9 @@ namespace icicle ice(res, "Failed to write memory"); } - void apply_memory_protection(const uint64_t address, const size_t size, memory_permission permissions) override + void apply_memory_protection(const uint64_t address, const size_t size, nt_memory_permission permissions) override { - const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions)); + const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions.common)); ice(res, "Failed to apply permissions"); } diff --git a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp index 52629f76..d1e48259 100644 --- a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp +++ b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp @@ -335,9 +335,9 @@ namespace unicorn this->mmio_[address] = std::move(cb); } - void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override { - uce(uc_mem_map(*this, address, size, static_cast(permissions))); + uce(uc_mem_map(*this, address, size, static_cast(permissions.common))); } void unmap_memory(const uint64_t address, const size_t size) override @@ -367,9 +367,9 @@ namespace unicorn } void apply_memory_protection(const uint64_t address, const size_t size, - memory_permission permissions) override + nt_memory_permission permissions) override { - uce(uc_mem_protect(*this, address, size, static_cast(permissions))); + uce(uc_mem_protect(*this, address, size, static_cast(permissions.common))); } emulator_hook* hook_instruction(const int instruction_type, instruction_hook_callback callback) override diff --git a/src/emulator/memory_interface.hpp b/src/emulator/memory_interface.hpp index 3f472040..b8e67096 100644 --- a/src/emulator/memory_interface.hpp +++ b/src/emulator/memory_interface.hpp @@ -22,10 +22,10 @@ class memory_interface private: virtual void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) = 0; - virtual void map_memory(uint64_t address, size_t size, memory_permission permissions) = 0; + virtual void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) = 0; virtual void unmap_memory(uint64_t address, size_t size) = 0; - virtual void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) = 0; + virtual void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) = 0; public: template diff --git a/src/windows-emulator/memory_manager.cpp b/src/windows-emulator/memory_manager.cpp index 98268bef..14c0ca55 100644 --- a/src/windows-emulator/memory_manager.cpp +++ b/src/windows-emulator/memory_manager.cpp @@ -1,8 +1,10 @@ +#include "memory_permission.hpp" #include "std_include.hpp" #include "memory_manager.hpp" #include "memory_region.hpp" #include "address_utils.hpp" +#include "windows-emulator/memory_permission_ext.hpp" #include #include @@ -73,7 +75,7 @@ namespace utils static void deserialize(buffer_deserializer& buffer, memory_manager::committed_region& region) { region.length = static_cast(buffer.read()); - region.permissions = buffer.read(); + region.permissions = buffer.read(); } static void serialize(buffer_serializer& buffer, const memory_manager::reserved_region& region) @@ -170,8 +172,8 @@ void memory_manager::deserialize_memory_state(utils::buffer_deserializer& buffer } } -bool memory_manager::protect_memory(const uint64_t address, const size_t size, const memory_permission permissions, - memory_permission* old_permissions) +bool memory_manager::protect_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions, + nt_memory_permission* old_permissions) { const auto entry = this->find_reserved_region(address); if (entry == this->reserved_regions_.end()) @@ -249,7 +251,7 @@ bool memory_manager::allocate_mmio(const uint64_t address, const size_t size, mm return true; } -bool memory_manager::allocate_memory(const uint64_t address, const size_t size, const memory_permission permissions, +bool memory_manager::allocate_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions, const bool reserve_only) { if (this->overlaps_reserved_region(address, size)) @@ -268,7 +270,13 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size, if (!reserve_only) { this->map_memory(address, size, permissions); - entry->second.committed_regions[address] = committed_region{size, memory_permission::read_write}; + + auto common = memory_permission::read_write; + auto extended = permissions.is_guarded() + ? memory_permission_ext::guard + : memory_permission_ext::none; + + entry->second.committed_regions[address] = committed_region{size, nt_memory_permission{common, extended}}; } this->update_layout_version(); @@ -276,7 +284,7 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size, return true; } -bool memory_manager::commit_memory(const uint64_t address, const size_t size, const memory_permission permissions) +bool memory_manager::commit_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions) { const auto entry = this->find_reserved_region(address); if (entry == this->reserved_regions_.end()) @@ -454,7 +462,7 @@ void memory_manager::unmap_all_memory() this->reserved_regions_.clear(); } -uint64_t memory_manager::allocate_memory(const size_t size, const memory_permission permissions, +uint64_t memory_manager::allocate_memory(const size_t size, const nt_memory_permission permissions, const bool reserve_only) { const auto allocation_base = this->find_free_allocation_base(size); @@ -500,8 +508,8 @@ region_info memory_manager::get_region_info(const uint64_t address) region_info result{}; result.start = MIN_ALLOCATION_ADDRESS; result.length = static_cast(MAX_ALLOCATION_ADDRESS - result.start); - result.permissions = memory_permission::none; - result.initial_permissions = memory_permission::none; + result.permissions = nt_memory_permission(); + result.initial_permissions = nt_memory_permission(); result.allocation_base = {}; result.allocation_length = result.length; result.is_committed = false; @@ -624,9 +632,13 @@ void memory_manager::map_mmio(const uint64_t address, const size_t size, mmio_re this->memory_->map_mmio(address, size, std::move(read_cb), std::move(write_cb)); } -void memory_manager::map_memory(const uint64_t address, const size_t size, const memory_permission permissions) +void memory_manager::map_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions) { - this->memory_->map_memory(address, size, permissions); + auto perms = permissions.is_guarded() + ? nt_memory_permission(memory_permission::none) + : permissions; + + this->memory_->map_memory(address, size, perms); } void memory_manager::unmap_memory(const uint64_t address, const size_t size) @@ -635,7 +647,7 @@ void memory_manager::unmap_memory(const uint64_t address, const size_t size) } void memory_manager::apply_memory_protection(const uint64_t address, const size_t size, - const memory_permission permissions) + const nt_memory_permission permissions) { this->memory_->apply_memory_protection(address, size, permissions); } diff --git a/src/windows-emulator/memory_manager.hpp b/src/windows-emulator/memory_manager.hpp index 4b5f087e..a67d383f 100644 --- a/src/windows-emulator/memory_manager.hpp +++ b/src/windows-emulator/memory_manager.hpp @@ -18,7 +18,7 @@ struct region_info : basic_memory_region size_t allocation_length{}; bool is_reserved{}; bool is_committed{}; - memory_permission initial_permissions{}; + nt_memory_permission initial_permissions{}; }; using mmio_read_callback = std::function; @@ -35,7 +35,7 @@ class memory_manager : public memory_interface struct committed_region { size_t length{}; - memory_permission permissions{}; + nt_memory_permission permissions{}; }; using committed_region_map = std::map; @@ -54,20 +54,20 @@ class memory_manager : public memory_interface bool try_read_memory(uint64_t address, void* data, size_t size) const final; void write_memory(uint64_t address, const void* data, size_t size) final; - bool protect_memory(uint64_t address, size_t size, memory_permission permissions, - memory_permission* old_permissions = nullptr); + bool protect_memory(uint64_t address, size_t size, nt_memory_permission permissions, + nt_memory_permission* old_permissions = nullptr); bool allocate_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb); - bool allocate_memory(uint64_t address, size_t size, memory_permission permissions, bool reserve_only = false); + bool allocate_memory(uint64_t address, size_t size, nt_memory_permission permissions, bool reserve_only = false); - bool commit_memory(uint64_t address, size_t size, memory_permission permissions); + bool commit_memory(uint64_t address, size_t size, nt_memory_permission permissions); bool decommit_memory(uint64_t address, size_t size); bool release_memory(uint64_t address, size_t size); void unmap_all_memory(); - uint64_t allocate_memory(size_t size, memory_permission permissions, bool reserve_only = false); + uint64_t allocate_memory(size_t size, nt_memory_permission permissions, bool reserve_only = false); uint64_t find_free_allocation_base(size_t size, uint64_t start = 0) const; @@ -96,9 +96,9 @@ class memory_manager : public memory_interface std::atomic layout_version_{0}; void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) final; - void map_memory(uint64_t address, size_t size, memory_permission permissions) final; + void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) final; void unmap_memory(uint64_t address, size_t size) final; - void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) final; + void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) final; void update_layout_version(); }; diff --git a/src/windows-emulator/syscalls/memory.cpp b/src/windows-emulator/syscalls/memory.cpp index efd5e2f2..0f08c057 100644 --- a/src/windows-emulator/syscalls/memory.cpp +++ b/src/windows-emulator/syscalls/memory.cpp @@ -148,7 +148,7 @@ namespace syscalls c.win_emu.callbacks.on_memory_protect(aligned_start, aligned_length, requested_protection); - memory_permission old_protection_value{}; + nt_memory_permission old_protection_value{}; try { From 2e17f37f78ef4d40939323f27ef2cd0b7d2e02f0 Mon Sep 17 00:00:00 2001 From: 3fault Date: Tue, 1 Jul 2025 19:17:05 -0400 Subject: [PATCH 005/184] Update hook_memory_violation to handle guard page violations --- src/analyzer/main.cpp | 2 +- src/emulator/memory_region.hpp | 4 ++-- src/windows-emulator/windows_emulator.cpp | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 5739b501..5f8814b8 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -317,7 +317,7 @@ namespace { for (const auto& section : exe.sections) { - if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) + if ((section.region.permissions.common & memory_permission::exec) != memory_permission::exec) { continue; } diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index cdf25ce9..51324467 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -1,12 +1,12 @@ #pragma once -#include "memory_permission.hpp" +#include "windows-emulator/memory_permission_ext.hpp" #include struct basic_memory_region { uint64_t start{}; size_t length{}; // uint64_t? - memory_permission permissions{}; + nt_memory_permission permissions{}; }; struct memory_region : basic_memory_region diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp index 44175c43..8ee4b066 100644 --- a/src/windows-emulator/windows_emulator.cpp +++ b/src/windows-emulator/windows_emulator.cpp @@ -11,6 +11,7 @@ #include "apiset/apiset.hpp" #include "network/static_socket_factory.hpp" +#include "windows-emulator/memory_permission_ext.hpp" constexpr auto MAX_INSTRUCTIONS_PER_TIME_SLICE = 0x20000; @@ -499,8 +500,19 @@ void windows_emulator::setup_hooks() this->emu().hook_memory_violation([&](const uint64_t address, const size_t size, const memory_operation operation, const memory_violation_type type) { - this->callbacks.on_memory_violate(address, size, operation, type); - dispatch_access_violation(this->emu(), this->process, address, operation); + auto region = this->memory.get_region_info(address); + if (region.permissions.is_guarded()) + { + // Unset the GUARD_PAGE flag and dispatch a STATUS_GUARD_PAGE_VIOLATION + this->memory.protect_memory(region.allocation_base, region.length, region.permissions & ~memory_permission_ext::guard); + dispatch_guard_page_violation(this->emu(), this->process, address, operation); + } + else + { + this->callbacks.on_memory_violate(address, size, operation, type); + dispatch_access_violation(this->emu(), this->process, address, operation); + } + return memory_violation_continuation::resume; }); From 68a5800c856e8d44158aa5a67b9ddda447bbfd72 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 2 Jul 2025 12:09:21 -0400 Subject: [PATCH 006/184] Add test for guard page in test-sample, formatting fix --- src/samples/test-sample/test.cpp | 96 +++++++++++++++++++ .../memory_permission_ext.hpp | 3 +- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/src/samples/test-sample/test.cpp b/src/samples/test-sample/test.cpp index 6b5cdba6..a08be686 100644 --- a/src/samples/test-sample/test.cpp +++ b/src/samples/test-sample/test.cpp @@ -721,6 +721,101 @@ namespace SleepEx(1, TRUE); return executions == 2; } + + INT32 test_guard_page_seh_filter(LPVOID address, DWORD code, struct _EXCEPTION_POINTERS* ep) + { + // We are only looking for guard page exceptions. + if (code != STATUS_GUARD_PAGE_VIOLATION) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The number of defined elements in the ExceptionInformation array for + // a guard page violation should be 2. + if (ep->ExceptionRecord->NumberParameters != 2) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The ExceptionInformation array specifies additional arguments that + // describe the exception. + auto *exception_information = ep->ExceptionRecord->ExceptionInformation; + + // If this value is zero, the thread attempted to read the inaccessible + // data. If this value is 1, the thread attempted to write to an + // inaccessible address. + if (exception_information[0] != 1) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The second array element specifies the virtual address of the + // inaccessible data. + if (exception_information[1] != (ULONG_PTR)address) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + return EXCEPTION_EXECUTE_HANDLER; + } + + bool test_guard_page() + { + SYSTEM_INFO sys_info; + GetSystemInfo(&sys_info); + + // Allocate a guarded memory region with the length of the system page + // size. + auto *addr = static_cast(VirtualAlloc( + nullptr, + sys_info.dwPageSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE | PAGE_GUARD + )); + if (addr == nullptr) + { + puts("Failed to allocate guard page"); + return false; + } + + bool success = false; + + // We want to access some arbitrary offset into the guarded page, to + // ensure that ExceptionInformation correctly contains the virtual + // address of the inaccessible data, not the base address of the region. + constexpr size_t offset = 10; + + // Trigger a guard page violation + __try + { + addr[offset] = 255; + } + // If the filter function returns EXCEPTION_CONTINUE_SEARCH, the + // exception contains all of the correct information. + __except(test_guard_page_seh_filter( + addr + offset, + GetExceptionCode(), + GetExceptionInformation())) + { + success = true; + } + + // The page guard should be lifted, so no exception should be raised. + __try { + // The previous write should not have went through, this is probably + // superflous. + if (addr[offset] == 255) { + success = false; + } + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + puts("Failed to read from page after guard exception!"); + success = false; + } + + return success; + } } #define RUN_TEST(func, name) \ @@ -761,6 +856,7 @@ int main(const int argc, const char* argv[]) RUN_TEST(test_tls, "TLS") RUN_TEST(test_socket, "Socket") RUN_TEST(test_apc, "APC") + RUN_TEST(test_guard_page, "Guard Page") return valid ? 0 : 1; } diff --git a/src/windows-emulator/memory_permission_ext.hpp b/src/windows-emulator/memory_permission_ext.hpp index ca410475..257acfc6 100644 --- a/src/windows-emulator/memory_permission_ext.hpp +++ b/src/windows-emulator/memory_permission_ext.hpp @@ -75,7 +75,8 @@ struct nt_memory_permission return *this; } - constexpr bool is_guarded() const { + constexpr bool is_guarded() const + { return (this->extended & memory_permission_ext::guard) == memory_permission_ext::guard; } }; From 9a6da790cf5308c263d82ee37c0915c7faa60a87 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 2 Jul 2025 13:41:23 -0400 Subject: [PATCH 007/184] Remove #include in exception_dispatch --- src/windows-emulator/exception_dispatch.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/windows-emulator/exception_dispatch.cpp b/src/windows-emulator/exception_dispatch.cpp index df4164b1..2a15c02b 100644 --- a/src/windows-emulator/exception_dispatch.cpp +++ b/src/windows-emulator/exception_dispatch.cpp @@ -2,7 +2,6 @@ #include "exception_dispatch.hpp" #include "process_context.hpp" #include "cpu_context.hpp" -#include namespace { From 2ecd3e4440ef5f5a84cad9a42746f04e2e2a7d17 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 2 Jul 2025 14:06:37 -0400 Subject: [PATCH 008/184] add STATUS_GUARD_PAGE_VIOLATION constant to platform includes --- src/common/platform/status.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/platform/status.hpp b/src/common/platform/status.hpp index 7918fcf0..720f700c 100644 --- a/src/common/platform/status.hpp +++ b/src/common/platform/status.hpp @@ -10,6 +10,7 @@ using NTSTATUS = std::uint32_t; #define STATUS_TIMEOUT ((NTSTATUS)0x00000102L) #define STATUS_PENDING ((NTSTATUS)0x00000103L) +#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001L) #define STATUS_BREAKPOINT ((NTSTATUS)0x80000003L) #define STATUS_SINGLE_STEP ((NTSTATUS)0x80000004L) From af21473cf1301842d64baa14e3dc119e5846ffa5 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 2 Jul 2025 14:27:05 -0400 Subject: [PATCH 009/184] merge test_guard_page with test_native_exceptions, fixes MinGW build --- src/samples/test-sample/test.cpp | 193 +++++++++++++++---------------- 1 file changed, 96 insertions(+), 97 deletions(-) diff --git a/src/samples/test-sample/test.cpp b/src/samples/test-sample/test.cpp index a08be686..e8b6fe12 100644 --- a/src/samples/test-sample/test.cpp +++ b/src/samples/test-sample/test.cpp @@ -646,10 +646,105 @@ namespace return res; } + + INT32 test_guard_page_seh_filter(LPVOID address, DWORD code, struct _EXCEPTION_POINTERS* ep) + { + // We are only looking for guard page exceptions. + if (code != STATUS_GUARD_PAGE_VIOLATION) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The number of defined elements in the ExceptionInformation array for + // a guard page violation should be 2. + if (ep->ExceptionRecord->NumberParameters != 2) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The ExceptionInformation array specifies additional arguments that + // describe the exception. + auto *exception_information = ep->ExceptionRecord->ExceptionInformation; + + // If this value is zero, the thread attempted to read the inaccessible + // data. If this value is 1, the thread attempted to write to an + // inaccessible address. + if (exception_information[0] != 1) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + // The second array element specifies the virtual address of the + // inaccessible data. + if (exception_information[1] != (ULONG_PTR)address) + { + return EXCEPTION_CONTINUE_SEARCH; + } + + return EXCEPTION_EXECUTE_HANDLER; + } + + bool test_guard_page_exception() + { + SYSTEM_INFO sys_info; + GetSystemInfo(&sys_info); + + // Allocate a guarded memory region with the length of the system page + // size. + auto *addr = static_cast(VirtualAlloc( + nullptr, + sys_info.dwPageSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE | PAGE_GUARD + )); + if (addr == nullptr) + { + puts("Failed to allocate guard page"); + return false; + } + + bool success = false; + + // We want to access some arbitrary offset into the guarded page, to + // ensure that ExceptionInformation correctly contains the virtual + // address of the inaccessible data, not the base address of the region. + constexpr size_t offset = 10; + + // Trigger a guard page violation + __try + { + addr[offset] = 255; + } + // If the filter function returns EXCEPTION_CONTINUE_SEARCH, the + // exception contains all of the correct information. + __except(test_guard_page_seh_filter( + addr + offset, + GetExceptionCode(), + GetExceptionInformation())) + { + success = true; + } + + // The page guard should be lifted, so no exception should be raised. + __try { + // The previous write should not have went through, this is probably + // superflous. + if (addr[offset] == 255) { + success = false; + } + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + puts("Failed to read from page after guard exception!"); + success = false; + } + + return success; + } bool test_native_exceptions() { - return test_access_violation_exception() && test_illegal_instruction_exception(); + return test_access_violation_exception() && test_illegal_instruction_exception() && test_guard_page_exception(); } #endif @@ -721,101 +816,6 @@ namespace SleepEx(1, TRUE); return executions == 2; } - - INT32 test_guard_page_seh_filter(LPVOID address, DWORD code, struct _EXCEPTION_POINTERS* ep) - { - // We are only looking for guard page exceptions. - if (code != STATUS_GUARD_PAGE_VIOLATION) - { - return EXCEPTION_CONTINUE_SEARCH; - } - - // The number of defined elements in the ExceptionInformation array for - // a guard page violation should be 2. - if (ep->ExceptionRecord->NumberParameters != 2) - { - return EXCEPTION_CONTINUE_SEARCH; - } - - // The ExceptionInformation array specifies additional arguments that - // describe the exception. - auto *exception_information = ep->ExceptionRecord->ExceptionInformation; - - // If this value is zero, the thread attempted to read the inaccessible - // data. If this value is 1, the thread attempted to write to an - // inaccessible address. - if (exception_information[0] != 1) - { - return EXCEPTION_CONTINUE_SEARCH; - } - - // The second array element specifies the virtual address of the - // inaccessible data. - if (exception_information[1] != (ULONG_PTR)address) - { - return EXCEPTION_CONTINUE_SEARCH; - } - - return EXCEPTION_EXECUTE_HANDLER; - } - - bool test_guard_page() - { - SYSTEM_INFO sys_info; - GetSystemInfo(&sys_info); - - // Allocate a guarded memory region with the length of the system page - // size. - auto *addr = static_cast(VirtualAlloc( - nullptr, - sys_info.dwPageSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE | PAGE_GUARD - )); - if (addr == nullptr) - { - puts("Failed to allocate guard page"); - return false; - } - - bool success = false; - - // We want to access some arbitrary offset into the guarded page, to - // ensure that ExceptionInformation correctly contains the virtual - // address of the inaccessible data, not the base address of the region. - constexpr size_t offset = 10; - - // Trigger a guard page violation - __try - { - addr[offset] = 255; - } - // If the filter function returns EXCEPTION_CONTINUE_SEARCH, the - // exception contains all of the correct information. - __except(test_guard_page_seh_filter( - addr + offset, - GetExceptionCode(), - GetExceptionInformation())) - { - success = true; - } - - // The page guard should be lifted, so no exception should be raised. - __try { - // The previous write should not have went through, this is probably - // superflous. - if (addr[offset] == 255) { - success = false; - } - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - puts("Failed to read from page after guard exception!"); - success = false; - } - - return success; - } } #define RUN_TEST(func, name) \ @@ -856,7 +856,6 @@ int main(const int argc, const char* argv[]) RUN_TEST(test_tls, "TLS") RUN_TEST(test_socket, "Socket") RUN_TEST(test_apc, "APC") - RUN_TEST(test_guard_page, "Guard Page") return valid ? 0 : 1; } From 6e203d9590a3fe7544b1542dc51286e8306bbb87 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 2 Jul 2025 14:47:51 -0400 Subject: [PATCH 010/184] Fix formatting issues --- .../icicle_x86_64_emulator.cpp | 3 +- src/samples/test-sample/test.cpp | 43 ++++++++--------- src/windows-emulator/exception_dispatch.cpp | 2 +- src/windows-emulator/exception_dispatch.hpp | 2 +- src/windows-emulator/memory_manager.cpp | 12 ++--- .../memory_permission_ext.hpp | 48 +++++++++++++------ src/windows-emulator/memory_utils.hpp | 42 ++++++++-------- src/windows-emulator/windows_emulator.cpp | 7 +-- 8 files changed, 85 insertions(+), 74 deletions(-) diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index 6bb1d6fa..2895fe1d 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -222,7 +222,8 @@ namespace icicle ice(res, "Failed to write memory"); } - void apply_memory_protection(const uint64_t address, const size_t size, nt_memory_permission permissions) override + void apply_memory_protection(const uint64_t address, const size_t size, + nt_memory_permission permissions) override { const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions.common)); ice(res, "Failed to apply permissions"); diff --git a/src/samples/test-sample/test.cpp b/src/samples/test-sample/test.cpp index e8b6fe12..feece83f 100644 --- a/src/samples/test-sample/test.cpp +++ b/src/samples/test-sample/test.cpp @@ -646,26 +646,26 @@ namespace return res; } - - INT32 test_guard_page_seh_filter(LPVOID address, DWORD code, struct _EXCEPTION_POINTERS* ep) + + INT32 test_guard_page_seh_filter(LPVOID address, DWORD code, struct _EXCEPTION_POINTERS* ep) { // We are only looking for guard page exceptions. - if (code != STATUS_GUARD_PAGE_VIOLATION) + if (code != STATUS_GUARD_PAGE_VIOLATION) { return EXCEPTION_CONTINUE_SEARCH; } // The number of defined elements in the ExceptionInformation array for // a guard page violation should be 2. - if (ep->ExceptionRecord->NumberParameters != 2) + if (ep->ExceptionRecord->NumberParameters != 2) { return EXCEPTION_CONTINUE_SEARCH; } // The ExceptionInformation array specifies additional arguments that // describe the exception. - auto *exception_information = ep->ExceptionRecord->ExceptionInformation; - + auto* exception_information = ep->ExceptionRecord->ExceptionInformation; + // If this value is zero, the thread attempted to read the inaccessible // data. If this value is 1, the thread attempted to write to an // inaccessible address. @@ -673,14 +673,14 @@ namespace { return EXCEPTION_CONTINUE_SEARCH; } - + // The second array element specifies the virtual address of the // inaccessible data. if (exception_information[1] != (ULONG_PTR)address) { return EXCEPTION_CONTINUE_SEARCH; } - + return EXCEPTION_EXECUTE_HANDLER; } @@ -691,12 +691,8 @@ namespace // Allocate a guarded memory region with the length of the system page // size. - auto *addr = static_cast(VirtualAlloc( - nullptr, - sys_info.dwPageSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE | PAGE_GUARD - )); + auto* addr = static_cast( + VirtualAlloc(nullptr, sys_info.dwPageSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE | PAGE_GUARD)); if (addr == nullptr) { puts("Failed to allocate guard page"); @@ -704,12 +700,12 @@ namespace } bool success = false; - + // We want to access some arbitrary offset into the guarded page, to // ensure that ExceptionInformation correctly contains the virtual // address of the inaccessible data, not the base address of the region. constexpr size_t offset = 10; - + // Trigger a guard page violation __try { @@ -717,28 +713,27 @@ namespace } // If the filter function returns EXCEPTION_CONTINUE_SEARCH, the // exception contains all of the correct information. - __except(test_guard_page_seh_filter( - addr + offset, - GetExceptionCode(), - GetExceptionInformation())) + __except (test_guard_page_seh_filter(addr + offset, GetExceptionCode(), GetExceptionInformation())) { success = true; } // The page guard should be lifted, so no exception should be raised. - __try { + __try + { // The previous write should not have went through, this is probably // superflous. - if (addr[offset] == 255) { + if (addr[offset] == 255) + { success = false; } } - __except(EXCEPTION_EXECUTE_HANDLER) + __except (EXCEPTION_EXECUTE_HANDLER) { puts("Failed to read from page after guard exception!"); success = false; } - + return success; } diff --git a/src/windows-emulator/exception_dispatch.cpp b/src/windows-emulator/exception_dispatch.cpp index 2a15c02b..09e9d93c 100644 --- a/src/windows-emulator/exception_dispatch.cpp +++ b/src/windows-emulator/exception_dispatch.cpp @@ -183,7 +183,7 @@ void dispatch_access_violation(x86_64_emulator& emu, const process_context& proc } void dispatch_guard_page_violation(x86_64_emulator& emu, const process_context& proc, const uint64_t address, - const memory_operation operation) + const memory_operation operation) { dispatch_exception(emu, proc, STATUS_GUARD_PAGE_VIOLATION, { diff --git a/src/windows-emulator/exception_dispatch.hpp b/src/windows-emulator/exception_dispatch.hpp index 428c55ef..46850435 100644 --- a/src/windows-emulator/exception_dispatch.hpp +++ b/src/windows-emulator/exception_dispatch.hpp @@ -20,7 +20,7 @@ void dispatch_exception(x86_64_emulator& emu, const process_context& proc, const void dispatch_access_violation(x86_64_emulator& emu, const process_context& proc, uint64_t address, memory_operation operation); void dispatch_guard_page_violation(x86_64_emulator& emu, const process_context& proc, uint64_t address, - memory_operation operation); + memory_operation operation); void dispatch_illegal_instruction_violation(x86_64_emulator& emu, const process_context& proc); void dispatch_integer_division_by_zero(x86_64_emulator& emu, const process_context& proc); void dispatch_single_step(x86_64_emulator& emu, const process_context& proc); diff --git a/src/windows-emulator/memory_manager.cpp b/src/windows-emulator/memory_manager.cpp index 14c0ca55..7e149e50 100644 --- a/src/windows-emulator/memory_manager.cpp +++ b/src/windows-emulator/memory_manager.cpp @@ -272,10 +272,8 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size, this->map_memory(address, size, permissions); auto common = memory_permission::read_write; - auto extended = permissions.is_guarded() - ? memory_permission_ext::guard - : memory_permission_ext::none; - + auto extended = permissions.is_guarded() ? memory_permission_ext::guard : memory_permission_ext::none; + entry->second.committed_regions[address] = committed_region{size, nt_memory_permission{common, extended}}; } @@ -634,10 +632,8 @@ void memory_manager::map_mmio(const uint64_t address, const size_t size, mmio_re void memory_manager::map_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions) { - auto perms = permissions.is_guarded() - ? nt_memory_permission(memory_permission::none) - : permissions; - + auto perms = permissions.is_guarded() ? nt_memory_permission(memory_permission::none) : permissions; + this->memory_->map_memory(address, size, perms); } diff --git a/src/windows-emulator/memory_permission_ext.hpp b/src/windows-emulator/memory_permission_ext.hpp index 257acfc6..63427929 100644 --- a/src/windows-emulator/memory_permission_ext.hpp +++ b/src/windows-emulator/memory_permission_ext.hpp @@ -53,29 +53,47 @@ inline memory_permission_ext& operator^=(memory_permission_ext& x, const memory_ * ****************************************************************************/ -struct nt_memory_permission +struct nt_memory_permission { - memory_permission common; + memory_permission common; memory_permission_ext extended; - constexpr nt_memory_permission() : common(memory_permission::none), extended(memory_permission_ext::none) {} - constexpr nt_memory_permission(memory_permission common) : common(common), extended(memory_permission_ext::none) {} - constexpr nt_memory_permission(memory_permission common, memory_permission_ext ext) : common(common), extended(ext) {} + constexpr nt_memory_permission() + : common(memory_permission::none), + extended(memory_permission_ext::none) + { + } + constexpr nt_memory_permission(memory_permission common) + : common(common), + extended(memory_permission_ext::none) + { + } + constexpr nt_memory_permission(memory_permission common, memory_permission_ext ext) + : common(common), + extended(ext) + { + } // Implicit coercions - operator memory_permission() const { return common; } - operator memory_permission_ext() const { return extended; } + operator memory_permission() const + { + return common; + } + operator memory_permission_ext() const + { + return extended; + } // This just does memberwise equality on each of the members in declaration order bool operator==(nt_memory_permission const&) const = default; - nt_memory_permission& operator=(memory_permission const& y) + nt_memory_permission& operator=(memory_permission const& y) { this->common = y; return *this; } - constexpr bool is_guarded() const + constexpr bool is_guarded() const { return (this->extended & memory_permission_ext::guard) == memory_permission_ext::guard; } @@ -87,32 +105,32 @@ struct nt_memory_permission constexpr nt_memory_permission operator&(const nt_memory_permission x, const memory_permission y) { - return nt_memory_permission { x.common & y, x.extended }; + return nt_memory_permission{x.common & y, x.extended}; } constexpr nt_memory_permission operator&(const nt_memory_permission x, const memory_permission_ext y) { - return nt_memory_permission { x.common, x.extended & y }; + return nt_memory_permission{x.common, x.extended & y}; } constexpr nt_memory_permission operator|(const nt_memory_permission x, const memory_permission y) { - return nt_memory_permission { x.common | y, x.extended }; + return nt_memory_permission{x.common | y, x.extended}; } constexpr nt_memory_permission operator|(const nt_memory_permission x, const memory_permission_ext y) { - return nt_memory_permission { x.common, x.extended | y }; + return nt_memory_permission{x.common, x.extended | y}; } constexpr nt_memory_permission operator^(const nt_memory_permission x, const memory_permission y) { - return nt_memory_permission { x.common ^ y, x.extended }; + return nt_memory_permission{x.common ^ y, x.extended}; } constexpr nt_memory_permission operator^(const nt_memory_permission x, const memory_permission_ext y) { - return nt_memory_permission { x.common, x.extended ^ y }; + return nt_memory_permission{x.common, x.extended ^ y}; } inline nt_memory_permission& operator&=(nt_memory_permission& x, const memory_permission y) diff --git a/src/windows-emulator/memory_utils.hpp b/src/windows-emulator/memory_utils.hpp index d524ffd3..bcb05747 100644 --- a/src/windows-emulator/memory_utils.hpp +++ b/src/windows-emulator/memory_utils.hpp @@ -33,29 +33,29 @@ inline nt_memory_permission map_nt_to_emulator_protection(uint32_t nt_protection memory_permission common = memory_permission::none; switch (nt_protection) { - case PAGE_NOACCESS: - common = memory_permission::none; - break; - case PAGE_READONLY: - common = memory_permission::read; - break; - case PAGE_READWRITE: - case PAGE_WRITECOPY: - common = memory_permission::read | memory_permission::write; - break; - case PAGE_EXECUTE: - case PAGE_EXECUTE_READ: - common = memory_permission::read | memory_permission::exec; - break; - case PAGE_EXECUTE_READWRITE: - common = memory_permission::all; - break; - case PAGE_EXECUTE_WRITECOPY: - default: - throw std::runtime_error("Failed to map protection"); + case PAGE_NOACCESS: + common = memory_permission::none; + break; + case PAGE_READONLY: + common = memory_permission::read; + break; + case PAGE_READWRITE: + case PAGE_WRITECOPY: + common = memory_permission::read | memory_permission::write; + break; + case PAGE_EXECUTE: + case PAGE_EXECUTE_READ: + common = memory_permission::read | memory_permission::exec; + break; + case PAGE_EXECUTE_READWRITE: + common = memory_permission::all; + break; + case PAGE_EXECUTE_WRITECOPY: + default: + throw std::runtime_error("Failed to map protection"); } - return nt_memory_permission { common, ext }; + return nt_memory_permission{common, ext}; } inline uint32_t map_emulator_to_nt_protection(const memory_permission permission) diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp index 8ee4b066..f89d58a8 100644 --- a/src/windows-emulator/windows_emulator.cpp +++ b/src/windows-emulator/windows_emulator.cpp @@ -503,8 +503,9 @@ void windows_emulator::setup_hooks() auto region = this->memory.get_region_info(address); if (region.permissions.is_guarded()) { - // Unset the GUARD_PAGE flag and dispatch a STATUS_GUARD_PAGE_VIOLATION - this->memory.protect_memory(region.allocation_base, region.length, region.permissions & ~memory_permission_ext::guard); + // Unset the GUARD_PAGE flag and dispatch a STATUS_GUARD_PAGE_VIOLATION + this->memory.protect_memory(region.allocation_base, region.length, + region.permissions & ~memory_permission_ext::guard); dispatch_guard_page_violation(this->emu(), this->process, address, operation); } else @@ -512,7 +513,7 @@ void windows_emulator::setup_hooks() this->callbacks.on_memory_violate(address, size, operation, type); dispatch_access_violation(this->emu(), this->process, address, operation); } - + return memory_violation_continuation::resume; }); From 8ec184d57f3203be28336ccd599ef3ea77d2bc03 Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 9 Jul 2025 14:39:49 -0400 Subject: [PATCH 011/184] remove unneeded windows-emulator/memory_permission_ext.cpp --- src/windows-emulator/memory_permission_ext.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/windows-emulator/memory_permission_ext.cpp diff --git a/src/windows-emulator/memory_permission_ext.cpp b/src/windows-emulator/memory_permission_ext.cpp deleted file mode 100644 index e69de29b..00000000 From 19574fb512cf7ad9836d3fcdfee9e547319514ee Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 9 Jul 2025 14:43:06 -0400 Subject: [PATCH 012/184] remove references to nt_memory_permission from backend --- src/analyzer/main.cpp | 2 +- .../icicle-emulator/icicle_x86_64_emulator.cpp | 9 ++++----- .../unicorn_x86_64_emulator.cpp | 8 ++++---- src/emulator/memory_interface.hpp | 6 +++--- src/emulator/memory_region.hpp | 4 ++-- src/windows-emulator/memory_manager.cpp | 18 ++++++------------ src/windows-emulator/memory_manager.hpp | 17 +++++++++++++---- src/windows-emulator/memory_utils.hpp | 1 + 8 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 5f8814b8..5739b501 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -317,7 +317,7 @@ namespace { for (const auto& section : exe.sections) { - if ((section.region.permissions.common & memory_permission::exec) != memory_permission::exec) + if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) { continue; } diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index 2895fe1d..cb759e3a 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -193,9 +193,9 @@ namespace icicle icicle_map_mmio(this->emu_, address, size, read_wrapper, ptr, write_wrapper, ptr); } - void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override { - const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions.common)); + const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions)); ice(res, "Failed to map memory"); } @@ -222,10 +222,9 @@ namespace icicle ice(res, "Failed to write memory"); } - void apply_memory_protection(const uint64_t address, const size_t size, - nt_memory_permission permissions) override + void apply_memory_protection(const uint64_t address, const size_t size, memory_permission permissions) override { - const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions.common)); + const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions)); ice(res, "Failed to apply permissions"); } diff --git a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp index d1e48259..52629f76 100644 --- a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp +++ b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp @@ -335,9 +335,9 @@ namespace unicorn this->mmio_[address] = std::move(cb); } - void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override { - uce(uc_mem_map(*this, address, size, static_cast(permissions.common))); + uce(uc_mem_map(*this, address, size, static_cast(permissions))); } void unmap_memory(const uint64_t address, const size_t size) override @@ -367,9 +367,9 @@ namespace unicorn } void apply_memory_protection(const uint64_t address, const size_t size, - nt_memory_permission permissions) override + memory_permission permissions) override { - uce(uc_mem_protect(*this, address, size, static_cast(permissions.common))); + uce(uc_mem_protect(*this, address, size, static_cast(permissions))); } emulator_hook* hook_instruction(const int instruction_type, instruction_hook_callback callback) override diff --git a/src/emulator/memory_interface.hpp b/src/emulator/memory_interface.hpp index b8e67096..2f735e9a 100644 --- a/src/emulator/memory_interface.hpp +++ b/src/emulator/memory_interface.hpp @@ -2,7 +2,7 @@ #include #include -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission.hpp" using mmio_read_callback = std::function; using mmio_write_callback = std::function; @@ -22,10 +22,10 @@ class memory_interface private: virtual void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) = 0; - virtual void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) = 0; + virtual void map_memory(uint64_t address, size_t size, memory_permission permissions) = 0; virtual void unmap_memory(uint64_t address, size_t size) = 0; - virtual void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) = 0; + virtual void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) = 0; public: template diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index 51324467..cdf25ce9 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -1,12 +1,12 @@ #pragma once -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission.hpp" #include struct basic_memory_region { uint64_t start{}; size_t length{}; // uint64_t? - nt_memory_permission permissions{}; + memory_permission permissions{}; }; struct memory_region : basic_memory_region diff --git a/src/windows-emulator/memory_manager.cpp b/src/windows-emulator/memory_manager.cpp index 7e149e50..9f45a8b4 100644 --- a/src/windows-emulator/memory_manager.cpp +++ b/src/windows-emulator/memory_manager.cpp @@ -1,4 +1,3 @@ -#include "memory_permission.hpp" #include "std_include.hpp" #include "memory_manager.hpp" @@ -269,12 +268,9 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size, if (!reserve_only) { - this->map_memory(address, size, permissions); - - auto common = memory_permission::read_write; - auto extended = permissions.is_guarded() ? memory_permission_ext::guard : memory_permission_ext::none; - - entry->second.committed_regions[address] = committed_region{size, nt_memory_permission{common, extended}}; + this->map_memory(address, size, permissions.is_guarded() ? memory_permission::none : permissions.common); + entry->second.committed_regions[address] = + committed_region{size, nt_memory_permission{memory_permission::read_write, permissions.extended}}; } this->update_layout_version(); @@ -630,11 +626,9 @@ void memory_manager::map_mmio(const uint64_t address, const size_t size, mmio_re this->memory_->map_mmio(address, size, std::move(read_cb), std::move(write_cb)); } -void memory_manager::map_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions) +void memory_manager::map_memory(const uint64_t address, const size_t size, const memory_permission permissions) { - auto perms = permissions.is_guarded() ? nt_memory_permission(memory_permission::none) : permissions; - - this->memory_->map_memory(address, size, perms); + this->memory_->map_memory(address, size, permissions); } void memory_manager::unmap_memory(const uint64_t address, const size_t size) @@ -643,7 +637,7 @@ void memory_manager::unmap_memory(const uint64_t address, const size_t size) } void memory_manager::apply_memory_protection(const uint64_t address, const size_t size, - const nt_memory_permission permissions) + const memory_permission permissions) { this->memory_->apply_memory_protection(address, size, permissions); } diff --git a/src/windows-emulator/memory_manager.hpp b/src/windows-emulator/memory_manager.hpp index a67d383f..8f533e3c 100644 --- a/src/windows-emulator/memory_manager.hpp +++ b/src/windows-emulator/memory_manager.hpp @@ -3,7 +3,7 @@ #include #include -#include "memory_region.hpp" +#include "memory_permission_ext.hpp" #include "serialization.hpp" #include @@ -12,7 +12,16 @@ constexpr auto ALLOCATION_GRANULARITY = 0x0000000000010000ULL; constexpr auto MIN_ALLOCATION_ADDRESS = 0x0000000000010000ULL; constexpr auto MAX_ALLOCATION_ADDRESS = 0x00007ffffffeffffULL; -struct region_info : basic_memory_region +// This maps to the `basic_memory_region` struct defined in +// emulator\memory_region.hpp +struct nt_basic_memory_region +{ + uint64_t start{}; + size_t length{}; + nt_memory_permission permissions{}; +}; + +struct region_info : nt_basic_memory_region { uint64_t allocation_base{}; size_t allocation_length{}; @@ -96,9 +105,9 @@ class memory_manager : public memory_interface std::atomic layout_version_{0}; void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) final; - void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) final; + void map_memory(uint64_t address, size_t size, memory_permission permissions) final; void unmap_memory(uint64_t address, size_t size) final; - void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) final; + void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) final; void update_layout_version(); }; diff --git a/src/windows-emulator/memory_utils.hpp b/src/windows-emulator/memory_utils.hpp index bcb05747..e50b0098 100644 --- a/src/windows-emulator/memory_utils.hpp +++ b/src/windows-emulator/memory_utils.hpp @@ -2,6 +2,7 @@ #include #include #include +#include "memory_permission_ext.hpp" inline std::string get_permission_string(const memory_permission permission) { From f4fc9c4a6c6c65c8dd2fb7110cf4f7fb2b7455da Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 9 Jul 2025 14:49:26 -0400 Subject: [PATCH 013/184] fix memory_permissions_ext includes --- src/windows-emulator/memory_manager.cpp | 2 +- src/windows-emulator/windows_emulator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/windows-emulator/memory_manager.cpp b/src/windows-emulator/memory_manager.cpp index 9f45a8b4..9bdcf6d6 100644 --- a/src/windows-emulator/memory_manager.cpp +++ b/src/windows-emulator/memory_manager.cpp @@ -3,7 +3,7 @@ #include "memory_region.hpp" #include "address_utils.hpp" -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission_ext.hpp" #include #include diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp index f89d58a8..a56f1a06 100644 --- a/src/windows-emulator/windows_emulator.cpp +++ b/src/windows-emulator/windows_emulator.cpp @@ -11,7 +11,7 @@ #include "apiset/apiset.hpp" #include "network/static_socket_factory.hpp" -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission_ext.hpp" constexpr auto MAX_INSTRUCTIONS_PER_TIME_SLICE = 0x20000; From 20f96841de39c183b372f68bf6fa6f854c8a097e Mon Sep 17 00:00:00 2001 From: maskelihileci <41159853+maskelihileci@users.noreply.github.com> Date: Thu, 17 Jul 2025 14:36:29 +0300 Subject: [PATCH 014/184] Generate an output that the Tenet plugin can read Generates a Tenet tracer output with the -t parameter. The original Tenet tracer plugin is outdated, so I made updates to support our emulator. The forked project below works well. https://github.com/maskelihileci/tenet/tree/master/plugins_sogen-support --- src/analyzer/CMakeLists.txt | 78 +- src/analyzer/main.cpp | 1183 +++---- src/analyzer/object_watching.hpp | 86 +- src/analyzer/reflect_extension.hpp | 4608 ++++++++++++++-------------- src/analyzer/reflect_type_info.hpp | 166 +- src/analyzer/resource.rc | 202 +- src/analyzer/snapshot.cpp | 246 +- src/analyzer/snapshot.hpp | 24 +- src/analyzer/std_include.hpp | 62 +- src/analyzer/tenet_tracer.cpp | 256 ++ src/analyzer/tenet_tracer.hpp | 60 + src/analyzer/test.py | 52 +- 12 files changed, 3683 insertions(+), 3340 deletions(-) create mode 100644 src/analyzer/tenet_tracer.cpp create mode 100644 src/analyzer/tenet_tracer.hpp diff --git a/src/analyzer/CMakeLists.txt b/src/analyzer/CMakeLists.txt index a0ed8607..8b44da9f 100644 --- a/src/analyzer/CMakeLists.txt +++ b/src/analyzer/CMakeLists.txt @@ -1,39 +1,39 @@ -file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS - *.cpp - *.hpp - *.rc -) - -list(SORT SRC_FILES) - -add_executable(analyzer ${SRC_FILES}) - -momo_assign_source_group(${SRC_FILES}) - -if(NOT MOMO_ENABLE_CLANG_TIDY) - target_precompile_headers(analyzer PRIVATE std_include.hpp) -endif() - -target_link_libraries(analyzer PRIVATE - reflect - debugger - windows-emulator - windows-gdb-stub - backend-selection -) - -set_property(GLOBAL PROPERTY VS_STARTUP_PROJECT analyzer) - -momo_strip_target(analyzer) - -set(ENV_PREFIX "$") -set(ENV_SUFFIX "") - -if(WIN) -set(ENV_PREFIX "%") -set(ENV_SUFFIX "%") -endif() - -add_test(NAME analyzer-test - COMMAND "${PYTHON3_EXE}" "${CMAKE_CURRENT_LIST_DIR}/test.py" - WORKING_DIRECTORY "$") +file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS + *.cpp + *.hpp + *.rc +) + +list(SORT SRC_FILES) + +add_executable(analyzer ${SRC_FILES}) + +momo_assign_source_group(${SRC_FILES}) + +if(NOT MOMO_ENABLE_CLANG_TIDY) + target_precompile_headers(analyzer PRIVATE std_include.hpp) +endif() + +target_link_libraries(analyzer PRIVATE + reflect + debugger + windows-emulator + windows-gdb-stub + backend-selection +) + +set_property(GLOBAL PROPERTY VS_STARTUP_PROJECT analyzer) + +momo_strip_target(analyzer) + +set(ENV_PREFIX "$") +set(ENV_SUFFIX "") + +if(WIN) +set(ENV_PREFIX "%") +set(ENV_SUFFIX "%") +endif() + +add_test(NAME analyzer-test + COMMAND "${PYTHON3_EXE}" "${CMAKE_CURRENT_LIST_DIR}/test.py" + WORKING_DIRECTORY "$") diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 9d4bd0ee..0d51501e 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -1,578 +1,605 @@ -#include "std_include.hpp" - -#include -#include -#include -#include - -#include "object_watching.hpp" -#include "snapshot.hpp" -#include "analysis.hpp" - -#include -#include - -#include - -#ifdef OS_EMSCRIPTEN -#include -#endif - -namespace -{ - struct analysis_options : analysis_settings - { - mutable bool use_gdb{false}; - bool log_executable_access{false}; - std::filesystem::path dump{}; - std::filesystem::path minidump_path{}; - std::string registry_path{"./registry"}; - std::string emulation_root{}; - std::unordered_map path_mappings{}; - }; - - void split_and_insert(std::set>& container, const std::string_view str, - const char splitter = ',') - { - size_t current_start = 0; - for (size_t i = 0; i < str.size(); ++i) - { - const auto value = str[i]; - if (value != splitter) - { - continue; - } - - if (current_start < i) - { - container.emplace(str.substr(current_start, i - current_start)); - } - - current_start = i + 1; - } - - if (current_start < str.size()) - { - container.emplace(str.substr(current_start)); - } - } - - void watch_system_objects(windows_emulator& win_emu, const std::set>& modules, - const bool verbose) - { - win_emu.setup_process_if_necessary(); - - (void)win_emu; - (void)modules; - (void)verbose; - -#if !defined(__GNUC__) || defined(__clang__) - watch_object(win_emu, modules, *win_emu.current_thread().teb, verbose); - watch_object(win_emu, modules, win_emu.process.peb, verbose); - watch_object(win_emu, modules, emulator_object{win_emu.emu(), kusd_mmio::address()}, - verbose); - - auto* params_hook = watch_object(win_emu, modules, win_emu.process.process_params, verbose); - - win_emu.emu().hook_memory_write( - win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters), 0x8, - [&win_emu, verbose, params_hook, modules](const uint64_t address, const void*, size_t) mutable { - const auto target_address = win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters); - - if (address == target_address) - { - const emulator_object obj{ - win_emu.emu(), - win_emu.emu().read_memory(address), - }; - - win_emu.emu().delete_hook(params_hook); - params_hook = watch_object(win_emu, modules, obj, verbose); - } - }); -#endif - } - - bool read_yes_no_answer() - { - while (true) - { - const auto chr = static_cast(getchar()); - if (chr == 'y') - { - return true; - } - - if (chr == 'n') - { - return false; - } - } - } - - void do_post_emulation_work(const analysis_context& c) - { - if (c.settings->buffer_stdout) - { - c.win_emu->log.info("%.*s%s", static_cast(c.output.size()), c.output.data(), - c.output.ends_with("\n") ? "" : "\n"); - } - } - - bool run_emulation(const analysis_context& c, const analysis_options& options) - { - auto& win_emu = *c.win_emu; - - std::atomic_uint32_t signals_received{0}; - utils::interupt_handler _{[&] { - const auto value = signals_received++; - if (value == 1) - { - win_emu.log.log("Exit already requested. Press CTRL+C again to force kill!"); - } - else if (value >= 2) - { - _Exit(1); - } - - win_emu.stop(); - }}; - - std::optional exit_status{}; -#ifdef OS_EMSCRIPTEN - const auto _1 = utils::finally([&] { - debugger::handle_exit(win_emu, exit_status); // - }); -#endif - - try - { - if (options.use_gdb) - { - const auto* address = "127.0.0.1:28960"; - win_emu.log.print(color::pink, "Waiting for GDB connection on %s...\n", address); - - const auto should_stop = [&] { return signals_received > 0; }; - - win_x64_gdb_stub_handler handler{win_emu, should_stop}; - gdb_stub::run_gdb_stub(network::address{"0.0.0.0:28960", AF_INET}, handler); - } - else if (!options.minidump_path.empty()) - { - // For minidumps, don't start execution automatically; just report ready state - win_emu.log.print(color::green, "Minidump loaded successfully. Process state ready for analysis.\n"); - return true; // Return success without starting emulation - } - else - { - win_emu.start(); - } - - if (signals_received > 0) - { - options.use_gdb = false; - - win_emu.log.log("Do you want to create a snapshot? (y/n)\n"); - const auto write_snapshot = read_yes_no_answer(); - - if (write_snapshot) - { - snapshot::write_emulator_snapshot(win_emu); - } - } - } - catch (const std::exception& e) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation failed at: 0x%" PRIx64 " - %s\n", win_emu.emu().read_instruction_pointer(), - e.what()); - throw; - } - catch (...) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation failed at: 0x%" PRIx64 "\n", win_emu.emu().read_instruction_pointer()); - throw; - } - - exit_status = win_emu.process.exit_status; - if (!exit_status.has_value()) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation terminated without status!\n"); - return false; - } - - const auto success = *exit_status == STATUS_SUCCESS; - - if (!options.silent) - { - do_post_emulation_work(c); - win_emu.log.disable_output(false); - win_emu.log.print(success ? color::green : color::red, "Emulation terminated with status: %X\n", - *exit_status); - } - - return success; - } - - std::vector parse_arguments(const std::span args) - { - std::vector wide_args{}; - wide_args.reserve(args.size() - 1); - - for (size_t i = 1; i < args.size(); ++i) - { - const auto& arg = args[i]; - wide_args.emplace_back(arg.begin(), arg.end()); - } - - return wide_args; - } - - emulator_settings create_emulator_settings(const analysis_options& options) - { - return { - .emulation_root = options.emulation_root, - .registry_directory = options.registry_path, - .path_mappings = options.path_mappings, - }; - } - - std::unique_ptr create_empty_emulator(const analysis_options& options) - { - const auto settings = create_emulator_settings(options); - return std::make_unique(create_x86_64_emulator(), settings); - } - - std::unique_ptr create_application_emulator(const analysis_options& options, - const std::span args) - { - if (args.empty()) - { - throw std::runtime_error("No args provided"); - } - - application_settings app_settings{ - .application = args[0], - .arguments = parse_arguments(args), - }; - - const auto settings = create_emulator_settings(options); - return std::make_unique(create_x86_64_emulator(), std::move(app_settings), settings); - } - - std::unique_ptr setup_emulator(const analysis_options& options, - const std::span args) - { - if (!options.dump.empty()) - { - // load snapshot - auto win_emu = create_empty_emulator(options); - snapshot::load_emulator_snapshot(*win_emu, options.dump); - return win_emu; - } - if (!options.minidump_path.empty()) - { - // load minidump - auto win_emu = create_empty_emulator(options); - minidump_loader::load_minidump_into_emulator(*win_emu, options.minidump_path); - return win_emu; - } - - // default: load application - return create_application_emulator(options, args); - } - - bool run(const analysis_options& options, const std::span args) - { - analysis_context context{ - .settings = &options, - }; - - const auto win_emu = setup_emulator(options, args); - win_emu->log.disable_output(options.concise_logging || options.silent); - context.win_emu = win_emu.get(); - - win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); - - register_analysis_callbacks(context); - watch_system_objects(*win_emu, options.modules, options.verbose_logging); - - const auto& exe = *win_emu->mod_manager.executable; - - const auto concise_logging = !options.verbose_logging; - - win_emu->emu().hook_instruction(x86_hookable_instructions::cpuid, [&] { - const auto rip = win_emu->emu().read_instruction_pointer(); - auto* mod = get_module_if_interesting(win_emu->mod_manager, options.modules, rip); - - if (mod) - { - const auto leaf = win_emu->emu().reg(x86_register::eax); - win_emu->log.print(color::blue, "Executing CPUID instruction with leaf 0x%X at 0x%" PRIx64 " (%s)\n", - leaf, rip, mod->name.c_str()); - } - - return instruction_hook_continuation::run_instruction; - }); - - if (options.log_executable_access) - { - for (const auto& section : exe.sections) - { - if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) - { - continue; - } - - auto read_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { - const auto rip = win_emu->emu().read_instruction_pointer(); - if (!win_emu->mod_manager.executable->is_within(rip)) - { - return; - } - - if (concise_logging) - { - static uint64_t count{0}; - ++count; - if (count > 100 && count % 100000 != 0) - { - return; - } - } - - win_emu->log.print(color::green, - "Reading from executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", - section.name.c_str(), address, rip); - }; - - const auto write_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { - const auto rip = win_emu->emu().read_instruction_pointer(); - if (!win_emu->mod_manager.executable->is_within(rip)) - { - return; - } - - if (concise_logging) - { - static uint64_t count{0}; - ++count; - if (count > 100 && count % 100000 != 0) - { - return; - } - } - - win_emu->log.print(color::blue, - "Writing to executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", - section.name.c_str(), address, rip); - }; - - win_emu->emu().hook_memory_read(section.region.start, section.region.length, std::move(read_handler)); - win_emu->emu().hook_memory_write(section.region.start, section.region.length, std::move(write_handler)); - } - } - - return run_emulation(context, options); - } - - std::vector bundle_arguments(const int argc, char** argv) - { - std::vector args{}; - - for (int i = 1; i < argc; ++i) - { - args.emplace_back(argv[i]); - } - - return args; - } - - void print_help() - { - printf("Usage: analyzer [options] [application] [args...]\n\n"); - printf("Options:\n"); - printf(" -h, --help Show this help message\n"); - printf(" -d, --debug Enable GDB debugging mode\n"); - printf(" -s, --silent Silent mode\n"); - printf(" -v, --verbose Verbose logging\n"); - printf(" -b, --buffer Buffer stdout\n"); - printf(" -c, --concise Concise logging\n"); - printf(" -x, --exec Log r/w access to executable memory\n"); - printf(" -m, --module Specify module to track\n"); - printf(" -e, --emulation Set emulation root path\n"); - printf(" -a, --snapshot Load snapshot dump from path\n"); - printf(" --minidump Load minidump from path\n"); - printf(" -i, --ignore Comma-separated list of functions to ignore\n"); - printf(" -p, --path Map Windows path to host path\n"); - printf(" -r, --registry Set registry path (default: ./registry)\n\n"); - printf("Examples:\n"); - printf(" analyzer -v -e path/to/root myapp.exe\n"); - printf(" analyzer -e path/to/root -p c:/analysis-sample.exe /path/to/sample.exe c:/analysis-sample.exe\n"); - } - - analysis_options parse_options(std::vector& args) - { - analysis_options options{}; - - while (!args.empty()) - { - auto arg_it = args.begin(); - const auto& arg = *arg_it; - - if (arg == "-h" || arg == "--help") - { - print_help(); - std::exit(0); - } - else if (arg == "-d" || arg == "--debug") - { - options.use_gdb = true; - } - else if (arg == "-s" || arg == "--silent") - { - options.silent = true; - } - else if (arg == "-v" || arg == "--verbose") - { - options.verbose_logging = true; - } - else if (arg == "-b" || arg == "--buffer") - { - options.buffer_stdout = true; - } - else if (arg == "-x" || arg == "--exec") - { - options.log_executable_access = true; - } - else if (arg == "-c" || arg == "--concise") - { - options.concise_logging = true; - } - else if (arg == "-m" || arg == "--module") - { - if (args.size() < 2) - { - throw std::runtime_error("No module provided after -m/--module"); - } - - arg_it = args.erase(arg_it); - options.modules.insert(std::string(args[0])); - } - else if (arg == "-e" || arg == "--emulation") - { - if (args.size() < 2) - { - throw std::runtime_error("No emulation root path provided after -e/--emulation"); - } - arg_it = args.erase(arg_it); - options.emulation_root = args[0]; - } - else if (arg == "-a" || arg == "--snapshot") - { - if (args.size() < 2) - { - throw std::runtime_error("No dump path provided after -a/--snapshot"); - } - arg_it = args.erase(arg_it); - options.dump = args[0]; - } - else if (arg == "--minidump") - { - if (args.size() < 2) - { - throw std::runtime_error("No minidump path provided after --minidump"); - } - arg_it = args.erase(arg_it); - options.minidump_path = args[0]; - } - else if (arg == "-i" || arg == "--ignore") - { - if (args.size() < 2) - { - throw std::runtime_error("No ignored function(s) provided after -i/--ignore"); - } - arg_it = args.erase(arg_it); - split_and_insert(options.ignored_functions, args[0]); - } - else if (arg == "-p" || arg == "--path") - { - if (args.size() < 3) - { - throw std::runtime_error("No path mapping provided after -p/--path"); - } - arg_it = args.erase(arg_it); - windows_path source = args[0]; - arg_it = args.erase(arg_it); - std::filesystem::path target = std::filesystem::absolute(args[0]); - - options.path_mappings[std::move(source)] = std::move(target); - } - else if (arg == "-r" || arg == "--registry") - { - if (args.size() < 2) - { - throw std::runtime_error("No registry path provided after -r/--registry"); - } - arg_it = args.erase(arg_it); - options.registry_path = args[0]; - } - else - { - break; - } - - args.erase(arg_it); - } - - return options; - } - - int run_main(const int argc, char** argv) - { - try - { - auto args = bundle_arguments(argc, argv); - if (args.empty()) - { - print_help(); - return 1; - } - - const auto options = parse_options(args); - - bool result{}; - - do - { - result = run(options, args); - } while (options.use_gdb); - - return result ? 0 : 1; - } - catch (std::exception& e) - { - puts(e.what()); - -#if defined(_WIN32) && 0 - MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); -#endif - } - - return 1; - } -} - -int main(const int argc, char** argv) -{ - return run_main(argc, argv); -} - -#ifdef _WIN32 -int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) -{ - return run_main(__argc, __argv); -} -#endif +#include "std_include.hpp" + +#include +#include +#include +#include + +#include "object_watching.hpp" +#include "snapshot.hpp" +#include "analysis.hpp" +#include "tenet_tracer.hpp" + +#include +#include + +#include + +#include +#include + +#ifdef OS_EMSCRIPTEN +#include +#endif + +namespace +{ + struct analysis_options : analysis_settings + { + mutable bool use_gdb{false}; + bool log_executable_access{false}; + bool tenet_trace{false}; + std::filesystem::path dump{}; + std::filesystem::path minidump_path{}; + std::string registry_path{"./registry"}; + std::string emulation_root{}; + std::unordered_map path_mappings{}; + }; + + void split_and_insert(std::set>& container, const std::string_view str, + const char splitter = ',') + { + size_t current_start = 0; + for (size_t i = 0; i < str.size(); ++i) + { + const auto value = str[i]; + if (value != splitter) + { + continue; + } + + if (current_start < i) + { + container.emplace(str.substr(current_start, i - current_start)); + } + + current_start = i + 1; + } + + if (current_start < str.size()) + { + container.emplace(str.substr(current_start)); + } + } + + void watch_system_objects(windows_emulator& win_emu, const std::set>& modules, + const bool verbose) + { + win_emu.setup_process_if_necessary(); + + (void)win_emu; + (void)modules; + (void)verbose; + +#if !defined(__GNUC__) || defined(__clang__) + watch_object(win_emu, modules, *win_emu.current_thread().teb, verbose); + watch_object(win_emu, modules, win_emu.process.peb, verbose); + watch_object(win_emu, modules, emulator_object{win_emu.emu(), kusd_mmio::address()}, + verbose); + + auto* params_hook = watch_object(win_emu, modules, win_emu.process.process_params, verbose); + + win_emu.emu().hook_memory_write( + win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters), 0x8, + [&win_emu, verbose, params_hook, modules](const uint64_t address, const void*, size_t) mutable { + const auto target_address = win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters); + + if (address == target_address) + { + const emulator_object obj{ + win_emu.emu(), + win_emu.emu().read_memory(address), + }; + + win_emu.emu().delete_hook(params_hook); + params_hook = watch_object(win_emu, modules, obj, verbose); + } + }); +#endif + } + + bool read_yes_no_answer() + { + while (true) + { + const auto chr = static_cast(getchar()); + if (chr == 'y') + { + return true; + } + + if (chr == 'n') + { + return false; + } + } + } + + void do_post_emulation_work(const analysis_context& c) + { + if (c.settings->buffer_stdout) + { + c.win_emu->log.info("%.*s%s", static_cast(c.output.size()), c.output.data(), + c.output.ends_with("\n") ? "" : "\n"); + } + } + + bool run_emulation(const analysis_context& c, const analysis_options& options) + { + auto& win_emu = *c.win_emu; + + std::atomic_uint32_t signals_received{0}; + utils::interupt_handler _{[&] { + const auto value = signals_received++; + if (value == 1) + { + win_emu.log.log("Exit already requested. Press CTRL+C again to force kill!"); + } + else if (value >= 2) + { + _Exit(1); + } + + win_emu.stop(); + }}; + + std::optional exit_status{}; +#ifdef OS_EMSCRIPTEN + const auto _1 = utils::finally([&] { + debugger::handle_exit(win_emu, exit_status); // + }); +#endif + + try + { + if (options.use_gdb) + { + const auto* address = "127.0.0.1:28960"; + win_emu.log.print(color::pink, "Waiting for GDB connection on %s...\n", address); + + const auto should_stop = [&] { return signals_received > 0; }; + + win_x64_gdb_stub_handler handler{win_emu, should_stop}; + gdb_stub::run_gdb_stub(network::address{"0.0.0.0:28960", AF_INET}, handler); + } + else if (!options.minidump_path.empty()) + { + // For minidumps, don't start execution automatically; just report ready state + win_emu.log.print(color::green, "Minidump loaded successfully. Process state ready for analysis.\n"); + return true; // Return success without starting emulation + } + else + { + win_emu.start(); + } + + if (signals_received > 0) + { + options.use_gdb = false; + + win_emu.log.log("Do you want to create a snapshot? (y/n)\n"); + const auto write_snapshot = read_yes_no_answer(); + + if (write_snapshot) + { + snapshot::write_emulator_snapshot(win_emu); + } + } + } + catch (const std::exception& e) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation failed at: 0x%" PRIx64 " - %s\n", win_emu.emu().read_instruction_pointer(), + e.what()); + throw; + } + catch (...) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation failed at: 0x%" PRIx64 "\n", win_emu.emu().read_instruction_pointer()); + throw; + } + + exit_status = win_emu.process.exit_status; + if (!exit_status.has_value()) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation terminated without status!\n"); + return false; + } + + const auto success = *exit_status == STATUS_SUCCESS; + + if (!options.silent) + { + do_post_emulation_work(c); + win_emu.log.disable_output(false); + win_emu.log.print(success ? color::green : color::red, "Emulation terminated with status: %X\n", + *exit_status); + } + + return success; + } + + std::vector parse_arguments(const std::span args) + { + std::vector wide_args{}; + wide_args.reserve(args.size() - 1); + + for (size_t i = 1; i < args.size(); ++i) + { + const auto& arg = args[i]; + wide_args.emplace_back(arg.begin(), arg.end()); + } + + return wide_args; + } + + emulator_settings create_emulator_settings(const analysis_options& options) + { + return { + .emulation_root = options.emulation_root, + .registry_directory = options.registry_path, + .path_mappings = options.path_mappings, + }; + } + + std::unique_ptr create_empty_emulator(const analysis_options& options) + { + const auto settings = create_emulator_settings(options); + return std::make_unique(create_x86_64_emulator(), settings); + } + + std::unique_ptr create_application_emulator(const analysis_options& options, + const std::span args) + { + if (args.empty()) + { + throw std::runtime_error("No args provided"); + } + + application_settings app_settings{ + .application = args[0], + .arguments = parse_arguments(args), + }; + + const auto settings = create_emulator_settings(options); + return std::make_unique(create_x86_64_emulator(), std::move(app_settings), settings); + } + + std::unique_ptr setup_emulator(const analysis_options& options, + const std::span args) + { + if (!options.dump.empty()) + { + // load snapshot + auto win_emu = create_empty_emulator(options); + snapshot::load_emulator_snapshot(*win_emu, options.dump); + return win_emu; + } + if (!options.minidump_path.empty()) + { + // load minidump + auto win_emu = create_empty_emulator(options); + minidump_loader::load_minidump_into_emulator(*win_emu, options.minidump_path); + return win_emu; + } + + // default: load application + return create_application_emulator(options, args); + } + +bool run(const analysis_options& options, const std::span args) +{ + analysis_context context{ + .settings = &options, + }; + + const auto win_emu = setup_emulator(options, args); + win_emu->log.disable_output(options.concise_logging || options.silent); + context.win_emu = win_emu.get(); + + win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); + + // Enable TenetTracer and assign it to the context. + std::unique_ptr tenet_tracer; + if (options.tenet_trace) + { + win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); + tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); + + // Set up the hook to call the tracer for each instruction. + win_emu->emu().hook_memory_execution([&](uint64_t address) { + if (tenet_tracer) + { + tenet_tracer->process_instruction(address); + } + }); + } + + register_analysis_callbacks(context); + watch_system_objects(*win_emu, options.modules, options.verbose_logging); + + const auto& exe = *win_emu->mod_manager.executable; + + const auto concise_logging = !options.verbose_logging; + + win_emu->emu().hook_instruction(x86_hookable_instructions::cpuid, [&] { + const auto rip = win_emu->emu().read_instruction_pointer(); + auto* mod = get_module_if_interesting(win_emu->mod_manager, options.modules, rip); + + if (mod) + { + const auto leaf = win_emu->emu().reg(x86_register::eax); + win_emu->log.print(color::blue, "Executing CPUID instruction with leaf 0x%X at 0x%" PRIx64 " (%s)\n", + leaf, rip, mod->name.c_str()); + } + + return instruction_hook_continuation::run_instruction; + }); + + if (options.log_executable_access) + { + for (const auto& section : exe.sections) + { + if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) + { + continue; + } + + auto read_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto rip = win_emu->emu().read_instruction_pointer(); + if (!win_emu->mod_manager.executable->is_within(rip)) + { + return; + } + + if (concise_logging) + { + static uint64_t count{0}; + ++count; + if (count > 100 && count % 100000 != 0) + { + return; + } + } + + win_emu->log.print(color::green, + "Reading from executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", + section.name.c_str(), address, rip); + }; + + const auto write_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto rip = win_emu->emu().read_instruction_pointer(); + if (!win_emu->mod_manager.executable->is_within(rip)) + { + return; + } + + if (concise_logging) + { + static uint64_t count{0}; + ++count; + if (count > 100 && count % 100000 != 0) + { + return; + } + } + + win_emu->log.print(color::blue, + "Writing to executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", + section.name.c_str(), address, rip); + }; + + win_emu->emu().hook_memory_read(section.region.start, section.region.length, std::move(read_handler)); + win_emu->emu().hook_memory_write(section.region.start, section.region.length, std::move(write_handler)); + } + } + + return run_emulation(context, options); + } + + std::vector bundle_arguments(const int argc, char** argv) + { + std::vector args{}; + + for (int i = 1; i < argc; ++i) + { + args.emplace_back(argv[i]); + } + + return args; + } + + void print_help() + { + printf("Usage: analyzer [options] [application] [args...]\n\n"); + printf("Options:\n"); + printf(" -h, --help Show this help message\n"); + printf(" -d, --debug Enable GDB debugging mode\n"); + printf(" -s, --silent Silent mode\n"); + printf(" -v, --verbose Verbose logging\n"); + printf(" -b, --buffer Buffer stdout\n"); + printf(" -c, --concise Concise logging\n"); + printf(" -x, --exec Log r/w access to executable memory\n"); + printf(" -m, --module Specify module to track\n"); + printf(" -e, --emulation Set emulation root path\n"); + printf(" -a, --snapshot Load snapshot dump from path\n"); + printf(" --minidump Load minidump from path\n"); + printf(" -t, --tenet-trace Enable Tenet tracer\n"); + printf(" -i, --ignore Comma-separated list of functions to ignore\n"); + printf(" -p, --path Map Windows path to host path\n"); + printf(" -r, --registry Set registry path (default: ./registry)\n\n"); + printf("Examples:\n"); + printf(" analyzer -v -e path/to/root myapp.exe\n"); + printf(" analyzer -e path/to/root -p c:/analysis-sample.exe /path/to/sample.exe c:/analysis-sample.exe\n"); + } + + + analysis_options parse_options(std::vector& args) + { + analysis_options options{}; + + while (!args.empty()) + { + auto arg_it = args.begin(); + const auto& arg = *arg_it; + + if (arg == "-h" || arg == "--help") + { + print_help(); + std::exit(0); + } + else if (arg == "-d" || arg == "--debug") + { + options.use_gdb = true; + } + else if (arg == "-s" || arg == "--silent") + { + options.silent = true; + } + else if (arg == "-v" || arg == "--verbose") + { + options.verbose_logging = true; + } + else if (arg == "-b" || arg == "--buffer") + { + options.buffer_stdout = true; + } + else if (arg == "-x" || arg == "--exec") + { + options.log_executable_access = true; + } + else if (arg == "-c" || arg == "--concise") + { + options.concise_logging = true; + } + else if (arg == "-t" || arg == "--tenet-trace") + { + options.tenet_trace = true; + } + else if (arg == "-m" || arg == "--module") + { + if (args.size() < 2) + { + throw std::runtime_error("No module provided after -m/--module"); + } + + arg_it = args.erase(arg_it); + options.modules.insert(std::string(args[0])); + } + else if (arg == "-e" || arg == "--emulation") + { + if (args.size() < 2) + { + throw std::runtime_error("No emulation root path provided after -e/--emulation"); + } + arg_it = args.erase(arg_it); + options.emulation_root = args[0]; + } + else if (arg == "-a" || arg == "--snapshot") + { + if (args.size() < 2) + { + throw std::runtime_error("No dump path provided after -a/--snapshot"); + } + arg_it = args.erase(arg_it); + options.dump = args[0]; + } + else if (arg == "--minidump") + { + if (args.size() < 2) + { + throw std::runtime_error("No minidump path provided after --minidump"); + } + arg_it = args.erase(arg_it); + options.minidump_path = args[0]; + } + else if (arg == "-i" || arg == "--ignore") + { + if (args.size() < 2) + { + throw std::runtime_error("No ignored function(s) provided after -i/--ignore"); + } + arg_it = args.erase(arg_it); + split_and_insert(options.ignored_functions, args[0]); + } + else if (arg == "-p" || arg == "--path") + { + if (args.size() < 3) + { + throw std::runtime_error("No path mapping provided after -p/--path"); + } + arg_it = args.erase(arg_it); + windows_path source = args[0]; + arg_it = args.erase(arg_it); + std::filesystem::path target = std::filesystem::absolute(args[0]); + + options.path_mappings[std::move(source)] = std::move(target); + } + else if (arg == "-r" || arg == "--registry") + { + if (args.size() < 2) + { + throw std::runtime_error("No registry path provided after -r/--registry"); + } + arg_it = args.erase(arg_it); + options.registry_path = args[0]; + } + else + { + break; + } + + args.erase(arg_it); + } + + return options; + } + + int run_main(const int argc, char** argv) + { + try + { + auto args = bundle_arguments(argc, argv); + if (args.empty()) + { + print_help(); + return 1; + } + + const auto options = parse_options(args); + + bool result{}; + + do + { + result = run(options, args); + } while (options.use_gdb); + + return result ? 0 : 1; + } + catch (std::exception& e) + { + puts(e.what()); + +#if defined(_WIN32) && 0 + MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); +#endif + } + + return 1; + } +} + +int main(const int argc, char** argv) +{ + return run_main(argc, argv); +} + +#ifdef _WIN32 +int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) +{ + return run_main(__argc, __argv); +} +#endif diff --git a/src/analyzer/object_watching.hpp b/src/analyzer/object_watching.hpp index 3ba81167..01c7feb9 100644 --- a/src/analyzer/object_watching.hpp +++ b/src/analyzer/object_watching.hpp @@ -1,43 +1,43 @@ -#pragma once - -#include "reflect_type_info.hpp" -#include -#include - -template -emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, - emulator_object object, const auto verbose) -{ - const reflect_type_info info{}; - - return emu.emu().hook_memory_read( - object.value(), static_cast(object.size()), - [i = std::move(info), object, &emu, verbose, modules](const uint64_t address, const void*, size_t) { - const auto rip = emu.emu().read_instruction_pointer(); - const auto* mod = emu.mod_manager.find_by_address(rip); - const auto is_main_access = mod == emu.mod_manager.executable || modules.contains(mod->name); - - if (!verbose && !is_main_access) - { - return; - } - - if (!verbose) - { - static std::unordered_set logged_addresses{}; - if (is_main_access && !logged_addresses.insert(address).second) - { - return; - } - } - - const auto offset = address - object.value(); - const auto* mod_name = mod ? mod->name.c_str() : ""; - const auto& type_name = i.get_type_name(); - const auto member_name = i.get_member_name(static_cast(offset)); - - emu.log.print(is_main_access ? color::green : color::dark_gray, - "Object access: %s - 0x%" PRIx64 " (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset, - member_name.c_str(), rip, mod_name); - }); -} +#pragma once + +#include "reflect_type_info.hpp" +#include +#include + +template +emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, + emulator_object object, const auto verbose) +{ + const reflect_type_info info{}; + + return emu.emu().hook_memory_read( + object.value(), static_cast(object.size()), + [i = std::move(info), object, &emu, verbose, modules](const uint64_t address, const void*, size_t) { + const auto rip = emu.emu().read_instruction_pointer(); + const auto* mod = emu.mod_manager.find_by_address(rip); + const auto is_main_access = mod == emu.mod_manager.executable || modules.contains(mod->name); + + if (!verbose && !is_main_access) + { + return; + } + + if (!verbose) + { + static std::unordered_set logged_addresses{}; + if (is_main_access && !logged_addresses.insert(address).second) + { + return; + } + } + + const auto offset = address - object.value(); + const auto* mod_name = mod ? mod->name.c_str() : ""; + const auto& type_name = i.get_type_name(); + const auto member_name = i.get_member_name(static_cast(offset)); + + emu.log.print(is_main_access ? color::green : color::dark_gray, + "Object access: %s - 0x%" PRIx64 " (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset, + member_name.c_str(), rip, mod_name); + }); +} diff --git a/src/analyzer/reflect_extension.hpp b/src/analyzer/reflect_extension.hpp index aa18d46e..c1cd05cb 100644 --- a/src/analyzer/reflect_extension.hpp +++ b/src/analyzer/reflect_extension.hpp @@ -1,2304 +1,2304 @@ -#pragma once - -namespace -{ - template - struct REFLECT_FWD_LIKE2 - { - template - using type = std::remove_reference_t&&; - }; - template <> - struct REFLECT_FWD_LIKE2 - { - template - using type = std::remove_reference_t&; - }; -} // to speed up compilation times - -#define REFLECT_FWD(...) static_cast(__VA_ARGS__) -#define REFLECT_FWD_LIKE(T, ...) \ - static_cast>::template type>( \ - __VA_ARGS__) - -namespace reflect::inline v1_2_5 -{ - namespace detail - { - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, - _82] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86, _87] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86, _87, _88] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), - REFLECT_FWD_LIKE(T, _100)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126, _127] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127), - REFLECT_FWD_LIKE(T, _128)); - } - } -} - -#undef REFLECT_FWD_LIKE -#undef REFLECT_FWD +#pragma once + +namespace +{ + template + struct REFLECT_FWD_LIKE2 + { + template + using type = std::remove_reference_t&&; + }; + template <> + struct REFLECT_FWD_LIKE2 + { + template + using type = std::remove_reference_t&; + }; +} // to speed up compilation times + +#define REFLECT_FWD(...) static_cast(__VA_ARGS__) +#define REFLECT_FWD_LIKE(T, ...) \ + static_cast>::template type>( \ + __VA_ARGS__) + +namespace reflect::inline v1_2_5 +{ + namespace detail + { + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, + _82] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86, _87] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86, _87, _88] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), + REFLECT_FWD_LIKE(T, _100)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126, _127] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127), + REFLECT_FWD_LIKE(T, _128)); + } + } +} + +#undef REFLECT_FWD_LIKE +#undef REFLECT_FWD diff --git a/src/analyzer/reflect_type_info.hpp b/src/analyzer/reflect_type_info.hpp index 0a6059a9..af70c2ad 100644 --- a/src/analyzer/reflect_type_info.hpp +++ b/src/analyzer/reflect_type_info.hpp @@ -1,83 +1,83 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wtautological-compare" -#endif - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-private-field" -#endif - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4308) -#endif - -#include "reflect_extension.hpp" -#include - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif - -template -class reflect_type_info -{ - public: - reflect_type_info() - { - this->type_name_ = reflect::type_name(); - - reflect::for_each([this](auto I) { - const auto member_name = reflect::member_name(); - const auto member_offset = reflect::offset_of(); - - this->members_[member_offset] = member_name; - }); - } - - std::string get_member_name(const size_t offset) const - { - size_t last_offset{}; - std::string_view last_member{}; - - for (const auto& member : this->members_) - { - if (offset == member.first) - { - return member.second; - } - - if (offset < member.first) - { - const auto diff = offset - last_offset; - return std::string(last_member) + "+" + std::to_string(diff); - } - - last_offset = member.first; - last_member = member.second; - } - - return ""; - } - - const std::string& get_type_name() const - { - return this->type_name_; - } - - private: - std::string type_name_{}; - std::map members_{}; -}; +#pragma once + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wtautological-compare" +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-private-field" +#endif + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4308) +#endif + +#include "reflect_extension.hpp" +#include + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +template +class reflect_type_info +{ + public: + reflect_type_info() + { + this->type_name_ = reflect::type_name(); + + reflect::for_each([this](auto I) { + const auto member_name = reflect::member_name(); + const auto member_offset = reflect::offset_of(); + + this->members_[member_offset] = member_name; + }); + } + + std::string get_member_name(const size_t offset) const + { + size_t last_offset{}; + std::string_view last_member{}; + + for (const auto& member : this->members_) + { + if (offset == member.first) + { + return member.second; + } + + if (offset < member.first) + { + const auto diff = offset - last_offset; + return std::string(last_member) + "+" + std::to_string(diff); + } + + last_offset = member.first; + last_member = member.second; + } + + return ""; + } + + const std::string& get_type_name() const + { + return this->type_name_; + } + + private: + std::string type_name_{}; + std::map members_{}; +}; diff --git a/src/analyzer/resource.rc b/src/analyzer/resource.rc index 8da94cc0..dc8452a9 100644 --- a/src/analyzer/resource.rc +++ b/src/analyzer/resource.rc @@ -1,101 +1,101 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "windows.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "#include ""windows.h""\r\n" - "\0" -END - -2 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 - PRODUCTVERSION 1,0,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE VFT_DLL - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "momo5502" - VALUE "FileDescription", "Windows Emulator" - VALUE "FileVersion", "1.0.0.0" - VALUE "InternalName", "emulator" - VALUE "LegalCopyright", "All rights reserved." - VALUE "OriginalFilename", "emulator.exe" - VALUE "ProductName", "emulator" - VALUE "ProductVersion", "1.0.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -///////////////////////////////////////////////////////////////////////////// -// -// Binary Data -// - -GLFW_ICON ICON "resources/icon.ico" - - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "momo5502" + VALUE "FileDescription", "Windows Emulator" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "emulator" + VALUE "LegalCopyright", "All rights reserved." + VALUE "OriginalFilename", "emulator.exe" + VALUE "ProductName", "emulator" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Binary Data +// + +GLFW_ICON ICON "resources/icon.ico" + + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/analyzer/snapshot.cpp b/src/analyzer/snapshot.cpp index 8dc427d8..2f1b13a3 100644 --- a/src/analyzer/snapshot.cpp +++ b/src/analyzer/snapshot.cpp @@ -1,123 +1,123 @@ -#include "snapshot.hpp" - -#include -#include - -namespace snapshot -{ - namespace - { - struct snapshot_header - { - // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) - char magic[4] = {'S', 'N', 'A', 'P'}; - uint32_t version{1}; - }; - - static_assert(sizeof(snapshot_header) == 8); - - std::span validate_header(const std::span snapshot) - { - snapshot_header header{}; - constexpr snapshot_header default_header{}; - - if (snapshot.size() < sizeof(header)) - { - throw std::runtime_error("Snapshot is too small"); - } - - memcpy(&header, snapshot.data(), sizeof(header)); - - if (memcmp(default_header.magic, header.magic, sizeof(header.magic)) != 0) - { - throw std::runtime_error("Invalid snapshot"); - } - - if (default_header.version != header.version) - { - throw std::runtime_error("Unsupported snapshot version: " + std::to_string(header.version) + - "(needed: " + std::to_string(default_header.version) + ")"); - } - - return snapshot.subspan(sizeof(header)); - } - - std::vector get_compressed_emulator_state(const windows_emulator& win_emu) - { - utils::buffer_serializer serializer{}; - win_emu.serialize(serializer); - - return utils::compression::zlib::compress(serializer.get_buffer()); - } - - std::vector get_decompressed_emulator_state(const std::span snapshot) - { - const auto data = validate_header(snapshot); - return utils::compression::zlib::decompress(data); - } - - std::string get_main_executable_name(const windows_emulator& win_emu) - { - const auto* exe = win_emu.mod_manager.executable; - if (exe) - { - return std::filesystem::path(exe->name).stem().string(); - } - - return "process"; - } - } - - std::vector create_emulator_snapshot(const windows_emulator& win_emu) - { - const auto state = get_compressed_emulator_state(win_emu); - - snapshot_header header{}; - std::span header_span(reinterpret_cast(&header), sizeof(header)); - - std::vector snapshot{}; - snapshot.reserve(header_span.size() + state.size()); - snapshot.assign(header_span.begin(), header_span.end()); - snapshot.insert(snapshot.end(), state.begin(), state.end()); - - return snapshot; - } - - std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, const bool log) - { - std::filesystem::path snapshot_file = - get_main_executable_name(win_emu) + "-" + std::to_string(time(nullptr)) + ".snap"; - - if (log) - { - win_emu.log.log("Writing snapshot to %s...\n", snapshot_file.string().c_str()); - } - - const auto snapshot = create_emulator_snapshot(win_emu); - if (!utils::io::write_file(snapshot_file, snapshot)) - { - throw std::runtime_error("Failed to write snapshot!"); - } - - return snapshot_file; - } - - void load_emulator_snapshot(windows_emulator& win_emu, const std::span snapshot) - { - const auto data = get_decompressed_emulator_state(snapshot); - - utils::buffer_deserializer deserializer{data}; - win_emu.deserialize(deserializer); - } - - void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file) - { - std::vector data{}; - if (!utils::io::read_file(snapshot_file, &data)) - { - throw std::runtime_error("Failed to read snapshot file: " + snapshot_file.string()); - } - - load_emulator_snapshot(win_emu, data); - } -} +#include "snapshot.hpp" + +#include +#include + +namespace snapshot +{ + namespace + { + struct snapshot_header + { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + char magic[4] = {'S', 'N', 'A', 'P'}; + uint32_t version{1}; + }; + + static_assert(sizeof(snapshot_header) == 8); + + std::span validate_header(const std::span snapshot) + { + snapshot_header header{}; + constexpr snapshot_header default_header{}; + + if (snapshot.size() < sizeof(header)) + { + throw std::runtime_error("Snapshot is too small"); + } + + memcpy(&header, snapshot.data(), sizeof(header)); + + if (memcmp(default_header.magic, header.magic, sizeof(header.magic)) != 0) + { + throw std::runtime_error("Invalid snapshot"); + } + + if (default_header.version != header.version) + { + throw std::runtime_error("Unsupported snapshot version: " + std::to_string(header.version) + + "(needed: " + std::to_string(default_header.version) + ")"); + } + + return snapshot.subspan(sizeof(header)); + } + + std::vector get_compressed_emulator_state(const windows_emulator& win_emu) + { + utils::buffer_serializer serializer{}; + win_emu.serialize(serializer); + + return utils::compression::zlib::compress(serializer.get_buffer()); + } + + std::vector get_decompressed_emulator_state(const std::span snapshot) + { + const auto data = validate_header(snapshot); + return utils::compression::zlib::decompress(data); + } + + std::string get_main_executable_name(const windows_emulator& win_emu) + { + const auto* exe = win_emu.mod_manager.executable; + if (exe) + { + return std::filesystem::path(exe->name).stem().string(); + } + + return "process"; + } + } + + std::vector create_emulator_snapshot(const windows_emulator& win_emu) + { + const auto state = get_compressed_emulator_state(win_emu); + + snapshot_header header{}; + std::span header_span(reinterpret_cast(&header), sizeof(header)); + + std::vector snapshot{}; + snapshot.reserve(header_span.size() + state.size()); + snapshot.assign(header_span.begin(), header_span.end()); + snapshot.insert(snapshot.end(), state.begin(), state.end()); + + return snapshot; + } + + std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, const bool log) + { + std::filesystem::path snapshot_file = + get_main_executable_name(win_emu) + "-" + std::to_string(time(nullptr)) + ".snap"; + + if (log) + { + win_emu.log.log("Writing snapshot to %s...\n", snapshot_file.string().c_str()); + } + + const auto snapshot = create_emulator_snapshot(win_emu); + if (!utils::io::write_file(snapshot_file, snapshot)) + { + throw std::runtime_error("Failed to write snapshot!"); + } + + return snapshot_file; + } + + void load_emulator_snapshot(windows_emulator& win_emu, const std::span snapshot) + { + const auto data = get_decompressed_emulator_state(snapshot); + + utils::buffer_deserializer deserializer{data}; + win_emu.deserialize(deserializer); + } + + void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file) + { + std::vector data{}; + if (!utils::io::read_file(snapshot_file, &data)) + { + throw std::runtime_error("Failed to read snapshot file: " + snapshot_file.string()); + } + + load_emulator_snapshot(win_emu, data); + } +} diff --git a/src/analyzer/snapshot.hpp b/src/analyzer/snapshot.hpp index 8b5fbba4..60834a84 100644 --- a/src/analyzer/snapshot.hpp +++ b/src/analyzer/snapshot.hpp @@ -1,12 +1,12 @@ -#pragma once - -#include - -namespace snapshot -{ - std::vector create_emulator_snapshot(const windows_emulator& win_emu); - std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, bool log = true); - - void load_emulator_snapshot(windows_emulator& win_emu, std::span snapshot); - void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file); -} +#pragma once + +#include + +namespace snapshot +{ + std::vector create_emulator_snapshot(const windows_emulator& win_emu); + std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, bool log = true); + + void load_emulator_snapshot(windows_emulator& win_emu, std::span snapshot); + void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file); +} diff --git a/src/analyzer/std_include.hpp b/src/analyzer/std_include.hpp index 9719ff6b..17c6f538 100644 --- a/src/analyzer/std_include.hpp +++ b/src/analyzer/std_include.hpp @@ -1,31 +1,31 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -// NOLINTNEXTLINE(google-global-names-in-headers) -using namespace std::literals; +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +// NOLINTNEXTLINE(google-global-names-in-headers) +using namespace std::literals; diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp new file mode 100644 index 00000000..b97e3fca --- /dev/null +++ b/src/analyzer/tenet_tracer.cpp @@ -0,0 +1,256 @@ +#include "tenet_tracer.hpp" +#include +#include + +TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) + : m_win_emu(win_emu), m_log_file(log_filename) +{ + if (!m_log_file.is_open()) + { + throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename); + } + // Set up memory hooks. + auto& emu = m_win_emu.emu(); + m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_read(a, d, s); + }); + m_write_hook = emu.hook_memory_write(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_write(a, d, s); + }); +} + +TenetTracer::~TenetTracer() +{ + auto& emu = m_win_emu.emu(); + if (m_read_hook) emu.delete_hook(m_read_hook); + if (m_write_hook) emu.delete_hook(m_write_hook); + + // Filter and write the buffer when the program ends. + filter_and_write_buffer(); + + if (m_log_file.is_open()) + { + m_log_file.close(); + } +} + +// Helper function: Parses a log line and adds register changes to the map. +static void parse_and_accumulate_changes(const std::string& line, std::map& changes) +{ + size_t start = 0; + while (start < line.length()) + { + size_t end = line.find(',', start); + if (end == std::string::npos) + { + end = line.length(); + } + + std::string pair_str = line.substr(start, end - start); + size_t equals_pos = pair_str.find('='); + if (equals_pos != std::string::npos) + { + std::string key = pair_str.substr(0, equals_pos); + std::string value = pair_str.substr(equals_pos + 1); + changes[key] = value; // Updates existing or adds a new one. + } + + start = end + 1; + } +} + +void TenetTracer::filter_and_write_buffer() +{ + if (m_raw_log_buffer.empty()) + { + return; + } + + const auto* exe_module = m_win_emu.mod_manager.executable; + if (!exe_module) + { + // If there is no main module, write the raw data and exit. + for (const auto& line : m_raw_log_buffer) + { + m_log_file << line << '\n'; + } + return; + } + + // Always write the first line (initial registers). + if (!m_raw_log_buffer.empty()) + { + m_log_file << m_raw_log_buffer.front() << '\n'; + } + + bool currently_outside = false; + std::map accumulated_changes; + + for (size_t i = 1; i < m_raw_log_buffer.size(); ++i) + { + const auto& line = m_raw_log_buffer[i]; + + size_t rip_pos = line.find("rip=0x"); + if (rip_pos == std::string::npos) continue; + + char* end_ptr; + uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); + + bool is_line_inside = exe_module->is_within(address); + + if (is_line_inside) + { + // We are inside the main module. + if (currently_outside) + { + // JUST ENTERED FROM OUTSIDE (moment of return from API) + // 1. Create a synthetic log line from the accumulated changes. + if (!accumulated_changes.empty()) + { + std::stringstream summary_line; + bool first = true; + + // Separate rip from the map as it will be added at the end. + auto rip_it = accumulated_changes.find("rip"); + std::string last_rip; + if (rip_it != accumulated_changes.end()) + { + last_rip = rip_it->second; + accumulated_changes.erase(rip_it); + } + + for (const auto& pair : accumulated_changes) + { + if (!first) summary_line << ","; + summary_line << pair.first << "=" << pair.second; + first = false; + } + + // Add the last known rip at the end. + if (!last_rip.empty()) + { + if (!first) summary_line << ","; + summary_line << "rip=" << last_rip; + } + + m_log_file << summary_line.str() << '\n'; + } + accumulated_changes.clear(); + } + + // 2. Write the current line within the main module. + m_log_file << line << '\n'; + currently_outside = false; + } + else + { + // We are outside the main module. + // 1. Accumulate the changes. + parse_and_accumulate_changes(line, accumulated_changes); + currently_outside = true; + } + } + + m_raw_log_buffer.clear(); +} + + +std::string TenetTracer::format_hex(uint64_t value) +{ + std::stringstream ss; + ss << "0x" << std::hex << value; + return ss.str(); +} + +std::string TenetTracer::format_byte_array(const uint8_t* data, size_t size) +{ + std::stringstream ss; + for (size_t i = 0; i < size; ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]); + } + return ss.str(); +} + +void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t size) +{ + if (!m_mem_read_log.str().empty()) + { + m_mem_read_log << ";"; + } + m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); +} + +void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t size) +{ + if (!m_mem_write_log.str().empty()) + { + m_mem_write_log << ";"; + } + m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); +} + +void TenetTracer::process_instruction(uint64_t address) +{ + auto& emu = m_win_emu.emu(); + std::stringstream trace_line; + + std::array current_regs; + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + current_regs[i] = emu.reg(GPRs_TO_TRACE[i].first); + } + + bool first_entry = true; + auto append_separator = [&]() { + if (!first_entry) { + trace_line << ","; + } + first_entry = false; + }; + + if (m_is_first_instruction) + { + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + append_separator(); + trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); + } + m_is_first_instruction = false; + } + else + { + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + if (m_previous_regs[i] != current_regs[i]) + { + append_separator(); + trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); + } + } + } + + append_separator(); + trace_line << "rip=" << format_hex(address); + + std::string mem_reads = m_mem_read_log.str(); + if (!mem_reads.empty()) { + append_separator(); + trace_line << "mr=" << mem_reads; + } + std::string mem_writes = m_mem_write_log.str(); + if (!mem_writes.empty()) { + append_separator(); + trace_line << "mw=" << mem_writes; + } + + // Add the data to the buffer instead of writing directly to the file. + m_raw_log_buffer.push_back(trace_line.str()); + + m_previous_regs = current_regs; + + m_mem_read_log.str(""); + m_mem_read_log.clear(); + m_mem_write_log.str(""); + m_mem_write_log.clear(); +} \ No newline at end of file diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp new file mode 100644 index 00000000..4012c127 --- /dev/null +++ b/src/analyzer/tenet_tracer.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +// List of registers to trace for the x64 architecture. +constexpr std::array, 16> GPRs_TO_TRACE = {{ + {x86_register::rax, "rax"}, {x86_register::rbx, "rbx"}, {x86_register::rcx, "rcx"}, + {x86_register::rdx, "rdx"}, {x86_register::rsi, "rsi"}, {x86_register::rdi, "rdi"}, + {x86_register::rbp, "rbp"}, {x86_register::rsp, "rsp"}, {x86_register::r8, "r8"}, + {x86_register::r9, "r9"}, {x86_register::r10, "r10"}, {x86_register::r11, "r11"}, + {x86_register::r12, "r12"}, {x86_register::r13, "r13"}, {x86_register::r14, "r14"}, + {x86_register::r15, "r15"} +}}; + +class TenetTracer +{ +public: + TenetTracer(windows_emulator& win_emu, const std::string& log_filename); + ~TenetTracer(); + + // A new public method to call TenetTracer for each instruction. + void process_instruction(uint64_t address); + + // Disable copy and move operations. + TenetTracer(const TenetTracer&) = delete; + TenetTracer& operator=(const TenetTracer&) = delete; + +private: + void filter_and_write_buffer(); + void log_memory_read(uint64_t address, const void* data, size_t size); + void log_memory_write(uint64_t address, const void* data, size_t size); + + std::string format_hex(uint64_t value); + std::string format_byte_array(const uint8_t* data, size_t size); + + windows_emulator& m_win_emu; + std::ofstream m_log_file; + + // In-memory buffering for performance. + std::vector m_raw_log_buffer; + + // Use an array instead of a map to store the register state of the previous instruction. + std::array m_previous_regs{}; + bool m_is_first_instruction = true; + + // To temporarily store memory operations. + std::stringstream m_mem_read_log; + std::stringstream m_mem_write_log; + + // To manage memory hooks. + emulator_hook* m_read_hook = nullptr; + emulator_hook* m_write_hook = nullptr; +}; \ No newline at end of file diff --git a/src/analyzer/test.py b/src/analyzer/test.py index fd907dc4..6912409c 100644 --- a/src/analyzer/test.py +++ b/src/analyzer/test.py @@ -1,26 +1,26 @@ -import os -import subprocess - -emulator_root = os.getenv('EMULATOR_ROOT') -analysis_sample = os.getenv('ANALYSIS_SAMPLE') -virtual_sample = 'C:/analysis-sample.exe' - -application = 'analyzer' - -def make_app(app): - if os.name == 'nt': - return app + ".exe" - - return app - -command = [ - os.path.join(os.getcwd(), make_app(application)), - '-c', - '-e', emulator_root, - '-p', virtual_sample, analysis_sample, - virtual_sample -] - -result = subprocess.run(command, cwd=os.getcwd()) - -exit(result.returncode) +import os +import subprocess + +emulator_root = os.getenv('EMULATOR_ROOT') +analysis_sample = os.getenv('ANALYSIS_SAMPLE') +virtual_sample = 'C:/analysis-sample.exe' + +application = 'analyzer' + +def make_app(app): + if os.name == 'nt': + return app + ".exe" + + return app + +command = [ + os.path.join(os.getcwd(), make_app(application)), + '-c', + '-e', emulator_root, + '-p', virtual_sample, analysis_sample, + virtual_sample +] + +result = subprocess.run(command, cwd=os.getcwd()) + +exit(result.returncode) From 8cea9fc75a753f878423ab903a0d036830b7576a Mon Sep 17 00:00:00 2001 From: 3fault Date: Thu, 17 Jul 2025 10:55:45 -0400 Subject: [PATCH 015/184] Ensure memory is freed after guard page test --- src/samples/test-sample/test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/samples/test-sample/test.cpp b/src/samples/test-sample/test.cpp index feece83f..fa2d844a 100644 --- a/src/samples/test-sample/test.cpp +++ b/src/samples/test-sample/test.cpp @@ -734,6 +734,13 @@ namespace success = false; } + // Free the allocated memory + if (!VirtualFree(addr, 0, MEM_RELEASE)) + { + puts("Failed to free allocated region"); + success = false; + } + return success; } From 9f637105fbeb7e915337396816e6fddf6060a27f Mon Sep 17 00:00:00 2001 From: 3fault Date: Thu, 17 Jul 2025 11:06:26 -0400 Subject: [PATCH 016/184] Unset extended flags in nt_memory_permission assignment operator --- src/windows-emulator/memory_permission_ext.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/windows-emulator/memory_permission_ext.hpp b/src/windows-emulator/memory_permission_ext.hpp index 63427929..1ea95426 100644 --- a/src/windows-emulator/memory_permission_ext.hpp +++ b/src/windows-emulator/memory_permission_ext.hpp @@ -90,6 +90,7 @@ struct nt_memory_permission nt_memory_permission& operator=(memory_permission const& y) { this->common = y; + this->extended = memory_permission_ext::none; return *this; } From f1d54f7417f48d2c3dc69739e25faff7eb87617f Mon Sep 17 00:00:00 2001 From: 3fault Date: Thu, 17 Jul 2025 11:19:56 -0400 Subject: [PATCH 017/184] Parameterize basic_memory_region to support extended memory flags --- src/emulator/memory_region.hpp | 5 +++-- src/windows-emulator/memory_manager.hpp | 10 ++-------- src/windows-emulator/module/mapped_module.hpp | 2 +- src/windows-emulator/module/module_manager.cpp | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index cdf25ce9..71482bb5 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -2,14 +2,15 @@ #include "memory_permission.hpp" #include +template struct basic_memory_region { uint64_t start{}; size_t length{}; // uint64_t? - memory_permission permissions{}; + PermissionType permissions{}; }; -struct memory_region : basic_memory_region +struct memory_region : basic_memory_region<> { bool committed{}; }; diff --git a/src/windows-emulator/memory_manager.hpp b/src/windows-emulator/memory_manager.hpp index 8f533e3c..15bf6dd4 100644 --- a/src/windows-emulator/memory_manager.hpp +++ b/src/windows-emulator/memory_manager.hpp @@ -4,6 +4,7 @@ #include #include "memory_permission_ext.hpp" +#include "memory_region.hpp" #include "serialization.hpp" #include @@ -14,14 +15,7 @@ constexpr auto MAX_ALLOCATION_ADDRESS = 0x00007ffffffeffffULL; // This maps to the `basic_memory_region` struct defined in // emulator\memory_region.hpp -struct nt_basic_memory_region -{ - uint64_t start{}; - size_t length{}; - nt_memory_permission permissions{}; -}; - -struct region_info : nt_basic_memory_region +struct region_info : basic_memory_region { uint64_t allocation_base{}; size_t allocation_length{}; diff --git a/src/windows-emulator/module/mapped_module.hpp b/src/windows-emulator/module/mapped_module.hpp index dfe2b268..2019243f 100644 --- a/src/windows-emulator/module/mapped_module.hpp +++ b/src/windows-emulator/module/mapped_module.hpp @@ -15,7 +15,7 @@ using address_name_mapping = std::map; struct mapped_section { std::string name{}; - basic_memory_region region{}; + basic_memory_region<> region{}; }; struct mapped_module diff --git a/src/windows-emulator/module/module_manager.cpp b/src/windows-emulator/module/module_manager.cpp index c8549218..bb57fa77 100644 --- a/src/windows-emulator/module/module_manager.cpp +++ b/src/windows-emulator/module/module_manager.cpp @@ -23,14 +23,14 @@ namespace utils buffer.read(sym.address); } - static void serialize(buffer_serializer& buffer, const basic_memory_region& region) + static void serialize(buffer_serializer& buffer, const basic_memory_region<>& region) { buffer.write(region.start); buffer.write(region.length); buffer.write(region.permissions); } - static void deserialize(buffer_deserializer& buffer, basic_memory_region& region) + static void deserialize(buffer_deserializer& buffer, basic_memory_region<>& region) { buffer.read(region.start); region.length = static_cast(buffer.read()); From 188b95af5deb30a46cc7934f03d9f7338a8f7c16 Mon Sep 17 00:00:00 2001 From: 3fault Date: Thu, 17 Jul 2025 11:27:23 -0400 Subject: [PATCH 018/184] Fix formatting --- src/emulator/memory_region.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index 71482bb5..6cec89c9 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -2,7 +2,7 @@ #include "memory_permission.hpp" #include -template +template struct basic_memory_region { uint64_t start{}; From 8caf724c95b35be6fc233b18f2004600349197f8 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:30:00 +0200 Subject: [PATCH 019/184] Fix formatting --- src/analyzer/main.cpp | 57 +++++++++++++++++------------------ src/analyzer/tenet_tracer.cpp | 44 +++++++++++++++------------ src/analyzer/tenet_tracer.hpp | 34 ++++++++++++++------- 3 files changed, 76 insertions(+), 59 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 0d51501e..33036026 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -289,38 +289,38 @@ namespace return create_application_emulator(options, args); } -bool run(const analysis_options& options, const std::span args) -{ - analysis_context context{ - .settings = &options, - }; - - const auto win_emu = setup_emulator(options, args); - win_emu->log.disable_output(options.concise_logging || options.silent); - context.win_emu = win_emu.get(); - - win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); - - // Enable TenetTracer and assign it to the context. - std::unique_ptr tenet_tracer; - if (options.tenet_trace) + bool run(const analysis_options& options, const std::span args) { - win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); - tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); + analysis_context context{ + .settings = &options, + }; - // Set up the hook to call the tracer for each instruction. - win_emu->emu().hook_memory_execution([&](uint64_t address) { - if (tenet_tracer) - { - tenet_tracer->process_instruction(address); - } - }); - } + const auto win_emu = setup_emulator(options, args); + win_emu->log.disable_output(options.concise_logging || options.silent); + context.win_emu = win_emu.get(); - register_analysis_callbacks(context); - watch_system_objects(*win_emu, options.modules, options.verbose_logging); + win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); - const auto& exe = *win_emu->mod_manager.executable; + // Enable TenetTracer and assign it to the context. + std::unique_ptr tenet_tracer; + if (options.tenet_trace) + { + win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); + tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); + + // Set up the hook to call the tracer for each instruction. + win_emu->emu().hook_memory_execution([&](uint64_t address) { + if (tenet_tracer) + { + tenet_tracer->process_instruction(address); + } + }); + } + + register_analysis_callbacks(context); + watch_system_objects(*win_emu, options.modules, options.verbose_logging); + + const auto& exe = *win_emu->mod_manager.executable; const auto concise_logging = !options.verbose_logging; @@ -434,7 +434,6 @@ bool run(const analysis_options& options, const std::span& args) { diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index b97e3fca..2c49f3f0 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -3,7 +3,8 @@ #include TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) - : m_win_emu(win_emu), m_log_file(log_filename) + : m_win_emu(win_emu), + m_log_file(log_filename) { if (!m_log_file.is_open()) { @@ -11,19 +12,19 @@ TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filen } // Set up memory hooks. auto& emu = m_win_emu.emu(); - m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { - this->log_memory_read(a, d, s); - }); - m_write_hook = emu.hook_memory_write(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { - this->log_memory_write(a, d, s); - }); + m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, + [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); }); + m_write_hook = emu.hook_memory_write( + 0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); }); } TenetTracer::~TenetTracer() { auto& emu = m_win_emu.emu(); - if (m_read_hook) emu.delete_hook(m_read_hook); - if (m_write_hook) emu.delete_hook(m_write_hook); + if (m_read_hook) + emu.delete_hook(m_read_hook); + if (m_write_hook) + emu.delete_hook(m_write_hook); // Filter and write the buffer when the program ends. filter_and_write_buffer(); @@ -89,9 +90,10 @@ void TenetTracer::filter_and_write_buffer() for (size_t i = 1; i < m_raw_log_buffer.size(); ++i) { const auto& line = m_raw_log_buffer[i]; - + size_t rip_pos = line.find("rip=0x"); - if (rip_pos == std::string::npos) continue; + if (rip_pos == std::string::npos) + continue; char* end_ptr; uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); @@ -121,15 +123,17 @@ void TenetTracer::filter_and_write_buffer() for (const auto& pair : accumulated_changes) { - if (!first) summary_line << ","; + if (!first) + summary_line << ","; summary_line << pair.first << "=" << pair.second; first = false; } - + // Add the last known rip at the end. if (!last_rip.empty()) { - if (!first) summary_line << ","; + if (!first) + summary_line << ","; summary_line << "rip=" << last_rip; } @@ -154,7 +158,6 @@ void TenetTracer::filter_and_write_buffer() m_raw_log_buffer.clear(); } - std::string TenetTracer::format_hex(uint64_t value) { std::stringstream ss; @@ -203,7 +206,8 @@ void TenetTracer::process_instruction(uint64_t address) bool first_entry = true; auto append_separator = [&]() { - if (!first_entry) { + if (!first_entry) + { trace_line << ","; } first_entry = false; @@ -234,16 +238,18 @@ void TenetTracer::process_instruction(uint64_t address) trace_line << "rip=" << format_hex(address); std::string mem_reads = m_mem_read_log.str(); - if (!mem_reads.empty()) { + if (!mem_reads.empty()) + { append_separator(); trace_line << "mr=" << mem_reads; } std::string mem_writes = m_mem_write_log.str(); - if (!mem_writes.empty()) { + if (!mem_writes.empty()) + { append_separator(); trace_line << "mw=" << mem_writes; } - + // Add the data to the buffer instead of writing directly to the file. m_raw_log_buffer.push_back(trace_line.str()); diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index 4012c127..5480c835 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -10,18 +10,30 @@ #include // List of registers to trace for the x64 architecture. -constexpr std::array, 16> GPRs_TO_TRACE = {{ - {x86_register::rax, "rax"}, {x86_register::rbx, "rbx"}, {x86_register::rcx, "rcx"}, - {x86_register::rdx, "rdx"}, {x86_register::rsi, "rsi"}, {x86_register::rdi, "rdi"}, - {x86_register::rbp, "rbp"}, {x86_register::rsp, "rsp"}, {x86_register::r8, "r8"}, - {x86_register::r9, "r9"}, {x86_register::r10, "r10"}, {x86_register::r11, "r11"}, - {x86_register::r12, "r12"}, {x86_register::r13, "r13"}, {x86_register::r14, "r14"}, - {x86_register::r15, "r15"} -}}; +constexpr std::array, 16> GPRs_TO_TRACE = { + { + {x86_register::rax, "rax"}, + {x86_register::rbx, "rbx"}, + {x86_register::rcx, "rcx"}, + {x86_register::rdx, "rdx"}, + {x86_register::rsi, "rsi"}, + {x86_register::rdi, "rdi"}, + {x86_register::rbp, "rbp"}, + {x86_register::rsp, "rsp"}, + {x86_register::r8, "r8"}, + {x86_register::r9, "r9"}, + {x86_register::r10, "r10"}, + {x86_register::r11, "r11"}, + {x86_register::r12, "r12"}, + {x86_register::r13, "r13"}, + {x86_register::r14, "r14"}, + {x86_register::r15, "r15"}, + }, +}; class TenetTracer { -public: + public: TenetTracer(windows_emulator& win_emu, const std::string& log_filename); ~TenetTracer(); @@ -32,7 +44,7 @@ public: TenetTracer(const TenetTracer&) = delete; TenetTracer& operator=(const TenetTracer&) = delete; -private: + private: void filter_and_write_buffer(); void log_memory_read(uint64_t address, const void* data, size_t size); void log_memory_write(uint64_t address, const void* data, size_t size); @@ -45,7 +57,7 @@ private: // In-memory buffering for performance. std::vector m_raw_log_buffer; - + // Use an array instead of a map to store the register state of the previous instruction. std::array m_previous_regs{}; bool m_is_first_instruction = true; From b5e40c3627001915e1fb0236987f95aec608efec Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:35:16 +0200 Subject: [PATCH 020/184] Revert line endings --- src/analyzer/CMakeLists.txt | 78 +- src/analyzer/main.cpp | 1208 ++++---- src/analyzer/object_watching.hpp | 86 +- src/analyzer/reflect_extension.hpp | 4608 ++++++++++++++-------------- src/analyzer/reflect_type_info.hpp | 166 +- src/analyzer/resource.rc | 202 +- src/analyzer/snapshot.cpp | 246 +- src/analyzer/snapshot.hpp | 24 +- src/analyzer/std_include.hpp | 62 +- src/analyzer/tenet_tracer.cpp | 522 ++-- src/analyzer/tenet_tracer.hpp | 142 +- src/analyzer/test.py | 52 +- 12 files changed, 3698 insertions(+), 3698 deletions(-) diff --git a/src/analyzer/CMakeLists.txt b/src/analyzer/CMakeLists.txt index 8b44da9f..a0ed8607 100644 --- a/src/analyzer/CMakeLists.txt +++ b/src/analyzer/CMakeLists.txt @@ -1,39 +1,39 @@ -file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS - *.cpp - *.hpp - *.rc -) - -list(SORT SRC_FILES) - -add_executable(analyzer ${SRC_FILES}) - -momo_assign_source_group(${SRC_FILES}) - -if(NOT MOMO_ENABLE_CLANG_TIDY) - target_precompile_headers(analyzer PRIVATE std_include.hpp) -endif() - -target_link_libraries(analyzer PRIVATE - reflect - debugger - windows-emulator - windows-gdb-stub - backend-selection -) - -set_property(GLOBAL PROPERTY VS_STARTUP_PROJECT analyzer) - -momo_strip_target(analyzer) - -set(ENV_PREFIX "$") -set(ENV_SUFFIX "") - -if(WIN) -set(ENV_PREFIX "%") -set(ENV_SUFFIX "%") -endif() - -add_test(NAME analyzer-test - COMMAND "${PYTHON3_EXE}" "${CMAKE_CURRENT_LIST_DIR}/test.py" - WORKING_DIRECTORY "$") +file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS + *.cpp + *.hpp + *.rc +) + +list(SORT SRC_FILES) + +add_executable(analyzer ${SRC_FILES}) + +momo_assign_source_group(${SRC_FILES}) + +if(NOT MOMO_ENABLE_CLANG_TIDY) + target_precompile_headers(analyzer PRIVATE std_include.hpp) +endif() + +target_link_libraries(analyzer PRIVATE + reflect + debugger + windows-emulator + windows-gdb-stub + backend-selection +) + +set_property(GLOBAL PROPERTY VS_STARTUP_PROJECT analyzer) + +momo_strip_target(analyzer) + +set(ENV_PREFIX "$") +set(ENV_SUFFIX "") + +if(WIN) +set(ENV_PREFIX "%") +set(ENV_SUFFIX "%") +endif() + +add_test(NAME analyzer-test + COMMAND "${PYTHON3_EXE}" "${CMAKE_CURRENT_LIST_DIR}/test.py" + WORKING_DIRECTORY "$") diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 33036026..fc89b074 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -1,604 +1,604 @@ -#include "std_include.hpp" - -#include -#include -#include -#include - -#include "object_watching.hpp" -#include "snapshot.hpp" -#include "analysis.hpp" -#include "tenet_tracer.hpp" - -#include -#include - -#include - -#include -#include - -#ifdef OS_EMSCRIPTEN -#include -#endif - -namespace -{ - struct analysis_options : analysis_settings - { - mutable bool use_gdb{false}; - bool log_executable_access{false}; - bool tenet_trace{false}; - std::filesystem::path dump{}; - std::filesystem::path minidump_path{}; - std::string registry_path{"./registry"}; - std::string emulation_root{}; - std::unordered_map path_mappings{}; - }; - - void split_and_insert(std::set>& container, const std::string_view str, - const char splitter = ',') - { - size_t current_start = 0; - for (size_t i = 0; i < str.size(); ++i) - { - const auto value = str[i]; - if (value != splitter) - { - continue; - } - - if (current_start < i) - { - container.emplace(str.substr(current_start, i - current_start)); - } - - current_start = i + 1; - } - - if (current_start < str.size()) - { - container.emplace(str.substr(current_start)); - } - } - - void watch_system_objects(windows_emulator& win_emu, const std::set>& modules, - const bool verbose) - { - win_emu.setup_process_if_necessary(); - - (void)win_emu; - (void)modules; - (void)verbose; - -#if !defined(__GNUC__) || defined(__clang__) - watch_object(win_emu, modules, *win_emu.current_thread().teb, verbose); - watch_object(win_emu, modules, win_emu.process.peb, verbose); - watch_object(win_emu, modules, emulator_object{win_emu.emu(), kusd_mmio::address()}, - verbose); - - auto* params_hook = watch_object(win_emu, modules, win_emu.process.process_params, verbose); - - win_emu.emu().hook_memory_write( - win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters), 0x8, - [&win_emu, verbose, params_hook, modules](const uint64_t address, const void*, size_t) mutable { - const auto target_address = win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters); - - if (address == target_address) - { - const emulator_object obj{ - win_emu.emu(), - win_emu.emu().read_memory(address), - }; - - win_emu.emu().delete_hook(params_hook); - params_hook = watch_object(win_emu, modules, obj, verbose); - } - }); -#endif - } - - bool read_yes_no_answer() - { - while (true) - { - const auto chr = static_cast(getchar()); - if (chr == 'y') - { - return true; - } - - if (chr == 'n') - { - return false; - } - } - } - - void do_post_emulation_work(const analysis_context& c) - { - if (c.settings->buffer_stdout) - { - c.win_emu->log.info("%.*s%s", static_cast(c.output.size()), c.output.data(), - c.output.ends_with("\n") ? "" : "\n"); - } - } - - bool run_emulation(const analysis_context& c, const analysis_options& options) - { - auto& win_emu = *c.win_emu; - - std::atomic_uint32_t signals_received{0}; - utils::interupt_handler _{[&] { - const auto value = signals_received++; - if (value == 1) - { - win_emu.log.log("Exit already requested. Press CTRL+C again to force kill!"); - } - else if (value >= 2) - { - _Exit(1); - } - - win_emu.stop(); - }}; - - std::optional exit_status{}; -#ifdef OS_EMSCRIPTEN - const auto _1 = utils::finally([&] { - debugger::handle_exit(win_emu, exit_status); // - }); -#endif - - try - { - if (options.use_gdb) - { - const auto* address = "127.0.0.1:28960"; - win_emu.log.print(color::pink, "Waiting for GDB connection on %s...\n", address); - - const auto should_stop = [&] { return signals_received > 0; }; - - win_x64_gdb_stub_handler handler{win_emu, should_stop}; - gdb_stub::run_gdb_stub(network::address{"0.0.0.0:28960", AF_INET}, handler); - } - else if (!options.minidump_path.empty()) - { - // For minidumps, don't start execution automatically; just report ready state - win_emu.log.print(color::green, "Minidump loaded successfully. Process state ready for analysis.\n"); - return true; // Return success without starting emulation - } - else - { - win_emu.start(); - } - - if (signals_received > 0) - { - options.use_gdb = false; - - win_emu.log.log("Do you want to create a snapshot? (y/n)\n"); - const auto write_snapshot = read_yes_no_answer(); - - if (write_snapshot) - { - snapshot::write_emulator_snapshot(win_emu); - } - } - } - catch (const std::exception& e) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation failed at: 0x%" PRIx64 " - %s\n", win_emu.emu().read_instruction_pointer(), - e.what()); - throw; - } - catch (...) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation failed at: 0x%" PRIx64 "\n", win_emu.emu().read_instruction_pointer()); - throw; - } - - exit_status = win_emu.process.exit_status; - if (!exit_status.has_value()) - { - do_post_emulation_work(c); - win_emu.log.error("Emulation terminated without status!\n"); - return false; - } - - const auto success = *exit_status == STATUS_SUCCESS; - - if (!options.silent) - { - do_post_emulation_work(c); - win_emu.log.disable_output(false); - win_emu.log.print(success ? color::green : color::red, "Emulation terminated with status: %X\n", - *exit_status); - } - - return success; - } - - std::vector parse_arguments(const std::span args) - { - std::vector wide_args{}; - wide_args.reserve(args.size() - 1); - - for (size_t i = 1; i < args.size(); ++i) - { - const auto& arg = args[i]; - wide_args.emplace_back(arg.begin(), arg.end()); - } - - return wide_args; - } - - emulator_settings create_emulator_settings(const analysis_options& options) - { - return { - .emulation_root = options.emulation_root, - .registry_directory = options.registry_path, - .path_mappings = options.path_mappings, - }; - } - - std::unique_ptr create_empty_emulator(const analysis_options& options) - { - const auto settings = create_emulator_settings(options); - return std::make_unique(create_x86_64_emulator(), settings); - } - - std::unique_ptr create_application_emulator(const analysis_options& options, - const std::span args) - { - if (args.empty()) - { - throw std::runtime_error("No args provided"); - } - - application_settings app_settings{ - .application = args[0], - .arguments = parse_arguments(args), - }; - - const auto settings = create_emulator_settings(options); - return std::make_unique(create_x86_64_emulator(), std::move(app_settings), settings); - } - - std::unique_ptr setup_emulator(const analysis_options& options, - const std::span args) - { - if (!options.dump.empty()) - { - // load snapshot - auto win_emu = create_empty_emulator(options); - snapshot::load_emulator_snapshot(*win_emu, options.dump); - return win_emu; - } - if (!options.minidump_path.empty()) - { - // load minidump - auto win_emu = create_empty_emulator(options); - minidump_loader::load_minidump_into_emulator(*win_emu, options.minidump_path); - return win_emu; - } - - // default: load application - return create_application_emulator(options, args); - } - - bool run(const analysis_options& options, const std::span args) - { - analysis_context context{ - .settings = &options, - }; - - const auto win_emu = setup_emulator(options, args); - win_emu->log.disable_output(options.concise_logging || options.silent); - context.win_emu = win_emu.get(); - - win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); - - // Enable TenetTracer and assign it to the context. - std::unique_ptr tenet_tracer; - if (options.tenet_trace) - { - win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); - tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); - - // Set up the hook to call the tracer for each instruction. - win_emu->emu().hook_memory_execution([&](uint64_t address) { - if (tenet_tracer) - { - tenet_tracer->process_instruction(address); - } - }); - } - - register_analysis_callbacks(context); - watch_system_objects(*win_emu, options.modules, options.verbose_logging); - - const auto& exe = *win_emu->mod_manager.executable; - - const auto concise_logging = !options.verbose_logging; - - win_emu->emu().hook_instruction(x86_hookable_instructions::cpuid, [&] { - const auto rip = win_emu->emu().read_instruction_pointer(); - auto* mod = get_module_if_interesting(win_emu->mod_manager, options.modules, rip); - - if (mod) - { - const auto leaf = win_emu->emu().reg(x86_register::eax); - win_emu->log.print(color::blue, "Executing CPUID instruction with leaf 0x%X at 0x%" PRIx64 " (%s)\n", - leaf, rip, mod->name.c_str()); - } - - return instruction_hook_continuation::run_instruction; - }); - - if (options.log_executable_access) - { - for (const auto& section : exe.sections) - { - if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) - { - continue; - } - - auto read_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { - const auto rip = win_emu->emu().read_instruction_pointer(); - if (!win_emu->mod_manager.executable->is_within(rip)) - { - return; - } - - if (concise_logging) - { - static uint64_t count{0}; - ++count; - if (count > 100 && count % 100000 != 0) - { - return; - } - } - - win_emu->log.print(color::green, - "Reading from executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", - section.name.c_str(), address, rip); - }; - - const auto write_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { - const auto rip = win_emu->emu().read_instruction_pointer(); - if (!win_emu->mod_manager.executable->is_within(rip)) - { - return; - } - - if (concise_logging) - { - static uint64_t count{0}; - ++count; - if (count > 100 && count % 100000 != 0) - { - return; - } - } - - win_emu->log.print(color::blue, - "Writing to executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", - section.name.c_str(), address, rip); - }; - - win_emu->emu().hook_memory_read(section.region.start, section.region.length, std::move(read_handler)); - win_emu->emu().hook_memory_write(section.region.start, section.region.length, std::move(write_handler)); - } - } - - return run_emulation(context, options); - } - - std::vector bundle_arguments(const int argc, char** argv) - { - std::vector args{}; - - for (int i = 1; i < argc; ++i) - { - args.emplace_back(argv[i]); - } - - return args; - } - - void print_help() - { - printf("Usage: analyzer [options] [application] [args...]\n\n"); - printf("Options:\n"); - printf(" -h, --help Show this help message\n"); - printf(" -d, --debug Enable GDB debugging mode\n"); - printf(" -s, --silent Silent mode\n"); - printf(" -v, --verbose Verbose logging\n"); - printf(" -b, --buffer Buffer stdout\n"); - printf(" -c, --concise Concise logging\n"); - printf(" -x, --exec Log r/w access to executable memory\n"); - printf(" -m, --module Specify module to track\n"); - printf(" -e, --emulation Set emulation root path\n"); - printf(" -a, --snapshot Load snapshot dump from path\n"); - printf(" --minidump Load minidump from path\n"); - printf(" -t, --tenet-trace Enable Tenet tracer\n"); - printf(" -i, --ignore Comma-separated list of functions to ignore\n"); - printf(" -p, --path Map Windows path to host path\n"); - printf(" -r, --registry Set registry path (default: ./registry)\n\n"); - printf("Examples:\n"); - printf(" analyzer -v -e path/to/root myapp.exe\n"); - printf(" analyzer -e path/to/root -p c:/analysis-sample.exe /path/to/sample.exe c:/analysis-sample.exe\n"); - } - - analysis_options parse_options(std::vector& args) - { - analysis_options options{}; - - while (!args.empty()) - { - auto arg_it = args.begin(); - const auto& arg = *arg_it; - - if (arg == "-h" || arg == "--help") - { - print_help(); - std::exit(0); - } - else if (arg == "-d" || arg == "--debug") - { - options.use_gdb = true; - } - else if (arg == "-s" || arg == "--silent") - { - options.silent = true; - } - else if (arg == "-v" || arg == "--verbose") - { - options.verbose_logging = true; - } - else if (arg == "-b" || arg == "--buffer") - { - options.buffer_stdout = true; - } - else if (arg == "-x" || arg == "--exec") - { - options.log_executable_access = true; - } - else if (arg == "-c" || arg == "--concise") - { - options.concise_logging = true; - } - else if (arg == "-t" || arg == "--tenet-trace") - { - options.tenet_trace = true; - } - else if (arg == "-m" || arg == "--module") - { - if (args.size() < 2) - { - throw std::runtime_error("No module provided after -m/--module"); - } - - arg_it = args.erase(arg_it); - options.modules.insert(std::string(args[0])); - } - else if (arg == "-e" || arg == "--emulation") - { - if (args.size() < 2) - { - throw std::runtime_error("No emulation root path provided after -e/--emulation"); - } - arg_it = args.erase(arg_it); - options.emulation_root = args[0]; - } - else if (arg == "-a" || arg == "--snapshot") - { - if (args.size() < 2) - { - throw std::runtime_error("No dump path provided after -a/--snapshot"); - } - arg_it = args.erase(arg_it); - options.dump = args[0]; - } - else if (arg == "--minidump") - { - if (args.size() < 2) - { - throw std::runtime_error("No minidump path provided after --minidump"); - } - arg_it = args.erase(arg_it); - options.minidump_path = args[0]; - } - else if (arg == "-i" || arg == "--ignore") - { - if (args.size() < 2) - { - throw std::runtime_error("No ignored function(s) provided after -i/--ignore"); - } - arg_it = args.erase(arg_it); - split_and_insert(options.ignored_functions, args[0]); - } - else if (arg == "-p" || arg == "--path") - { - if (args.size() < 3) - { - throw std::runtime_error("No path mapping provided after -p/--path"); - } - arg_it = args.erase(arg_it); - windows_path source = args[0]; - arg_it = args.erase(arg_it); - std::filesystem::path target = std::filesystem::absolute(args[0]); - - options.path_mappings[std::move(source)] = std::move(target); - } - else if (arg == "-r" || arg == "--registry") - { - if (args.size() < 2) - { - throw std::runtime_error("No registry path provided after -r/--registry"); - } - arg_it = args.erase(arg_it); - options.registry_path = args[0]; - } - else - { - break; - } - - args.erase(arg_it); - } - - return options; - } - - int run_main(const int argc, char** argv) - { - try - { - auto args = bundle_arguments(argc, argv); - if (args.empty()) - { - print_help(); - return 1; - } - - const auto options = parse_options(args); - - bool result{}; - - do - { - result = run(options, args); - } while (options.use_gdb); - - return result ? 0 : 1; - } - catch (std::exception& e) - { - puts(e.what()); - -#if defined(_WIN32) && 0 - MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); -#endif - } - - return 1; - } -} - -int main(const int argc, char** argv) -{ - return run_main(argc, argv); -} - -#ifdef _WIN32 -int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) -{ - return run_main(__argc, __argv); -} -#endif +#include "std_include.hpp" + +#include +#include +#include +#include + +#include "object_watching.hpp" +#include "snapshot.hpp" +#include "analysis.hpp" +#include "tenet_tracer.hpp" + +#include +#include + +#include + +#include +#include + +#ifdef OS_EMSCRIPTEN +#include +#endif + +namespace +{ + struct analysis_options : analysis_settings + { + mutable bool use_gdb{false}; + bool log_executable_access{false}; + bool tenet_trace{false}; + std::filesystem::path dump{}; + std::filesystem::path minidump_path{}; + std::string registry_path{"./registry"}; + std::string emulation_root{}; + std::unordered_map path_mappings{}; + }; + + void split_and_insert(std::set>& container, const std::string_view str, + const char splitter = ',') + { + size_t current_start = 0; + for (size_t i = 0; i < str.size(); ++i) + { + const auto value = str[i]; + if (value != splitter) + { + continue; + } + + if (current_start < i) + { + container.emplace(str.substr(current_start, i - current_start)); + } + + current_start = i + 1; + } + + if (current_start < str.size()) + { + container.emplace(str.substr(current_start)); + } + } + + void watch_system_objects(windows_emulator& win_emu, const std::set>& modules, + const bool verbose) + { + win_emu.setup_process_if_necessary(); + + (void)win_emu; + (void)modules; + (void)verbose; + +#if !defined(__GNUC__) || defined(__clang__) + watch_object(win_emu, modules, *win_emu.current_thread().teb, verbose); + watch_object(win_emu, modules, win_emu.process.peb, verbose); + watch_object(win_emu, modules, emulator_object{win_emu.emu(), kusd_mmio::address()}, + verbose); + + auto* params_hook = watch_object(win_emu, modules, win_emu.process.process_params, verbose); + + win_emu.emu().hook_memory_write( + win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters), 0x8, + [&win_emu, verbose, params_hook, modules](const uint64_t address, const void*, size_t) mutable { + const auto target_address = win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters); + + if (address == target_address) + { + const emulator_object obj{ + win_emu.emu(), + win_emu.emu().read_memory(address), + }; + + win_emu.emu().delete_hook(params_hook); + params_hook = watch_object(win_emu, modules, obj, verbose); + } + }); +#endif + } + + bool read_yes_no_answer() + { + while (true) + { + const auto chr = static_cast(getchar()); + if (chr == 'y') + { + return true; + } + + if (chr == 'n') + { + return false; + } + } + } + + void do_post_emulation_work(const analysis_context& c) + { + if (c.settings->buffer_stdout) + { + c.win_emu->log.info("%.*s%s", static_cast(c.output.size()), c.output.data(), + c.output.ends_with("\n") ? "" : "\n"); + } + } + + bool run_emulation(const analysis_context& c, const analysis_options& options) + { + auto& win_emu = *c.win_emu; + + std::atomic_uint32_t signals_received{0}; + utils::interupt_handler _{[&] { + const auto value = signals_received++; + if (value == 1) + { + win_emu.log.log("Exit already requested. Press CTRL+C again to force kill!"); + } + else if (value >= 2) + { + _Exit(1); + } + + win_emu.stop(); + }}; + + std::optional exit_status{}; +#ifdef OS_EMSCRIPTEN + const auto _1 = utils::finally([&] { + debugger::handle_exit(win_emu, exit_status); // + }); +#endif + + try + { + if (options.use_gdb) + { + const auto* address = "127.0.0.1:28960"; + win_emu.log.print(color::pink, "Waiting for GDB connection on %s...\n", address); + + const auto should_stop = [&] { return signals_received > 0; }; + + win_x64_gdb_stub_handler handler{win_emu, should_stop}; + gdb_stub::run_gdb_stub(network::address{"0.0.0.0:28960", AF_INET}, handler); + } + else if (!options.minidump_path.empty()) + { + // For minidumps, don't start execution automatically; just report ready state + win_emu.log.print(color::green, "Minidump loaded successfully. Process state ready for analysis.\n"); + return true; // Return success without starting emulation + } + else + { + win_emu.start(); + } + + if (signals_received > 0) + { + options.use_gdb = false; + + win_emu.log.log("Do you want to create a snapshot? (y/n)\n"); + const auto write_snapshot = read_yes_no_answer(); + + if (write_snapshot) + { + snapshot::write_emulator_snapshot(win_emu); + } + } + } + catch (const std::exception& e) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation failed at: 0x%" PRIx64 " - %s\n", win_emu.emu().read_instruction_pointer(), + e.what()); + throw; + } + catch (...) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation failed at: 0x%" PRIx64 "\n", win_emu.emu().read_instruction_pointer()); + throw; + } + + exit_status = win_emu.process.exit_status; + if (!exit_status.has_value()) + { + do_post_emulation_work(c); + win_emu.log.error("Emulation terminated without status!\n"); + return false; + } + + const auto success = *exit_status == STATUS_SUCCESS; + + if (!options.silent) + { + do_post_emulation_work(c); + win_emu.log.disable_output(false); + win_emu.log.print(success ? color::green : color::red, "Emulation terminated with status: %X\n", + *exit_status); + } + + return success; + } + + std::vector parse_arguments(const std::span args) + { + std::vector wide_args{}; + wide_args.reserve(args.size() - 1); + + for (size_t i = 1; i < args.size(); ++i) + { + const auto& arg = args[i]; + wide_args.emplace_back(arg.begin(), arg.end()); + } + + return wide_args; + } + + emulator_settings create_emulator_settings(const analysis_options& options) + { + return { + .emulation_root = options.emulation_root, + .registry_directory = options.registry_path, + .path_mappings = options.path_mappings, + }; + } + + std::unique_ptr create_empty_emulator(const analysis_options& options) + { + const auto settings = create_emulator_settings(options); + return std::make_unique(create_x86_64_emulator(), settings); + } + + std::unique_ptr create_application_emulator(const analysis_options& options, + const std::span args) + { + if (args.empty()) + { + throw std::runtime_error("No args provided"); + } + + application_settings app_settings{ + .application = args[0], + .arguments = parse_arguments(args), + }; + + const auto settings = create_emulator_settings(options); + return std::make_unique(create_x86_64_emulator(), std::move(app_settings), settings); + } + + std::unique_ptr setup_emulator(const analysis_options& options, + const std::span args) + { + if (!options.dump.empty()) + { + // load snapshot + auto win_emu = create_empty_emulator(options); + snapshot::load_emulator_snapshot(*win_emu, options.dump); + return win_emu; + } + if (!options.minidump_path.empty()) + { + // load minidump + auto win_emu = create_empty_emulator(options); + minidump_loader::load_minidump_into_emulator(*win_emu, options.minidump_path); + return win_emu; + } + + // default: load application + return create_application_emulator(options, args); + } + + bool run(const analysis_options& options, const std::span args) + { + analysis_context context{ + .settings = &options, + }; + + const auto win_emu = setup_emulator(options, args); + win_emu->log.disable_output(options.concise_logging || options.silent); + context.win_emu = win_emu.get(); + + win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); + + // Enable TenetTracer and assign it to the context. + std::unique_ptr tenet_tracer; + if (options.tenet_trace) + { + win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); + tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); + + // Set up the hook to call the tracer for each instruction. + win_emu->emu().hook_memory_execution([&](uint64_t address) { + if (tenet_tracer) + { + tenet_tracer->process_instruction(address); + } + }); + } + + register_analysis_callbacks(context); + watch_system_objects(*win_emu, options.modules, options.verbose_logging); + + const auto& exe = *win_emu->mod_manager.executable; + + const auto concise_logging = !options.verbose_logging; + + win_emu->emu().hook_instruction(x86_hookable_instructions::cpuid, [&] { + const auto rip = win_emu->emu().read_instruction_pointer(); + auto* mod = get_module_if_interesting(win_emu->mod_manager, options.modules, rip); + + if (mod) + { + const auto leaf = win_emu->emu().reg(x86_register::eax); + win_emu->log.print(color::blue, "Executing CPUID instruction with leaf 0x%X at 0x%" PRIx64 " (%s)\n", + leaf, rip, mod->name.c_str()); + } + + return instruction_hook_continuation::run_instruction; + }); + + if (options.log_executable_access) + { + for (const auto& section : exe.sections) + { + if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) + { + continue; + } + + auto read_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto rip = win_emu->emu().read_instruction_pointer(); + if (!win_emu->mod_manager.executable->is_within(rip)) + { + return; + } + + if (concise_logging) + { + static uint64_t count{0}; + ++count; + if (count > 100 && count % 100000 != 0) + { + return; + } + } + + win_emu->log.print(color::green, + "Reading from executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", + section.name.c_str(), address, rip); + }; + + const auto write_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto rip = win_emu->emu().read_instruction_pointer(); + if (!win_emu->mod_manager.executable->is_within(rip)) + { + return; + } + + if (concise_logging) + { + static uint64_t count{0}; + ++count; + if (count > 100 && count % 100000 != 0) + { + return; + } + } + + win_emu->log.print(color::blue, + "Writing to executable section %s at 0x%" PRIx64 " via 0x%" PRIx64 "\n", + section.name.c_str(), address, rip); + }; + + win_emu->emu().hook_memory_read(section.region.start, section.region.length, std::move(read_handler)); + win_emu->emu().hook_memory_write(section.region.start, section.region.length, std::move(write_handler)); + } + } + + return run_emulation(context, options); + } + + std::vector bundle_arguments(const int argc, char** argv) + { + std::vector args{}; + + for (int i = 1; i < argc; ++i) + { + args.emplace_back(argv[i]); + } + + return args; + } + + void print_help() + { + printf("Usage: analyzer [options] [application] [args...]\n\n"); + printf("Options:\n"); + printf(" -h, --help Show this help message\n"); + printf(" -d, --debug Enable GDB debugging mode\n"); + printf(" -s, --silent Silent mode\n"); + printf(" -v, --verbose Verbose logging\n"); + printf(" -b, --buffer Buffer stdout\n"); + printf(" -c, --concise Concise logging\n"); + printf(" -x, --exec Log r/w access to executable memory\n"); + printf(" -m, --module Specify module to track\n"); + printf(" -e, --emulation Set emulation root path\n"); + printf(" -a, --snapshot Load snapshot dump from path\n"); + printf(" --minidump Load minidump from path\n"); + printf(" -t, --tenet-trace Enable Tenet tracer\n"); + printf(" -i, --ignore Comma-separated list of functions to ignore\n"); + printf(" -p, --path Map Windows path to host path\n"); + printf(" -r, --registry Set registry path (default: ./registry)\n\n"); + printf("Examples:\n"); + printf(" analyzer -v -e path/to/root myapp.exe\n"); + printf(" analyzer -e path/to/root -p c:/analysis-sample.exe /path/to/sample.exe c:/analysis-sample.exe\n"); + } + + analysis_options parse_options(std::vector& args) + { + analysis_options options{}; + + while (!args.empty()) + { + auto arg_it = args.begin(); + const auto& arg = *arg_it; + + if (arg == "-h" || arg == "--help") + { + print_help(); + std::exit(0); + } + else if (arg == "-d" || arg == "--debug") + { + options.use_gdb = true; + } + else if (arg == "-s" || arg == "--silent") + { + options.silent = true; + } + else if (arg == "-v" || arg == "--verbose") + { + options.verbose_logging = true; + } + else if (arg == "-b" || arg == "--buffer") + { + options.buffer_stdout = true; + } + else if (arg == "-x" || arg == "--exec") + { + options.log_executable_access = true; + } + else if (arg == "-c" || arg == "--concise") + { + options.concise_logging = true; + } + else if (arg == "-t" || arg == "--tenet-trace") + { + options.tenet_trace = true; + } + else if (arg == "-m" || arg == "--module") + { + if (args.size() < 2) + { + throw std::runtime_error("No module provided after -m/--module"); + } + + arg_it = args.erase(arg_it); + options.modules.insert(std::string(args[0])); + } + else if (arg == "-e" || arg == "--emulation") + { + if (args.size() < 2) + { + throw std::runtime_error("No emulation root path provided after -e/--emulation"); + } + arg_it = args.erase(arg_it); + options.emulation_root = args[0]; + } + else if (arg == "-a" || arg == "--snapshot") + { + if (args.size() < 2) + { + throw std::runtime_error("No dump path provided after -a/--snapshot"); + } + arg_it = args.erase(arg_it); + options.dump = args[0]; + } + else if (arg == "--minidump") + { + if (args.size() < 2) + { + throw std::runtime_error("No minidump path provided after --minidump"); + } + arg_it = args.erase(arg_it); + options.minidump_path = args[0]; + } + else if (arg == "-i" || arg == "--ignore") + { + if (args.size() < 2) + { + throw std::runtime_error("No ignored function(s) provided after -i/--ignore"); + } + arg_it = args.erase(arg_it); + split_and_insert(options.ignored_functions, args[0]); + } + else if (arg == "-p" || arg == "--path") + { + if (args.size() < 3) + { + throw std::runtime_error("No path mapping provided after -p/--path"); + } + arg_it = args.erase(arg_it); + windows_path source = args[0]; + arg_it = args.erase(arg_it); + std::filesystem::path target = std::filesystem::absolute(args[0]); + + options.path_mappings[std::move(source)] = std::move(target); + } + else if (arg == "-r" || arg == "--registry") + { + if (args.size() < 2) + { + throw std::runtime_error("No registry path provided after -r/--registry"); + } + arg_it = args.erase(arg_it); + options.registry_path = args[0]; + } + else + { + break; + } + + args.erase(arg_it); + } + + return options; + } + + int run_main(const int argc, char** argv) + { + try + { + auto args = bundle_arguments(argc, argv); + if (args.empty()) + { + print_help(); + return 1; + } + + const auto options = parse_options(args); + + bool result{}; + + do + { + result = run(options, args); + } while (options.use_gdb); + + return result ? 0 : 1; + } + catch (std::exception& e) + { + puts(e.what()); + +#if defined(_WIN32) && 0 + MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); +#endif + } + + return 1; + } +} + +int main(const int argc, char** argv) +{ + return run_main(argc, argv); +} + +#ifdef _WIN32 +int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) +{ + return run_main(__argc, __argv); +} +#endif diff --git a/src/analyzer/object_watching.hpp b/src/analyzer/object_watching.hpp index 01c7feb9..3ba81167 100644 --- a/src/analyzer/object_watching.hpp +++ b/src/analyzer/object_watching.hpp @@ -1,43 +1,43 @@ -#pragma once - -#include "reflect_type_info.hpp" -#include -#include - -template -emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, - emulator_object object, const auto verbose) -{ - const reflect_type_info info{}; - - return emu.emu().hook_memory_read( - object.value(), static_cast(object.size()), - [i = std::move(info), object, &emu, verbose, modules](const uint64_t address, const void*, size_t) { - const auto rip = emu.emu().read_instruction_pointer(); - const auto* mod = emu.mod_manager.find_by_address(rip); - const auto is_main_access = mod == emu.mod_manager.executable || modules.contains(mod->name); - - if (!verbose && !is_main_access) - { - return; - } - - if (!verbose) - { - static std::unordered_set logged_addresses{}; - if (is_main_access && !logged_addresses.insert(address).second) - { - return; - } - } - - const auto offset = address - object.value(); - const auto* mod_name = mod ? mod->name.c_str() : ""; - const auto& type_name = i.get_type_name(); - const auto member_name = i.get_member_name(static_cast(offset)); - - emu.log.print(is_main_access ? color::green : color::dark_gray, - "Object access: %s - 0x%" PRIx64 " (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset, - member_name.c_str(), rip, mod_name); - }); -} +#pragma once + +#include "reflect_type_info.hpp" +#include +#include + +template +emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, + emulator_object object, const auto verbose) +{ + const reflect_type_info info{}; + + return emu.emu().hook_memory_read( + object.value(), static_cast(object.size()), + [i = std::move(info), object, &emu, verbose, modules](const uint64_t address, const void*, size_t) { + const auto rip = emu.emu().read_instruction_pointer(); + const auto* mod = emu.mod_manager.find_by_address(rip); + const auto is_main_access = mod == emu.mod_manager.executable || modules.contains(mod->name); + + if (!verbose && !is_main_access) + { + return; + } + + if (!verbose) + { + static std::unordered_set logged_addresses{}; + if (is_main_access && !logged_addresses.insert(address).second) + { + return; + } + } + + const auto offset = address - object.value(); + const auto* mod_name = mod ? mod->name.c_str() : ""; + const auto& type_name = i.get_type_name(); + const auto member_name = i.get_member_name(static_cast(offset)); + + emu.log.print(is_main_access ? color::green : color::dark_gray, + "Object access: %s - 0x%" PRIx64 " (%s) at 0x%" PRIx64 " (%s)\n", type_name.c_str(), offset, + member_name.c_str(), rip, mod_name); + }); +} diff --git a/src/analyzer/reflect_extension.hpp b/src/analyzer/reflect_extension.hpp index c1cd05cb..aa18d46e 100644 --- a/src/analyzer/reflect_extension.hpp +++ b/src/analyzer/reflect_extension.hpp @@ -1,2304 +1,2304 @@ -#pragma once - -namespace -{ - template - struct REFLECT_FWD_LIKE2 - { - template - using type = std::remove_reference_t&&; - }; - template <> - struct REFLECT_FWD_LIKE2 - { - template - using type = std::remove_reference_t&; - }; -} // to speed up compilation times - -#define REFLECT_FWD(...) static_cast(__VA_ARGS__) -#define REFLECT_FWD_LIKE(T, ...) \ - static_cast>::template type>( \ - __VA_ARGS__) - -namespace reflect::inline v1_2_5 -{ - namespace detail - { - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, - _82] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86, _87] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, - _83, _84, _85, _86, _87, _88] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), - REFLECT_FWD_LIKE(T, _100)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117] = - REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126, _127] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127)); - } - template - [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept - { - auto&& [_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, _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, _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, _99, _100, _101, - _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, - _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128] = REFLECT_FWD(t); - return REFLECT_FWD(fn)( - REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), - REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), - REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), - REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), - REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), - REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), - REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), - REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), - REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), - REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), - REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), - REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), - REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), - REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), - REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), - REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), - REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), - REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), - REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), - REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), - REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), - REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), - REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), - REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), - REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), - REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), - REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), - REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), - REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), - REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), - REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), - REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), - REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), - REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127), - REFLECT_FWD_LIKE(T, _128)); - } - } -} - -#undef REFLECT_FWD_LIKE -#undef REFLECT_FWD +#pragma once + +namespace +{ + template + struct REFLECT_FWD_LIKE2 + { + template + using type = std::remove_reference_t&&; + }; + template <> + struct REFLECT_FWD_LIKE2 + { + template + using type = std::remove_reference_t&; + }; +} // to speed up compilation times + +#define REFLECT_FWD(...) static_cast(__VA_ARGS__) +#define REFLECT_FWD_LIKE(T, ...) \ + static_cast>::template type>( \ + __VA_ARGS__) + +namespace reflect::inline v1_2_5 +{ + namespace detail + { + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, + _82] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86, _87] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, + _83, _84, _85, _86, _87, _88] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), + REFLECT_FWD_LIKE(T, _100)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117] = + REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126, _127] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127)); + } + template + [[nodiscard]] constexpr decltype(auto) visit(Fn&& fn, T&& t, std::integral_constant) noexcept + { + auto&& [_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, _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, _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, _99, _100, _101, + _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, + _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128] = REFLECT_FWD(t); + return REFLECT_FWD(fn)( + REFLECT_FWD_LIKE(T, _1), REFLECT_FWD_LIKE(T, _2), REFLECT_FWD_LIKE(T, _3), REFLECT_FWD_LIKE(T, _4), + REFLECT_FWD_LIKE(T, _5), REFLECT_FWD_LIKE(T, _6), REFLECT_FWD_LIKE(T, _7), REFLECT_FWD_LIKE(T, _8), + REFLECT_FWD_LIKE(T, _9), REFLECT_FWD_LIKE(T, _10), REFLECT_FWD_LIKE(T, _11), REFLECT_FWD_LIKE(T, _12), + REFLECT_FWD_LIKE(T, _13), REFLECT_FWD_LIKE(T, _14), REFLECT_FWD_LIKE(T, _15), REFLECT_FWD_LIKE(T, _16), + REFLECT_FWD_LIKE(T, _17), REFLECT_FWD_LIKE(T, _18), REFLECT_FWD_LIKE(T, _19), REFLECT_FWD_LIKE(T, _20), + REFLECT_FWD_LIKE(T, _21), REFLECT_FWD_LIKE(T, _22), REFLECT_FWD_LIKE(T, _23), REFLECT_FWD_LIKE(T, _24), + REFLECT_FWD_LIKE(T, _25), REFLECT_FWD_LIKE(T, _26), REFLECT_FWD_LIKE(T, _27), REFLECT_FWD_LIKE(T, _28), + REFLECT_FWD_LIKE(T, _29), REFLECT_FWD_LIKE(T, _30), REFLECT_FWD_LIKE(T, _31), REFLECT_FWD_LIKE(T, _32), + REFLECT_FWD_LIKE(T, _33), REFLECT_FWD_LIKE(T, _34), REFLECT_FWD_LIKE(T, _35), REFLECT_FWD_LIKE(T, _36), + REFLECT_FWD_LIKE(T, _37), REFLECT_FWD_LIKE(T, _38), REFLECT_FWD_LIKE(T, _39), REFLECT_FWD_LIKE(T, _40), + REFLECT_FWD_LIKE(T, _41), REFLECT_FWD_LIKE(T, _42), REFLECT_FWD_LIKE(T, _43), REFLECT_FWD_LIKE(T, _44), + REFLECT_FWD_LIKE(T, _45), REFLECT_FWD_LIKE(T, _46), REFLECT_FWD_LIKE(T, _47), REFLECT_FWD_LIKE(T, _48), + REFLECT_FWD_LIKE(T, _49), REFLECT_FWD_LIKE(T, _50), REFLECT_FWD_LIKE(T, _51), REFLECT_FWD_LIKE(T, _52), + REFLECT_FWD_LIKE(T, _53), REFLECT_FWD_LIKE(T, _54), REFLECT_FWD_LIKE(T, _55), REFLECT_FWD_LIKE(T, _56), + REFLECT_FWD_LIKE(T, _57), REFLECT_FWD_LIKE(T, _58), REFLECT_FWD_LIKE(T, _59), REFLECT_FWD_LIKE(T, _60), + REFLECT_FWD_LIKE(T, _61), REFLECT_FWD_LIKE(T, _62), REFLECT_FWD_LIKE(T, _63), REFLECT_FWD_LIKE(T, _64), + REFLECT_FWD_LIKE(T, _65), REFLECT_FWD_LIKE(T, _66), REFLECT_FWD_LIKE(T, _67), REFLECT_FWD_LIKE(T, _68), + REFLECT_FWD_LIKE(T, _69), REFLECT_FWD_LIKE(T, _70), REFLECT_FWD_LIKE(T, _71), REFLECT_FWD_LIKE(T, _72), + REFLECT_FWD_LIKE(T, _73), REFLECT_FWD_LIKE(T, _74), REFLECT_FWD_LIKE(T, _75), REFLECT_FWD_LIKE(T, _76), + REFLECT_FWD_LIKE(T, _77), REFLECT_FWD_LIKE(T, _78), REFLECT_FWD_LIKE(T, _79), REFLECT_FWD_LIKE(T, _80), + REFLECT_FWD_LIKE(T, _81), REFLECT_FWD_LIKE(T, _82), REFLECT_FWD_LIKE(T, _83), REFLECT_FWD_LIKE(T, _84), + REFLECT_FWD_LIKE(T, _85), REFLECT_FWD_LIKE(T, _86), REFLECT_FWD_LIKE(T, _87), REFLECT_FWD_LIKE(T, _88), + REFLECT_FWD_LIKE(T, _89), REFLECT_FWD_LIKE(T, _90), REFLECT_FWD_LIKE(T, _91), REFLECT_FWD_LIKE(T, _92), + REFLECT_FWD_LIKE(T, _93), REFLECT_FWD_LIKE(T, _94), REFLECT_FWD_LIKE(T, _95), REFLECT_FWD_LIKE(T, _96), + REFLECT_FWD_LIKE(T, _97), REFLECT_FWD_LIKE(T, _98), REFLECT_FWD_LIKE(T, _99), REFLECT_FWD_LIKE(T, _100), + REFLECT_FWD_LIKE(T, _101), REFLECT_FWD_LIKE(T, _102), REFLECT_FWD_LIKE(T, _103), + REFLECT_FWD_LIKE(T, _104), REFLECT_FWD_LIKE(T, _105), REFLECT_FWD_LIKE(T, _106), + REFLECT_FWD_LIKE(T, _107), REFLECT_FWD_LIKE(T, _108), REFLECT_FWD_LIKE(T, _109), + REFLECT_FWD_LIKE(T, _110), REFLECT_FWD_LIKE(T, _111), REFLECT_FWD_LIKE(T, _112), + REFLECT_FWD_LIKE(T, _113), REFLECT_FWD_LIKE(T, _114), REFLECT_FWD_LIKE(T, _115), + REFLECT_FWD_LIKE(T, _116), REFLECT_FWD_LIKE(T, _117), REFLECT_FWD_LIKE(T, _118), + REFLECT_FWD_LIKE(T, _119), REFLECT_FWD_LIKE(T, _120), REFLECT_FWD_LIKE(T, _121), + REFLECT_FWD_LIKE(T, _122), REFLECT_FWD_LIKE(T, _123), REFLECT_FWD_LIKE(T, _124), + REFLECT_FWD_LIKE(T, _125), REFLECT_FWD_LIKE(T, _126), REFLECT_FWD_LIKE(T, _127), + REFLECT_FWD_LIKE(T, _128)); + } + } +} + +#undef REFLECT_FWD_LIKE +#undef REFLECT_FWD diff --git a/src/analyzer/reflect_type_info.hpp b/src/analyzer/reflect_type_info.hpp index af70c2ad..0a6059a9 100644 --- a/src/analyzer/reflect_type_info.hpp +++ b/src/analyzer/reflect_type_info.hpp @@ -1,83 +1,83 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wtautological-compare" -#endif - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-private-field" -#endif - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4308) -#endif - -#include "reflect_extension.hpp" -#include - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif - -template -class reflect_type_info -{ - public: - reflect_type_info() - { - this->type_name_ = reflect::type_name(); - - reflect::for_each([this](auto I) { - const auto member_name = reflect::member_name(); - const auto member_offset = reflect::offset_of(); - - this->members_[member_offset] = member_name; - }); - } - - std::string get_member_name(const size_t offset) const - { - size_t last_offset{}; - std::string_view last_member{}; - - for (const auto& member : this->members_) - { - if (offset == member.first) - { - return member.second; - } - - if (offset < member.first) - { - const auto diff = offset - last_offset; - return std::string(last_member) + "+" + std::to_string(diff); - } - - last_offset = member.first; - last_member = member.second; - } - - return ""; - } - - const std::string& get_type_name() const - { - return this->type_name_; - } - - private: - std::string type_name_{}; - std::map members_{}; -}; +#pragma once + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wtautological-compare" +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-private-field" +#endif + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4308) +#endif + +#include "reflect_extension.hpp" +#include + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +template +class reflect_type_info +{ + public: + reflect_type_info() + { + this->type_name_ = reflect::type_name(); + + reflect::for_each([this](auto I) { + const auto member_name = reflect::member_name(); + const auto member_offset = reflect::offset_of(); + + this->members_[member_offset] = member_name; + }); + } + + std::string get_member_name(const size_t offset) const + { + size_t last_offset{}; + std::string_view last_member{}; + + for (const auto& member : this->members_) + { + if (offset == member.first) + { + return member.second; + } + + if (offset < member.first) + { + const auto diff = offset - last_offset; + return std::string(last_member) + "+" + std::to_string(diff); + } + + last_offset = member.first; + last_member = member.second; + } + + return ""; + } + + const std::string& get_type_name() const + { + return this->type_name_; + } + + private: + std::string type_name_{}; + std::map members_{}; +}; diff --git a/src/analyzer/resource.rc b/src/analyzer/resource.rc index dc8452a9..8da94cc0 100644 --- a/src/analyzer/resource.rc +++ b/src/analyzer/resource.rc @@ -1,101 +1,101 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "windows.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "#include ""windows.h""\r\n" - "\0" -END - -2 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 - PRODUCTVERSION 1,0,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE VFT_DLL - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "momo5502" - VALUE "FileDescription", "Windows Emulator" - VALUE "FileVersion", "1.0.0.0" - VALUE "InternalName", "emulator" - VALUE "LegalCopyright", "All rights reserved." - VALUE "OriginalFilename", "emulator.exe" - VALUE "ProductName", "emulator" - VALUE "ProductVersion", "1.0.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -///////////////////////////////////////////////////////////////////////////// -// -// Binary Data -// - -GLFW_ICON ICON "resources/icon.ico" - - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "momo5502" + VALUE "FileDescription", "Windows Emulator" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "emulator" + VALUE "LegalCopyright", "All rights reserved." + VALUE "OriginalFilename", "emulator.exe" + VALUE "ProductName", "emulator" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Binary Data +// + +GLFW_ICON ICON "resources/icon.ico" + + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/analyzer/snapshot.cpp b/src/analyzer/snapshot.cpp index 2f1b13a3..8dc427d8 100644 --- a/src/analyzer/snapshot.cpp +++ b/src/analyzer/snapshot.cpp @@ -1,123 +1,123 @@ -#include "snapshot.hpp" - -#include -#include - -namespace snapshot -{ - namespace - { - struct snapshot_header - { - // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) - char magic[4] = {'S', 'N', 'A', 'P'}; - uint32_t version{1}; - }; - - static_assert(sizeof(snapshot_header) == 8); - - std::span validate_header(const std::span snapshot) - { - snapshot_header header{}; - constexpr snapshot_header default_header{}; - - if (snapshot.size() < sizeof(header)) - { - throw std::runtime_error("Snapshot is too small"); - } - - memcpy(&header, snapshot.data(), sizeof(header)); - - if (memcmp(default_header.magic, header.magic, sizeof(header.magic)) != 0) - { - throw std::runtime_error("Invalid snapshot"); - } - - if (default_header.version != header.version) - { - throw std::runtime_error("Unsupported snapshot version: " + std::to_string(header.version) + - "(needed: " + std::to_string(default_header.version) + ")"); - } - - return snapshot.subspan(sizeof(header)); - } - - std::vector get_compressed_emulator_state(const windows_emulator& win_emu) - { - utils::buffer_serializer serializer{}; - win_emu.serialize(serializer); - - return utils::compression::zlib::compress(serializer.get_buffer()); - } - - std::vector get_decompressed_emulator_state(const std::span snapshot) - { - const auto data = validate_header(snapshot); - return utils::compression::zlib::decompress(data); - } - - std::string get_main_executable_name(const windows_emulator& win_emu) - { - const auto* exe = win_emu.mod_manager.executable; - if (exe) - { - return std::filesystem::path(exe->name).stem().string(); - } - - return "process"; - } - } - - std::vector create_emulator_snapshot(const windows_emulator& win_emu) - { - const auto state = get_compressed_emulator_state(win_emu); - - snapshot_header header{}; - std::span header_span(reinterpret_cast(&header), sizeof(header)); - - std::vector snapshot{}; - snapshot.reserve(header_span.size() + state.size()); - snapshot.assign(header_span.begin(), header_span.end()); - snapshot.insert(snapshot.end(), state.begin(), state.end()); - - return snapshot; - } - - std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, const bool log) - { - std::filesystem::path snapshot_file = - get_main_executable_name(win_emu) + "-" + std::to_string(time(nullptr)) + ".snap"; - - if (log) - { - win_emu.log.log("Writing snapshot to %s...\n", snapshot_file.string().c_str()); - } - - const auto snapshot = create_emulator_snapshot(win_emu); - if (!utils::io::write_file(snapshot_file, snapshot)) - { - throw std::runtime_error("Failed to write snapshot!"); - } - - return snapshot_file; - } - - void load_emulator_snapshot(windows_emulator& win_emu, const std::span snapshot) - { - const auto data = get_decompressed_emulator_state(snapshot); - - utils::buffer_deserializer deserializer{data}; - win_emu.deserialize(deserializer); - } - - void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file) - { - std::vector data{}; - if (!utils::io::read_file(snapshot_file, &data)) - { - throw std::runtime_error("Failed to read snapshot file: " + snapshot_file.string()); - } - - load_emulator_snapshot(win_emu, data); - } -} +#include "snapshot.hpp" + +#include +#include + +namespace snapshot +{ + namespace + { + struct snapshot_header + { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + char magic[4] = {'S', 'N', 'A', 'P'}; + uint32_t version{1}; + }; + + static_assert(sizeof(snapshot_header) == 8); + + std::span validate_header(const std::span snapshot) + { + snapshot_header header{}; + constexpr snapshot_header default_header{}; + + if (snapshot.size() < sizeof(header)) + { + throw std::runtime_error("Snapshot is too small"); + } + + memcpy(&header, snapshot.data(), sizeof(header)); + + if (memcmp(default_header.magic, header.magic, sizeof(header.magic)) != 0) + { + throw std::runtime_error("Invalid snapshot"); + } + + if (default_header.version != header.version) + { + throw std::runtime_error("Unsupported snapshot version: " + std::to_string(header.version) + + "(needed: " + std::to_string(default_header.version) + ")"); + } + + return snapshot.subspan(sizeof(header)); + } + + std::vector get_compressed_emulator_state(const windows_emulator& win_emu) + { + utils::buffer_serializer serializer{}; + win_emu.serialize(serializer); + + return utils::compression::zlib::compress(serializer.get_buffer()); + } + + std::vector get_decompressed_emulator_state(const std::span snapshot) + { + const auto data = validate_header(snapshot); + return utils::compression::zlib::decompress(data); + } + + std::string get_main_executable_name(const windows_emulator& win_emu) + { + const auto* exe = win_emu.mod_manager.executable; + if (exe) + { + return std::filesystem::path(exe->name).stem().string(); + } + + return "process"; + } + } + + std::vector create_emulator_snapshot(const windows_emulator& win_emu) + { + const auto state = get_compressed_emulator_state(win_emu); + + snapshot_header header{}; + std::span header_span(reinterpret_cast(&header), sizeof(header)); + + std::vector snapshot{}; + snapshot.reserve(header_span.size() + state.size()); + snapshot.assign(header_span.begin(), header_span.end()); + snapshot.insert(snapshot.end(), state.begin(), state.end()); + + return snapshot; + } + + std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, const bool log) + { + std::filesystem::path snapshot_file = + get_main_executable_name(win_emu) + "-" + std::to_string(time(nullptr)) + ".snap"; + + if (log) + { + win_emu.log.log("Writing snapshot to %s...\n", snapshot_file.string().c_str()); + } + + const auto snapshot = create_emulator_snapshot(win_emu); + if (!utils::io::write_file(snapshot_file, snapshot)) + { + throw std::runtime_error("Failed to write snapshot!"); + } + + return snapshot_file; + } + + void load_emulator_snapshot(windows_emulator& win_emu, const std::span snapshot) + { + const auto data = get_decompressed_emulator_state(snapshot); + + utils::buffer_deserializer deserializer{data}; + win_emu.deserialize(deserializer); + } + + void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file) + { + std::vector data{}; + if (!utils::io::read_file(snapshot_file, &data)) + { + throw std::runtime_error("Failed to read snapshot file: " + snapshot_file.string()); + } + + load_emulator_snapshot(win_emu, data); + } +} diff --git a/src/analyzer/snapshot.hpp b/src/analyzer/snapshot.hpp index 60834a84..8b5fbba4 100644 --- a/src/analyzer/snapshot.hpp +++ b/src/analyzer/snapshot.hpp @@ -1,12 +1,12 @@ -#pragma once - -#include - -namespace snapshot -{ - std::vector create_emulator_snapshot(const windows_emulator& win_emu); - std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, bool log = true); - - void load_emulator_snapshot(windows_emulator& win_emu, std::span snapshot); - void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file); -} +#pragma once + +#include + +namespace snapshot +{ + std::vector create_emulator_snapshot(const windows_emulator& win_emu); + std::filesystem::path write_emulator_snapshot(const windows_emulator& win_emu, bool log = true); + + void load_emulator_snapshot(windows_emulator& win_emu, std::span snapshot); + void load_emulator_snapshot(windows_emulator& win_emu, const std::filesystem::path& snapshot_file); +} diff --git a/src/analyzer/std_include.hpp b/src/analyzer/std_include.hpp index 17c6f538..9719ff6b 100644 --- a/src/analyzer/std_include.hpp +++ b/src/analyzer/std_include.hpp @@ -1,31 +1,31 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -// NOLINTNEXTLINE(google-global-names-in-headers) -using namespace std::literals; +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +// NOLINTNEXTLINE(google-global-names-in-headers) +using namespace std::literals; diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index 2c49f3f0..83ed2d97 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -1,262 +1,262 @@ -#include "tenet_tracer.hpp" -#include -#include - -TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) - : m_win_emu(win_emu), - m_log_file(log_filename) -{ - if (!m_log_file.is_open()) - { - throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename); - } - // Set up memory hooks. - auto& emu = m_win_emu.emu(); - m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, - [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); }); - m_write_hook = emu.hook_memory_write( - 0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); }); -} - -TenetTracer::~TenetTracer() -{ - auto& emu = m_win_emu.emu(); - if (m_read_hook) - emu.delete_hook(m_read_hook); - if (m_write_hook) - emu.delete_hook(m_write_hook); - - // Filter and write the buffer when the program ends. - filter_and_write_buffer(); - - if (m_log_file.is_open()) - { - m_log_file.close(); - } -} - -// Helper function: Parses a log line and adds register changes to the map. -static void parse_and_accumulate_changes(const std::string& line, std::map& changes) -{ - size_t start = 0; - while (start < line.length()) - { - size_t end = line.find(',', start); - if (end == std::string::npos) - { - end = line.length(); - } - - std::string pair_str = line.substr(start, end - start); - size_t equals_pos = pair_str.find('='); - if (equals_pos != std::string::npos) - { - std::string key = pair_str.substr(0, equals_pos); - std::string value = pair_str.substr(equals_pos + 1); - changes[key] = value; // Updates existing or adds a new one. - } - - start = end + 1; - } -} - -void TenetTracer::filter_and_write_buffer() -{ - if (m_raw_log_buffer.empty()) - { - return; - } - - const auto* exe_module = m_win_emu.mod_manager.executable; - if (!exe_module) - { - // If there is no main module, write the raw data and exit. - for (const auto& line : m_raw_log_buffer) - { - m_log_file << line << '\n'; - } - return; - } - - // Always write the first line (initial registers). - if (!m_raw_log_buffer.empty()) - { - m_log_file << m_raw_log_buffer.front() << '\n'; - } - - bool currently_outside = false; - std::map accumulated_changes; - - for (size_t i = 1; i < m_raw_log_buffer.size(); ++i) - { - const auto& line = m_raw_log_buffer[i]; - - size_t rip_pos = line.find("rip=0x"); - if (rip_pos == std::string::npos) - continue; - - char* end_ptr; - uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); - - bool is_line_inside = exe_module->is_within(address); - - if (is_line_inside) - { - // We are inside the main module. - if (currently_outside) - { - // JUST ENTERED FROM OUTSIDE (moment of return from API) - // 1. Create a synthetic log line from the accumulated changes. - if (!accumulated_changes.empty()) - { - std::stringstream summary_line; - bool first = true; - - // Separate rip from the map as it will be added at the end. - auto rip_it = accumulated_changes.find("rip"); - std::string last_rip; - if (rip_it != accumulated_changes.end()) - { - last_rip = rip_it->second; - accumulated_changes.erase(rip_it); - } - - for (const auto& pair : accumulated_changes) - { - if (!first) - summary_line << ","; - summary_line << pair.first << "=" << pair.second; - first = false; - } - - // Add the last known rip at the end. - if (!last_rip.empty()) - { - if (!first) - summary_line << ","; - summary_line << "rip=" << last_rip; - } - - m_log_file << summary_line.str() << '\n'; - } - accumulated_changes.clear(); - } - - // 2. Write the current line within the main module. - m_log_file << line << '\n'; - currently_outside = false; - } - else - { - // We are outside the main module. - // 1. Accumulate the changes. - parse_and_accumulate_changes(line, accumulated_changes); - currently_outside = true; - } - } - - m_raw_log_buffer.clear(); -} - -std::string TenetTracer::format_hex(uint64_t value) -{ - std::stringstream ss; - ss << "0x" << std::hex << value; - return ss.str(); -} - -std::string TenetTracer::format_byte_array(const uint8_t* data, size_t size) -{ - std::stringstream ss; - for (size_t i = 0; i < size; ++i) - { - ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]); - } - return ss.str(); -} - -void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t size) -{ - if (!m_mem_read_log.str().empty()) - { - m_mem_read_log << ";"; - } - m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); -} - -void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t size) -{ - if (!m_mem_write_log.str().empty()) - { - m_mem_write_log << ";"; - } - m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); -} - -void TenetTracer::process_instruction(uint64_t address) -{ - auto& emu = m_win_emu.emu(); - std::stringstream trace_line; - - std::array current_regs; - for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) - { - current_regs[i] = emu.reg(GPRs_TO_TRACE[i].first); - } - - bool first_entry = true; - auto append_separator = [&]() { - if (!first_entry) - { - trace_line << ","; - } - first_entry = false; - }; - - if (m_is_first_instruction) - { - for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) - { - append_separator(); - trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); - } - m_is_first_instruction = false; - } - else - { - for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) - { - if (m_previous_regs[i] != current_regs[i]) - { - append_separator(); - trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); - } - } - } - - append_separator(); - trace_line << "rip=" << format_hex(address); - - std::string mem_reads = m_mem_read_log.str(); - if (!mem_reads.empty()) - { - append_separator(); - trace_line << "mr=" << mem_reads; - } - std::string mem_writes = m_mem_write_log.str(); - if (!mem_writes.empty()) - { - append_separator(); - trace_line << "mw=" << mem_writes; - } - - // Add the data to the buffer instead of writing directly to the file. - m_raw_log_buffer.push_back(trace_line.str()); - - m_previous_regs = current_regs; - - m_mem_read_log.str(""); - m_mem_read_log.clear(); - m_mem_write_log.str(""); - m_mem_write_log.clear(); +#include "tenet_tracer.hpp" +#include +#include + +TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) + : m_win_emu(win_emu), + m_log_file(log_filename) +{ + if (!m_log_file.is_open()) + { + throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename); + } + // Set up memory hooks. + auto& emu = m_win_emu.emu(); + m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, + [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); }); + m_write_hook = emu.hook_memory_write( + 0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); }); +} + +TenetTracer::~TenetTracer() +{ + auto& emu = m_win_emu.emu(); + if (m_read_hook) + emu.delete_hook(m_read_hook); + if (m_write_hook) + emu.delete_hook(m_write_hook); + + // Filter and write the buffer when the program ends. + filter_and_write_buffer(); + + if (m_log_file.is_open()) + { + m_log_file.close(); + } +} + +// Helper function: Parses a log line and adds register changes to the map. +static void parse_and_accumulate_changes(const std::string& line, std::map& changes) +{ + size_t start = 0; + while (start < line.length()) + { + size_t end = line.find(',', start); + if (end == std::string::npos) + { + end = line.length(); + } + + std::string pair_str = line.substr(start, end - start); + size_t equals_pos = pair_str.find('='); + if (equals_pos != std::string::npos) + { + std::string key = pair_str.substr(0, equals_pos); + std::string value = pair_str.substr(equals_pos + 1); + changes[key] = value; // Updates existing or adds a new one. + } + + start = end + 1; + } +} + +void TenetTracer::filter_and_write_buffer() +{ + if (m_raw_log_buffer.empty()) + { + return; + } + + const auto* exe_module = m_win_emu.mod_manager.executable; + if (!exe_module) + { + // If there is no main module, write the raw data and exit. + for (const auto& line : m_raw_log_buffer) + { + m_log_file << line << '\n'; + } + return; + } + + // Always write the first line (initial registers). + if (!m_raw_log_buffer.empty()) + { + m_log_file << m_raw_log_buffer.front() << '\n'; + } + + bool currently_outside = false; + std::map accumulated_changes; + + for (size_t i = 1; i < m_raw_log_buffer.size(); ++i) + { + const auto& line = m_raw_log_buffer[i]; + + size_t rip_pos = line.find("rip=0x"); + if (rip_pos == std::string::npos) + continue; + + char* end_ptr; + uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); + + bool is_line_inside = exe_module->is_within(address); + + if (is_line_inside) + { + // We are inside the main module. + if (currently_outside) + { + // JUST ENTERED FROM OUTSIDE (moment of return from API) + // 1. Create a synthetic log line from the accumulated changes. + if (!accumulated_changes.empty()) + { + std::stringstream summary_line; + bool first = true; + + // Separate rip from the map as it will be added at the end. + auto rip_it = accumulated_changes.find("rip"); + std::string last_rip; + if (rip_it != accumulated_changes.end()) + { + last_rip = rip_it->second; + accumulated_changes.erase(rip_it); + } + + for (const auto& pair : accumulated_changes) + { + if (!first) + summary_line << ","; + summary_line << pair.first << "=" << pair.second; + first = false; + } + + // Add the last known rip at the end. + if (!last_rip.empty()) + { + if (!first) + summary_line << ","; + summary_line << "rip=" << last_rip; + } + + m_log_file << summary_line.str() << '\n'; + } + accumulated_changes.clear(); + } + + // 2. Write the current line within the main module. + m_log_file << line << '\n'; + currently_outside = false; + } + else + { + // We are outside the main module. + // 1. Accumulate the changes. + parse_and_accumulate_changes(line, accumulated_changes); + currently_outside = true; + } + } + + m_raw_log_buffer.clear(); +} + +std::string TenetTracer::format_hex(uint64_t value) +{ + std::stringstream ss; + ss << "0x" << std::hex << value; + return ss.str(); +} + +std::string TenetTracer::format_byte_array(const uint8_t* data, size_t size) +{ + std::stringstream ss; + for (size_t i = 0; i < size; ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]); + } + return ss.str(); +} + +void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t size) +{ + if (!m_mem_read_log.str().empty()) + { + m_mem_read_log << ";"; + } + m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); +} + +void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t size) +{ + if (!m_mem_write_log.str().empty()) + { + m_mem_write_log << ";"; + } + m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); +} + +void TenetTracer::process_instruction(uint64_t address) +{ + auto& emu = m_win_emu.emu(); + std::stringstream trace_line; + + std::array current_regs; + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + current_regs[i] = emu.reg(GPRs_TO_TRACE[i].first); + } + + bool first_entry = true; + auto append_separator = [&]() { + if (!first_entry) + { + trace_line << ","; + } + first_entry = false; + }; + + if (m_is_first_instruction) + { + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + append_separator(); + trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); + } + m_is_first_instruction = false; + } + else + { + for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) + { + if (m_previous_regs[i] != current_regs[i]) + { + append_separator(); + trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); + } + } + } + + append_separator(); + trace_line << "rip=" << format_hex(address); + + std::string mem_reads = m_mem_read_log.str(); + if (!mem_reads.empty()) + { + append_separator(); + trace_line << "mr=" << mem_reads; + } + std::string mem_writes = m_mem_write_log.str(); + if (!mem_writes.empty()) + { + append_separator(); + trace_line << "mw=" << mem_writes; + } + + // Add the data to the buffer instead of writing directly to the file. + m_raw_log_buffer.push_back(trace_line.str()); + + m_previous_regs = current_regs; + + m_mem_read_log.str(""); + m_mem_read_log.clear(); + m_mem_write_log.str(""); + m_mem_write_log.clear(); } \ No newline at end of file diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index 5480c835..660a6a95 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -1,72 +1,72 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include - -// List of registers to trace for the x64 architecture. -constexpr std::array, 16> GPRs_TO_TRACE = { - { - {x86_register::rax, "rax"}, - {x86_register::rbx, "rbx"}, - {x86_register::rcx, "rcx"}, - {x86_register::rdx, "rdx"}, - {x86_register::rsi, "rsi"}, - {x86_register::rdi, "rdi"}, - {x86_register::rbp, "rbp"}, - {x86_register::rsp, "rsp"}, - {x86_register::r8, "r8"}, - {x86_register::r9, "r9"}, - {x86_register::r10, "r10"}, - {x86_register::r11, "r11"}, - {x86_register::r12, "r12"}, - {x86_register::r13, "r13"}, - {x86_register::r14, "r14"}, - {x86_register::r15, "r15"}, - }, -}; - -class TenetTracer -{ - public: - TenetTracer(windows_emulator& win_emu, const std::string& log_filename); - ~TenetTracer(); - - // A new public method to call TenetTracer for each instruction. - void process_instruction(uint64_t address); - - // Disable copy and move operations. - TenetTracer(const TenetTracer&) = delete; - TenetTracer& operator=(const TenetTracer&) = delete; - - private: - void filter_and_write_buffer(); - void log_memory_read(uint64_t address, const void* data, size_t size); - void log_memory_write(uint64_t address, const void* data, size_t size); - - std::string format_hex(uint64_t value); - std::string format_byte_array(const uint8_t* data, size_t size); - - windows_emulator& m_win_emu; - std::ofstream m_log_file; - - // In-memory buffering for performance. - std::vector m_raw_log_buffer; - - // Use an array instead of a map to store the register state of the previous instruction. - std::array m_previous_regs{}; - bool m_is_first_instruction = true; - - // To temporarily store memory operations. - std::stringstream m_mem_read_log; - std::stringstream m_mem_write_log; - - // To manage memory hooks. - emulator_hook* m_read_hook = nullptr; - emulator_hook* m_write_hook = nullptr; +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +// List of registers to trace for the x64 architecture. +constexpr std::array, 16> GPRs_TO_TRACE = { + { + {x86_register::rax, "rax"}, + {x86_register::rbx, "rbx"}, + {x86_register::rcx, "rcx"}, + {x86_register::rdx, "rdx"}, + {x86_register::rsi, "rsi"}, + {x86_register::rdi, "rdi"}, + {x86_register::rbp, "rbp"}, + {x86_register::rsp, "rsp"}, + {x86_register::r8, "r8"}, + {x86_register::r9, "r9"}, + {x86_register::r10, "r10"}, + {x86_register::r11, "r11"}, + {x86_register::r12, "r12"}, + {x86_register::r13, "r13"}, + {x86_register::r14, "r14"}, + {x86_register::r15, "r15"}, + }, +}; + +class TenetTracer +{ + public: + TenetTracer(windows_emulator& win_emu, const std::string& log_filename); + ~TenetTracer(); + + // A new public method to call TenetTracer for each instruction. + void process_instruction(uint64_t address); + + // Disable copy and move operations. + TenetTracer(const TenetTracer&) = delete; + TenetTracer& operator=(const TenetTracer&) = delete; + + private: + void filter_and_write_buffer(); + void log_memory_read(uint64_t address, const void* data, size_t size); + void log_memory_write(uint64_t address, const void* data, size_t size); + + std::string format_hex(uint64_t value); + std::string format_byte_array(const uint8_t* data, size_t size); + + windows_emulator& m_win_emu; + std::ofstream m_log_file; + + // In-memory buffering for performance. + std::vector m_raw_log_buffer; + + // Use an array instead of a map to store the register state of the previous instruction. + std::array m_previous_regs{}; + bool m_is_first_instruction = true; + + // To temporarily store memory operations. + std::stringstream m_mem_read_log; + std::stringstream m_mem_write_log; + + // To manage memory hooks. + emulator_hook* m_read_hook = nullptr; + emulator_hook* m_write_hook = nullptr; }; \ No newline at end of file diff --git a/src/analyzer/test.py b/src/analyzer/test.py index 6912409c..fd907dc4 100644 --- a/src/analyzer/test.py +++ b/src/analyzer/test.py @@ -1,26 +1,26 @@ -import os -import subprocess - -emulator_root = os.getenv('EMULATOR_ROOT') -analysis_sample = os.getenv('ANALYSIS_SAMPLE') -virtual_sample = 'C:/analysis-sample.exe' - -application = 'analyzer' - -def make_app(app): - if os.name == 'nt': - return app + ".exe" - - return app - -command = [ - os.path.join(os.getcwd(), make_app(application)), - '-c', - '-e', emulator_root, - '-p', virtual_sample, analysis_sample, - virtual_sample -] - -result = subprocess.run(command, cwd=os.getcwd()) - -exit(result.returncode) +import os +import subprocess + +emulator_root = os.getenv('EMULATOR_ROOT') +analysis_sample = os.getenv('ANALYSIS_SAMPLE') +virtual_sample = 'C:/analysis-sample.exe' + +application = 'analyzer' + +def make_app(app): + if os.name == 'nt': + return app + ".exe" + + return app + +command = [ + os.path.join(os.getcwd(), make_app(application)), + '-c', + '-e', emulator_root, + '-p', virtual_sample, analysis_sample, + virtual_sample +] + +result = subprocess.run(command, cwd=os.getcwd()) + +exit(result.returncode) From d09b32eb5e707d64b537338adca0cd6a85af2598 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:45:18 +0200 Subject: [PATCH 021/184] Fix clang tidy warnings --- src/analyzer/tenet_tracer.cpp | 49 ++++++++++++++++++++++------------- src/analyzer/tenet_tracer.hpp | 3 --- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index 83ed2d97..2cc62a37 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -2,6 +2,26 @@ #include #include +namespace +{ + std::string format_hex(uint64_t value) + { + std::stringstream ss; + ss << "0x" << std::hex << value; + return ss.str(); + } + + std::string format_byte_array(const uint8_t* data, size_t size) + { + std::stringstream ss; + for (size_t i = 0; i < size; ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]); + } + return ss.str(); + } +} + TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) : m_win_emu(win_emu), m_log_file(log_filename) @@ -22,9 +42,13 @@ TenetTracer::~TenetTracer() { auto& emu = m_win_emu.emu(); if (m_read_hook) + { emu.delete_hook(m_read_hook); + } if (m_write_hook) + { emu.delete_hook(m_write_hook); + } // Filter and write the buffer when the program ends. filter_and_write_buffer(); @@ -93,9 +117,11 @@ void TenetTracer::filter_and_write_buffer() size_t rip_pos = line.find("rip=0x"); if (rip_pos == std::string::npos) + { continue; + } - char* end_ptr; + char* end_ptr = nullptr; uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); bool is_line_inside = exe_module->is_within(address); @@ -124,7 +150,9 @@ void TenetTracer::filter_and_write_buffer() for (const auto& pair : accumulated_changes) { if (!first) + { summary_line << ","; + } summary_line << pair.first << "=" << pair.second; first = false; } @@ -133,7 +161,9 @@ void TenetTracer::filter_and_write_buffer() if (!last_rip.empty()) { if (!first) + { summary_line << ","; + } summary_line << "rip=" << last_rip; } @@ -158,23 +188,6 @@ void TenetTracer::filter_and_write_buffer() m_raw_log_buffer.clear(); } -std::string TenetTracer::format_hex(uint64_t value) -{ - std::stringstream ss; - ss << "0x" << std::hex << value; - return ss.str(); -} - -std::string TenetTracer::format_byte_array(const uint8_t* data, size_t size) -{ - std::stringstream ss; - for (size_t i = 0; i < size; ++i) - { - ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(data[i]); - } - return ss.str(); -} - void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t size) { if (!m_mem_read_log.str().empty()) diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index 660a6a95..e3acd3aa 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -49,9 +49,6 @@ class TenetTracer void log_memory_read(uint64_t address, const void* data, size_t size); void log_memory_write(uint64_t address, const void* data, size_t size); - std::string format_hex(uint64_t value); - std::string format_byte_array(const uint8_t* data, size_t size); - windows_emulator& m_win_emu; std::ofstream m_log_file; From 3c05c7a607c2720adc6e82e72ce226f0775f97b6 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:53:07 +0200 Subject: [PATCH 022/184] Small fixes --- src/analyzer/tenet_tracer.cpp | 31 +++++++++++++++---------------- src/analyzer/tenet_tracer.hpp | 12 ++++-------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index 2cc62a37..e66ae1cd 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -1,4 +1,5 @@ #include "tenet_tracer.hpp" +#include "scoped_hook.hpp" #include #include @@ -32,24 +33,21 @@ TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filen } // Set up memory hooks. auto& emu = m_win_emu.emu(); - m_read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, - [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); }); - m_write_hook = emu.hook_memory_write( - 0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); }); + auto* read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_read(a, d, s); // + }); + + m_read_hook = scoped_hook(emu, read_hook); + + auto* write_hook = emu.hook_memory_write(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { + this->log_memory_write(a, d, s); // + }); + + m_write_hook = scoped_hook(emu, write_hook); } TenetTracer::~TenetTracer() { - auto& emu = m_win_emu.emu(); - if (m_read_hook) - { - emu.delete_hook(m_read_hook); - } - if (m_write_hook) - { - emu.delete_hook(m_write_hook); - } - // Filter and write the buffer when the program ends. filter_and_write_buffer(); @@ -94,15 +92,14 @@ void TenetTracer::filter_and_write_buffer() const auto* exe_module = m_win_emu.mod_manager.executable; if (!exe_module) { - // If there is no main module, write the raw data and exit. for (const auto& line : m_raw_log_buffer) { m_log_file << line << '\n'; } + return; } - // Always write the first line (initial registers). if (!m_raw_log_buffer.empty()) { m_log_file << m_raw_log_buffer.front() << '\n'; @@ -194,6 +191,7 @@ void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t siz { m_mem_read_log << ";"; } + m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } @@ -203,6 +201,7 @@ void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t si { m_mem_write_log << ";"; } + m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index e3acd3aa..1a0c0b9d 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -37,13 +38,8 @@ class TenetTracer TenetTracer(windows_emulator& win_emu, const std::string& log_filename); ~TenetTracer(); - // A new public method to call TenetTracer for each instruction. void process_instruction(uint64_t address); - // Disable copy and move operations. - TenetTracer(const TenetTracer&) = delete; - TenetTracer& operator=(const TenetTracer&) = delete; - private: void filter_and_write_buffer(); void log_memory_read(uint64_t address, const void* data, size_t size); @@ -64,6 +60,6 @@ class TenetTracer std::stringstream m_mem_write_log; // To manage memory hooks. - emulator_hook* m_read_hook = nullptr; - emulator_hook* m_write_hook = nullptr; -}; \ No newline at end of file + scoped_hook m_read_hook; + scoped_hook m_write_hook; +}; From 6e71e495bcb7746054770e9344a5677df48295ce Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 18:55:16 +0200 Subject: [PATCH 023/184] More fixes --- src/analyzer/tenet_tracer.cpp | 54 +++++++++++++++++------------------ src/analyzer/tenet_tracer.hpp | 5 ++++ 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index e66ae1cd..157e64c0 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -21,17 +21,41 @@ namespace } return ss.str(); } + + void parse_and_accumulate_changes(const std::string& line, std::map& changes) + { + size_t start = 0; + while (start < line.length()) + { + size_t end = line.find(',', start); + if (end == std::string::npos) + { + end = line.length(); + } + + std::string pair_str = line.substr(start, end - start); + size_t equals_pos = pair_str.find('='); + if (equals_pos != std::string::npos) + { + std::string key = pair_str.substr(0, equals_pos); + std::string value = pair_str.substr(equals_pos + 1); + changes[key] = value; + } + + start = end + 1; + } + } } TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) : m_win_emu(win_emu), m_log_file(log_filename) { - if (!m_log_file.is_open()) + if (!m_log_file) { throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename); } - // Set up memory hooks. + auto& emu = m_win_emu.emu(); auto* read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); // @@ -48,7 +72,6 @@ TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filen TenetTracer::~TenetTracer() { - // Filter and write the buffer when the program ends. filter_and_write_buffer(); if (m_log_file.is_open()) @@ -57,31 +80,6 @@ TenetTracer::~TenetTracer() } } -// Helper function: Parses a log line and adds register changes to the map. -static void parse_and_accumulate_changes(const std::string& line, std::map& changes) -{ - size_t start = 0; - while (start < line.length()) - { - size_t end = line.find(',', start); - if (end == std::string::npos) - { - end = line.length(); - } - - std::string pair_str = line.substr(start, end - start); - size_t equals_pos = pair_str.find('='); - if (equals_pos != std::string::npos) - { - std::string key = pair_str.substr(0, equals_pos); - std::string value = pair_str.substr(equals_pos + 1); - changes[key] = value; // Updates existing or adds a new one. - } - - start = end + 1; - } -} - void TenetTracer::filter_and_write_buffer() { if (m_raw_log_buffer.empty()) diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index 1a0c0b9d..f57700af 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -38,6 +38,11 @@ class TenetTracer TenetTracer(windows_emulator& win_emu, const std::string& log_filename); ~TenetTracer(); + TenetTracer(TenetTracer&) = delete; + TenetTracer(const TenetTracer&) = delete; + TenetTracer& operator=(TenetTracer&) = delete; + TenetTracer& operator=(const TenetTracer&) = delete; + void process_instruction(uint64_t address); private: From 4d4c04eb78b3b78980743b0644a171a33cebb208 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 19:42:59 +0200 Subject: [PATCH 024/184] Finish tenet tracer refactoring --- src/analyzer/main.cpp | 18 +-- src/analyzer/std_include.hpp | 3 +- src/analyzer/tenet_tracer.cpp | 201 +++++++++++++++++----------------- src/analyzer/tenet_tracer.hpp | 48 +++----- 4 files changed, 121 insertions(+), 149 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index fc89b074..9e1e4125 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -13,11 +13,6 @@ #include #include -#include - -#include -#include - #ifdef OS_EMSCRIPTEN #include #endif @@ -301,20 +296,11 @@ namespace win_emu->log.log("Using emulator: %s\n", win_emu->emu().get_name().c_str()); - // Enable TenetTracer and assign it to the context. - std::unique_ptr tenet_tracer; + std::optional tenet_tracer{}; if (options.tenet_trace) { win_emu->log.log("Tenet Tracer enabled. Output: tenet_trace.log\n"); - tenet_tracer = std::make_unique(*win_emu, "tenet_trace.log"); - - // Set up the hook to call the tracer for each instruction. - win_emu->emu().hook_memory_execution([&](uint64_t address) { - if (tenet_tracer) - { - tenet_tracer->process_instruction(address); - } - }); + tenet_tracer.emplace(*win_emu, "tenet_trace.log"); } register_analysis_callbacks(context); diff --git a/src/analyzer/std_include.hpp b/src/analyzer/std_include.hpp index 9719ff6b..52492b94 100644 --- a/src/analyzer/std_include.hpp +++ b/src/analyzer/std_include.hpp @@ -6,11 +6,11 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -23,6 +23,7 @@ #include #include +#include #include #include diff --git a/src/analyzer/tenet_tracer.cpp b/src/analyzer/tenet_tracer.cpp index 157e64c0..26d3c9b1 100644 --- a/src/analyzer/tenet_tracer.cpp +++ b/src/analyzer/tenet_tracer.cpp @@ -1,7 +1,8 @@ +#include "std_include.hpp" #include "tenet_tracer.hpp" -#include "scoped_hook.hpp" +#include + #include -#include namespace { @@ -47,68 +48,72 @@ namespace } } -TenetTracer::TenetTracer(windows_emulator& win_emu, const std::string& log_filename) - : m_win_emu(win_emu), - m_log_file(log_filename) +tenet_tracer::tenet_tracer(windows_emulator& win_emu, const std::filesystem::path& log_filename) + : win_emu_(win_emu), + log_file_(log_filename) { - if (!m_log_file) + if (!log_file_) { - throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename); + throw std::runtime_error("TenetTracer: Failed to open log file -> " + log_filename.string()); } - auto& emu = m_win_emu.emu(); + auto& emu = win_emu_.emu(); + auto* read_hook = emu.hook_memory_read(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_read(a, d, s); // }); - - m_read_hook = scoped_hook(emu, read_hook); + read_hook_ = scoped_hook(emu, read_hook); auto* write_hook = emu.hook_memory_write(0, 0xFFFFFFFFFFFFFFFF, [this](uint64_t a, const void* d, size_t s) { this->log_memory_write(a, d, s); // }); + write_hook_ = scoped_hook(emu, write_hook); - m_write_hook = scoped_hook(emu, write_hook); + auto* execute_hook = emu.hook_memory_execution([&](uint64_t address) { + this->process_instruction(address); // + }); + execute_hook_ = scoped_hook(emu, execute_hook); } -TenetTracer::~TenetTracer() +tenet_tracer::~tenet_tracer() { filter_and_write_buffer(); - if (m_log_file.is_open()) + if (log_file_.is_open()) { - m_log_file.close(); + log_file_.close(); } } -void TenetTracer::filter_and_write_buffer() +void tenet_tracer::filter_and_write_buffer() { - if (m_raw_log_buffer.empty()) + if (raw_log_buffer_.empty()) { return; } - const auto* exe_module = m_win_emu.mod_manager.executable; + const auto* exe_module = win_emu_.mod_manager.executable; if (!exe_module) { - for (const auto& line : m_raw_log_buffer) + for (const auto& line : raw_log_buffer_) { - m_log_file << line << '\n'; + log_file_ << line << '\n'; } return; } - if (!m_raw_log_buffer.empty()) + if (!raw_log_buffer_.empty()) { - m_log_file << m_raw_log_buffer.front() << '\n'; + log_file_ << raw_log_buffer_.front() << '\n'; } bool currently_outside = false; std::map accumulated_changes; - for (size_t i = 1; i < m_raw_log_buffer.size(); ++i) + for (size_t i = 1; i < raw_log_buffer_.size(); ++i) { - const auto& line = m_raw_log_buffer[i]; + const auto& line = raw_log_buffer_[i]; size_t rip_pos = line.find("rip=0x"); if (rip_pos == std::string::npos) @@ -120,92 +125,85 @@ void TenetTracer::filter_and_write_buffer() uint64_t address = std::strtoull(line.c_str() + rip_pos + 6, &end_ptr, 16); bool is_line_inside = exe_module->is_within(address); + const auto _1 = utils::finally([&] { + currently_outside = !is_line_inside; // + }); - if (is_line_inside) + if (!is_line_inside) { - // We are inside the main module. - if (currently_outside) - { - // JUST ENTERED FROM OUTSIDE (moment of return from API) - // 1. Create a synthetic log line from the accumulated changes. - if (!accumulated_changes.empty()) - { - std::stringstream summary_line; - bool first = true; - - // Separate rip from the map as it will be added at the end. - auto rip_it = accumulated_changes.find("rip"); - std::string last_rip; - if (rip_it != accumulated_changes.end()) - { - last_rip = rip_it->second; - accumulated_changes.erase(rip_it); - } - - for (const auto& pair : accumulated_changes) - { - if (!first) - { - summary_line << ","; - } - summary_line << pair.first << "=" << pair.second; - first = false; - } - - // Add the last known rip at the end. - if (!last_rip.empty()) - { - if (!first) - { - summary_line << ","; - } - summary_line << "rip=" << last_rip; - } - - m_log_file << summary_line.str() << '\n'; - } - accumulated_changes.clear(); - } - - // 2. Write the current line within the main module. - m_log_file << line << '\n'; - currently_outside = false; - } - else - { - // We are outside the main module. - // 1. Accumulate the changes. parse_and_accumulate_changes(line, accumulated_changes); - currently_outside = true; + continue; } + + const auto _2 = utils::finally([&] { + log_file_ << line << '\n'; // + }); + + if (!currently_outside || accumulated_changes.empty()) + { + continue; + } + + std::stringstream summary_line; + bool first = true; + + auto rip_it = accumulated_changes.find("rip"); + std::string last_rip; + if (rip_it != accumulated_changes.end()) + { + last_rip = rip_it->second; + accumulated_changes.erase(rip_it); + } + + for (const auto& pair : accumulated_changes) + { + if (!first) + { + summary_line << ","; + } + summary_line << pair.first << "=" << pair.second; + first = false; + } + + if (!last_rip.empty()) + { + if (!first) + { + summary_line << ","; + } + summary_line << "rip=" << last_rip; + } + + log_file_ << summary_line.str() << '\n'; + accumulated_changes.clear(); } - m_raw_log_buffer.clear(); + raw_log_buffer_.clear(); } -void TenetTracer::log_memory_read(uint64_t address, const void* data, size_t size) +void tenet_tracer::log_memory_read(uint64_t address, const void* data, size_t size) { - if (!m_mem_read_log.str().empty()) + if (!mem_read_log_.str().empty()) { - m_mem_read_log << ";"; + mem_read_log_ << ";"; } - m_mem_read_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); + mem_read_log_ << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } -void TenetTracer::log_memory_write(uint64_t address, const void* data, size_t size) +void tenet_tracer::log_memory_write(uint64_t address, const void* data, size_t size) { - if (!m_mem_write_log.str().empty()) + if (!mem_write_log_.str().empty()) { - m_mem_write_log << ";"; + mem_write_log_ << ";"; } - m_mem_write_log << format_hex(address) << ":" << format_byte_array(static_cast(data), size); + mem_write_log_ << format_hex(address) << ":" << format_byte_array(static_cast(data), size); } -void TenetTracer::process_instruction(uint64_t address) +void tenet_tracer::process_instruction(uint64_t address) { - auto& emu = m_win_emu.emu(); + auto& emu = win_emu_.emu(); std::stringstream trace_line; std::array current_regs; @@ -215,7 +213,7 @@ void TenetTracer::process_instruction(uint64_t address) } bool first_entry = true; - auto append_separator = [&]() { + auto append_separator = [&] { if (!first_entry) { trace_line << ","; @@ -223,20 +221,20 @@ void TenetTracer::process_instruction(uint64_t address) first_entry = false; }; - if (m_is_first_instruction) + if (is_first_instruction_) { for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) { append_separator(); trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); } - m_is_first_instruction = false; + is_first_instruction_ = false; } else { for (size_t i = 0; i < GPRs_TO_TRACE.size(); ++i) { - if (m_previous_regs[i] != current_regs[i]) + if (previous_registers_[i] != current_regs[i]) { append_separator(); trace_line << GPRs_TO_TRACE[i].second << "=" << format_hex(current_regs[i]); @@ -247,26 +245,25 @@ void TenetTracer::process_instruction(uint64_t address) append_separator(); trace_line << "rip=" << format_hex(address); - std::string mem_reads = m_mem_read_log.str(); + const auto mem_reads = mem_read_log_.str(); if (!mem_reads.empty()) { append_separator(); trace_line << "mr=" << mem_reads; } - std::string mem_writes = m_mem_write_log.str(); + + const auto mem_writes = mem_write_log_.str(); if (!mem_writes.empty()) { append_separator(); trace_line << "mw=" << mem_writes; } - // Add the data to the buffer instead of writing directly to the file. - m_raw_log_buffer.push_back(trace_line.str()); + raw_log_buffer_.push_back(trace_line.str()); + previous_registers_ = current_regs; - m_previous_regs = current_regs; - - m_mem_read_log.str(""); - m_mem_read_log.clear(); - m_mem_write_log.str(""); - m_mem_write_log.clear(); + mem_read_log_.str(""); + mem_read_log_.clear(); + mem_write_log_.str(""); + mem_write_log_.clear(); } \ No newline at end of file diff --git a/src/analyzer/tenet_tracer.hpp b/src/analyzer/tenet_tracer.hpp index f57700af..de0408f0 100644 --- a/src/analyzer/tenet_tracer.hpp +++ b/src/analyzer/tenet_tracer.hpp @@ -3,14 +3,7 @@ #include #include #include -#include -#include -#include -#include -#include -#include -// List of registers to trace for the x64 architecture. constexpr std::array, 16> GPRs_TO_TRACE = { { {x86_register::rax, "rax"}, @@ -32,39 +25,34 @@ constexpr std::array, 16> GPRs_TO_TRAC }, }; -class TenetTracer +class tenet_tracer { public: - TenetTracer(windows_emulator& win_emu, const std::string& log_filename); - ~TenetTracer(); + tenet_tracer(windows_emulator& win_emu, const std::filesystem::path& log_filename); + ~tenet_tracer(); - TenetTracer(TenetTracer&) = delete; - TenetTracer(const TenetTracer&) = delete; - TenetTracer& operator=(TenetTracer&) = delete; - TenetTracer& operator=(const TenetTracer&) = delete; - - void process_instruction(uint64_t address); + tenet_tracer(tenet_tracer&) = delete; + tenet_tracer(const tenet_tracer&) = delete; + tenet_tracer& operator=(tenet_tracer&) = delete; + tenet_tracer& operator=(const tenet_tracer&) = delete; private: void filter_and_write_buffer(); void log_memory_read(uint64_t address, const void* data, size_t size); void log_memory_write(uint64_t address, const void* data, size_t size); + void process_instruction(uint64_t address); - windows_emulator& m_win_emu; - std::ofstream m_log_file; + windows_emulator& win_emu_; + std::ofstream log_file_; - // In-memory buffering for performance. - std::vector m_raw_log_buffer; + std::vector raw_log_buffer_; + std::array previous_registers_{}; + bool is_first_instruction_ = true; - // Use an array instead of a map to store the register state of the previous instruction. - std::array m_previous_regs{}; - bool m_is_first_instruction = true; + std::stringstream mem_read_log_; + std::stringstream mem_write_log_; - // To temporarily store memory operations. - std::stringstream m_mem_read_log; - std::stringstream m_mem_write_log; - - // To manage memory hooks. - scoped_hook m_read_hook; - scoped_hook m_write_hook; + scoped_hook read_hook_; + scoped_hook write_hook_; + scoped_hook execute_hook_; }; From acc5dd9646747e541e8d62b8c84f945c11fe702f Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Thu, 17 Jul 2025 19:49:16 +0200 Subject: [PATCH 025/184] Fix compilation --- src/analyzer/std_include.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/analyzer/std_include.hpp b/src/analyzer/std_include.hpp index 52492b94..f88970da 100644 --- a/src/analyzer/std_include.hpp +++ b/src/analyzer/std_include.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include From 5e57360dc3cf08c50b84e56153e32f0f79c0f6d1 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Fri, 18 Jul 2025 06:59:50 +0200 Subject: [PATCH 026/184] Fix buffer overflow --- src/windows-emulator/logger.cpp | 42 +++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/windows-emulator/logger.cpp b/src/windows-emulator/logger.cpp index b8736daf..a1ffd387 100644 --- a/src/windows-emulator/logger.cpp +++ b/src/windows-emulator/logger.cpp @@ -74,29 +74,47 @@ namespace (void)fflush(stdout); } - std::string_view format(va_list* ap, const char* message) + int format_internal(const char* message, std::span buffer, va_list* ap) + { + return vsnprintf(buffer.data(), buffer.size(), message, *ap); + } + + std::string_view format(const char* message, std::string& reserve_buffer, va_list* ap1, va_list* ap2) { thread_local std::array buffer{}; -#ifdef _WIN32 - const int count = _vsnprintf_s(buffer.data(), buffer.size(), buffer.size(), message, *ap); -#else - const int count = vsnprintf(buffer.data(), buffer.size(), message, *ap); -#endif + auto count = format_internal(message, buffer, ap1); if (count < 0) { return {}; } - return {buffer.data(), static_cast(count)}; + if (static_cast(count) < buffer.size()) + { + return {buffer.data(), static_cast(count)}; + } + + reserve_buffer.resize(count + 1); + count = format_internal(message, reserve_buffer, ap2); + + if (count < 0) + { + return {}; + } + + return {reserve_buffer.data(), std::min(static_cast(count), reserve_buffer.size() - 1)}; } -#define format_to_string(msg, str) \ - va_list ap; \ - va_start(ap, msg); \ - const auto str = format(&ap, msg); \ - va_end(ap) +#define format_to_string(msg, str) \ + std::string buf{}; \ + va_list ap1; \ + va_list ap2; \ + va_start(ap1, msg); \ + va_start(ap2, msg); \ + const auto str = format(msg, buf, &ap1, &ap2); \ + va_end(ap2); \ + va_end(ap1) void print_colored(const std::string_view& line, const color_type base_color) { From 6eb4ef33fffbc01216db39ca71a242a5bafc8a50 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 20 Jul 2025 09:34:25 +0200 Subject: [PATCH 027/184] Handle invalid page protections This fixes #420 --- src/common/platform/status.hpp | 1 + src/samples/test-sample/test.cpp | 5 +++++ src/windows-emulator/memory_utils.hpp | 16 ++++++++++++++-- src/windows-emulator/syscalls/memory.cpp | 24 ++++++++++++++++-------- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/common/platform/status.hpp b/src/common/platform/status.hpp index 720f700c..583f258a 100644 --- a/src/common/platform/status.hpp +++ b/src/common/platform/status.hpp @@ -36,6 +36,7 @@ using NTSTATUS = std::uint32_t; #define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L) #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L) #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L) +#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS)0xC0000045L) #define STATUS_MUTANT_NOT_OWNED ((NTSTATUS)0xC0000046L) #define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS)0xC0000047L) #define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL) diff --git a/src/samples/test-sample/test.cpp b/src/samples/test-sample/test.cpp index fa2d844a..d7f86742 100644 --- a/src/samples/test-sample/test.cpp +++ b/src/samples/test-sample/test.cpp @@ -792,6 +792,11 @@ namespace bool test_apis() { + if (VirtualProtect(nullptr, 0, 0, nullptr)) + { + return false; + } + wchar_t buffer[0x100]; DWORD size = sizeof(buffer) / 2; return GetComputerNameExW(ComputerNameNetBIOS, buffer, &size); diff --git a/src/windows-emulator/memory_utils.hpp b/src/windows-emulator/memory_utils.hpp index e50b0098..5c490223 100644 --- a/src/windows-emulator/memory_utils.hpp +++ b/src/windows-emulator/memory_utils.hpp @@ -20,7 +20,7 @@ inline std::string get_permission_string(const memory_permission permission) return res; } -inline nt_memory_permission map_nt_to_emulator_protection(uint32_t nt_protection) +inline std::optional try_map_nt_to_emulator_protection(uint32_t nt_protection) { memory_permission_ext ext = memory_permission_ext::none; // TODO: Check for invalid combinations @@ -51,14 +51,26 @@ inline nt_memory_permission map_nt_to_emulator_protection(uint32_t nt_protection case PAGE_EXECUTE_READWRITE: common = memory_permission::all; break; + case 0: case PAGE_EXECUTE_WRITECOPY: default: - throw std::runtime_error("Failed to map protection"); + return std::nullopt; } return nt_memory_permission{common, ext}; } +inline nt_memory_permission map_nt_to_emulator_protection(uint32_t nt_protection) +{ + const auto protection = try_map_nt_to_emulator_protection(nt_protection); + if (protection.has_value()) + { + return *protection; + } + + throw std::runtime_error("Failed to map protection: " + std::to_string(nt_protection)); +} + inline uint32_t map_emulator_to_nt_protection(const memory_permission permission) { const bool has_exec = (permission & memory_permission::exec) != memory_permission::none; diff --git a/src/windows-emulator/syscalls/memory.cpp b/src/windows-emulator/syscalls/memory.cpp index 0f08c057..42ca451b 100644 --- a/src/windows-emulator/syscalls/memory.cpp +++ b/src/windows-emulator/syscalls/memory.cpp @@ -144,15 +144,19 @@ namespace syscalls base_address.write(aligned_start); bytes_to_protect.write(static_cast(aligned_length)); - const auto requested_protection = map_nt_to_emulator_protection(protection); + const auto requested_protection = try_map_nt_to_emulator_protection(protection); + if (!requested_protection.has_value()) + { + return STATUS_INVALID_PAGE_PROTECTION; + } - c.win_emu.callbacks.on_memory_protect(aligned_start, aligned_length, requested_protection); + c.win_emu.callbacks.on_memory_protect(aligned_start, aligned_length, *requested_protection); nt_memory_permission old_protection_value{}; try { - c.win_emu.memory.protect_memory(aligned_start, static_cast(aligned_length), requested_protection, + c.win_emu.memory.protect_memory(aligned_start, static_cast(aligned_length), *requested_protection, &old_protection_value); } catch (...) @@ -180,7 +184,11 @@ namespace syscalls allocation_bytes = page_align_up(allocation_bytes); bytes_to_allocate.write(allocation_bytes); - const auto protection = map_nt_to_emulator_protection(page_protection); + const auto protection = try_map_nt_to_emulator_protection(page_protection); + if (!protection.has_value()) + { + return STATUS_INVALID_PAGE_PROTECTION; + } auto potential_base = base_address.read(); if (!potential_base) @@ -204,15 +212,15 @@ namespace syscalls } if (commit && !reserve && - c.win_emu.memory.commit_memory(potential_base, static_cast(allocation_bytes), protection)) + c.win_emu.memory.commit_memory(potential_base, static_cast(allocation_bytes), *protection)) { - c.win_emu.callbacks.on_memory_allocate(potential_base, allocation_bytes, protection, true); + c.win_emu.callbacks.on_memory_allocate(potential_base, allocation_bytes, *protection, true); return STATUS_SUCCESS; } - c.win_emu.callbacks.on_memory_allocate(potential_base, allocation_bytes, protection, false); + c.win_emu.callbacks.on_memory_allocate(potential_base, allocation_bytes, *protection, false); - return c.win_emu.memory.allocate_memory(potential_base, static_cast(allocation_bytes), protection, + return c.win_emu.memory.allocate_memory(potential_base, static_cast(allocation_bytes), *protection, !commit) ? STATUS_SUCCESS : STATUS_MEMORY_NOT_ALLOCATED; From b7333b403d2238658a83c1ca7ca64ac14bbe8f39 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 20 Jul 2025 16:15:02 +0200 Subject: [PATCH 028/184] Prepare support for sharing files --- page/src/App.tsx | 11 +++- page/src/download.ts | 86 +++++++++++++++++++++++++++++ page/src/filesystem.ts | 80 +++++++++------------------ page/src/playground.tsx | 119 +++++++++++++++++++++++++++++++--------- 4 files changed, 216 insertions(+), 80 deletions(-) create mode 100644 page/src/download.ts diff --git a/page/src/App.tsx b/page/src/App.tsx index ce332ae1..d9a4510a 100644 --- a/page/src/App.tsx +++ b/page/src/App.tsx @@ -1,9 +1,11 @@ import { ThemeProvider } from "@/components/theme-provider"; import { TooltipProvider } from "@/components/ui/tooltip"; import { HashRouter, Route, Routes, Navigate } from "react-router-dom"; -import { Playground } from "./playground"; +import { Playground, PlaygroundFile, storeEmulateData } from "./playground"; import { LandingPage } from "./landing-page"; +import { useParams } from "react-router-dom"; + import "@fontsource/inter/100.css"; import "@fontsource/inter/200.css"; import "@fontsource/inter/300.css"; @@ -16,6 +18,12 @@ import "@fontsource/inter/900.css"; import "./App.css"; +function EmulateFile() { + const { encodedData } = useParams(); + storeEmulateData(encodedData); + return ; +} + function App() { return ( @@ -25,6 +33,7 @@ function App() { } /> } /> } /> + } /> diff --git a/page/src/download.ts b/page/src/download.ts new file mode 100644 index 00000000..f2df1b45 --- /dev/null +++ b/page/src/download.ts @@ -0,0 +1,86 @@ +export type DownloadProgressHandler = ( + receivedBytes: number, + totalBytes: number, +) => void; + +export type DownloadPercentHandler = (percent: number) => void; + +export function makePercentHandler( + handler: DownloadPercentHandler, +): DownloadProgressHandler { + const progress = { + tracked: 0, + }; + + return (current, total) => { + if (total == 0) { + return; + } + + const percent = Math.floor((current * 100) / total); + const sanePercent = Math.max(Math.min(percent, 100), 0); + + if (sanePercent + 1 > progress.tracked) { + progress.tracked = sanePercent + 1; + handler(sanePercent); + } + }; +} + +export function downloadBinaryFile( + file: string, + progressCallback: DownloadProgressHandler, +) { + return fetch(file, { + method: "GET", + headers: { + "Content-Type": "application/octet-stream", + }, + }).then((response) => { + const maybeReader = response.body?.getReader(); + if (!maybeReader) { + throw new Error("Bad reader"); + } + + const reader = maybeReader; + + const contentLength = parseInt( + response.headers?.get("Content-Length") || "0", + ); + + let receivedLength = 0; + let chunks: Uint8Array[] = []; + + function processData( + res: ReadableStreamReadResult>, + ): Promise { + if (res.value) { + chunks.push(res.value); + receivedLength += res.value.length; + } + + progressCallback(receivedLength, contentLength); + + if (!res.done) { + return reader.read().then(processData); + } + const chunksAll = new Uint8Array(receivedLength); + let position = 0; + for (const chunk of chunks) { + chunksAll.set(new Uint8Array(chunk), position); + position += chunk.length; + } + + return Promise.resolve(chunksAll.buffer); + } + + return reader.read().then(processData); + }); +} + +export function downloadBinaryFilePercent( + file: string, + progressCallback: DownloadPercentHandler, +) { + return downloadBinaryFile(file, makePercentHandler(progressCallback)); +} diff --git a/page/src/filesystem.ts b/page/src/filesystem.ts index 1a7e4390..70fef39d 100644 --- a/page/src/filesystem.ts +++ b/page/src/filesystem.ts @@ -1,62 +1,14 @@ +import { downloadBinaryFilePercent, DownloadPercentHandler } from "./download"; import { parseZipFile, ProgressHandler } from "./zip-file"; import idbfsModule, { MainModule } from "@irori/idbfs"; -type DownloadProgressHandler = ( - receivedBytes: number, - totalBytes: number, -) => void; - -function fetchFilesystemZip(progressCallback: DownloadProgressHandler) { - return fetch("./root.zip", { - method: "GET", - headers: { - "Content-Type": "application/octet-stream", - }, - }).then((response) => { - const maybeReader = response.body?.getReader(); - if (!maybeReader) { - throw new Error("Bad reader"); - } - - const reader = maybeReader; - - const contentLength = parseInt( - response.headers?.get("Content-Length") || "0", - ); - - let receivedLength = 0; - let chunks: Uint8Array[] = []; - - function processData( - res: ReadableStreamReadResult>, - ): Promise { - if (res.value) { - chunks.push(res.value); - receivedLength += res.value.length; - } - - progressCallback(receivedLength, contentLength); - - if (!res.done) { - return reader.read().then(processData); - } - const chunksAll = new Uint8Array(receivedLength); - let position = 0; - for (const chunk of chunks) { - chunksAll.set(new Uint8Array(chunk), position); - position += chunk.length; - } - - return Promise.resolve(chunksAll.buffer); - } - - return reader.read().then(processData); - }); +function fetchFilesystemZip(progressCallback: DownloadPercentHandler) { + return downloadBinaryFilePercent("./root.zip", progressCallback); } async function fetchFilesystem( progressHandler: ProgressHandler, - downloadProgressHandler: DownloadProgressHandler, + downloadProgressHandler: DownloadPercentHandler, ) { const filesys = await fetchFilesystemZip(downloadProgressHandler); return await parseZipFile(filesys, progressHandler); @@ -74,6 +26,28 @@ function synchronizeIDBFS(idbfs: MainModule, populate: boolean) { }); } +const filesystemPrefix = "/root/filesys/"; + +export function internalToWindowsPath(internalPath: string): string { + if ( + !internalPath.startsWith(filesystemPrefix) || + internalPath.length <= filesystemPrefix.length + ) { + throw new Error("Invalid path"); + } + + const winPath = internalPath.substring(filesystemPrefix.length); + return `${winPath[0]}:${winPath.substring(1)}`; +} + +export function windowsToInternalPath(windowsPath: string): string { + if (windowsPath.length < 2 || windowsPath[1] != ":") { + throw new Error("Invalid path"); + } + + return `${filesystemPrefix}${windowsPath[0]}${windowsPath.substring(2)}`; +} + async function initializeIDBFS() { const idbfs = await idbfsModule(); @@ -210,7 +184,7 @@ export class Filesystem { export async function setupFilesystem( progressHandler: ProgressHandler, - downloadProgressHandler: DownloadProgressHandler, + downloadProgressHandler: DownloadPercentHandler, ) { const idbfs = await initializeIDBFS(); const fs = new Filesystem(idbfs); diff --git a/page/src/playground.tsx b/page/src/playground.tsx index 89f19db1..40bec190 100644 --- a/page/src/playground.tsx +++ b/page/src/playground.tsx @@ -3,7 +3,11 @@ import React from "react"; import { Output } from "@/components/output"; import { Emulator, EmulationState, isFinalState } from "./emulator"; -import { Filesystem, setupFilesystem } from "./filesystem"; +import { + Filesystem, + setupFilesystem, + windowsToInternalPath, +} from "./filesystem"; import { memory64 } from "wasm-feature-detect"; @@ -39,11 +43,17 @@ import { } from "@/components/ui/drawer"; import { FilesystemExplorer } from "./filesystem-explorer"; import { EmulationStatus } from "./emulator"; -import { TextTooltip } from "./components/text-tooltip"; import { EmulationSummary } from "./components/emulation-summary"; +import { downloadBinaryFilePercent } from "./download"; -interface PlaygroundProps {} -interface PlaygroundState { +export interface PlaygroundFile { + file: string; + storage: string; +} + +export interface PlaygroundProps {} + +export interface PlaygroundState { settings: Settings; filesystemPromise?: Promise; filesystem?: Filesystem; @@ -52,28 +62,57 @@ interface PlaygroundState { application?: string; drawerOpen: boolean; allowWasm64: boolean; + file?: PlaygroundFile; } -function makePercentHandler( - handler: (percent: number) => void, -): (current: number, total: number) => void { - const progress = { - tracked: 0, - }; +function decodeFileData(data: string | null): PlaygroundFile | undefined { + if (!data) { + return undefined; + } - return (current, total) => { - if (total == 0) { - return; - } + try { + const jsonData = JSON.parse(atob(data)); - const percent = Math.floor((current * 100) / total); - const sanePercent = Math.max(Math.min(percent, 100), 0); + return { + file: jsonData.file, + storage: jsonData.storage, + }; + } catch (e) { + console.log(e); + } - if (sanePercent + 1 > progress.tracked) { - progress.tracked = sanePercent + 1; - handler(sanePercent); - } - }; + return undefined; +} + +interface GlobalThisExt { + emulateCache?: string | null; +} + +function getGlobalThis() { + return globalThis as GlobalThisExt; +} + +export function storeEmulateData(data?: string) { + getGlobalThis().emulateCache = undefined; + + if (data) { + localStorage.setItem("emulate", data); + } else { + localStorage.removeItem("emulate"); + } +} + +function getEmulateData() { + const gt = getGlobalThis(); + if (gt.emulateCache) { + return gt.emulateCache; + } + + const emulateData = localStorage.getItem("emulate"); + localStorage.removeItem("emulate"); + + gt.emulateCache = emulateData; + return emulateData; } export class Playground extends React.Component< @@ -90,13 +129,14 @@ export class Playground extends React.Component< this.start = this.start.bind(this); this.resetFilesys = this.resetFilesys.bind(this); - this.createEmulator = this.createEmulator.bind(this); + this.startEmulator = this.startEmulator.bind(this); this.toggleEmulatorState = this.toggleEmulatorState.bind(this); this.state = { settings: loadSettings(), drawerOpen: false, allowWasm64: false, + file: decodeFileData(getEmulateData()), }; } @@ -104,6 +144,10 @@ export class Playground extends React.Component< memory64().then((allowWasm64) => { this.setState({ allowWasm64 }); }); + + if (this.state.file) { + this.emulateRemoteFile(this.state.file); + } } async resetFilesys() { @@ -151,9 +195,9 @@ export class Playground extends React.Component< (current, total, file) => { this.logLine(`Processing filesystem (${current}/${total}): ${file}`); }, - makePercentHandler((percent) => { + (percent) => { this.logLine(`Downloading filesystem: ${percent}%`); - }), + }, ).then(resolve); }); @@ -167,6 +211,29 @@ export class Playground extends React.Component< this.setState({ drawerOpen }); } + async downloadFileToFilesystem(file: PlaygroundFile) { + const fs = await this.initFilesys(); + + const fileData = await downloadBinaryFilePercent( + file.storage, + (percent) => { + this.logLine(`Downloading binary: ${percent}%`); + }, + ); + + await fs.storeFiles([ + { + name: windowsToInternalPath(file.file), + data: fileData, + }, + ]); + } + + async emulateRemoteFile(file: PlaygroundFile) { + await this.downloadFileToFilesystem(file); + await this.startEmulator(file.file); + } + async start() { await this.initFilesys(); this.setDrawerOpen(true); @@ -195,7 +262,7 @@ export class Playground extends React.Component< } } - async createEmulator(userFile: string) { + async startEmulator(userFile: string) { this.state.emulator?.stop(); this.output.current?.clear(); @@ -316,7 +383,7 @@ export class Playground extends React.Component< From e66ac563288729950b6338f5dcd58f0551364879 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 05:57:51 +0000 Subject: [PATCH 029/184] Build(deps): Bump deps/googletest from `3983f67` to `32f9f4c` Bumps [deps/googletest](https://github.com/google/googletest) from `3983f67` to `32f9f4c`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/3983f67e32fb3e9294487b9d4f9586efa6e5d088...32f9f4c82afa4249af66b55278df15c16b3031ea) --- updated-dependencies: - dependency-name: deps/googletest dependency-version: 32f9f4c82afa4249af66b55278df15c16b3031ea dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/googletest b/deps/googletest index 3983f67e..32f9f4c8 160000 --- a/deps/googletest +++ b/deps/googletest @@ -1 +1 @@ -Subproject commit 3983f67e32fb3e9294487b9d4f9586efa6e5d088 +Subproject commit 32f9f4c82afa4249af66b55278df15c16b3031ea From f60526fa20e1f51fe1d50f9d815ca9a6e0fe0511 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 05:57:53 +0000 Subject: [PATCH 030/184] Build(deps): Bump deps/gtest-parallel from `96f4f90` to `cd488bd` Bumps [deps/gtest-parallel](https://github.com/google/gtest-parallel) from `96f4f90` to `cd488bd`. - [Commits](https://github.com/google/gtest-parallel/compare/96f4f904922f9bf66689e749c40f314845baaac8...cd488bdedc1d2cffb98201a17afc1b298b0b90f1) --- updated-dependencies: - dependency-name: deps/gtest-parallel dependency-version: cd488bdedc1d2cffb98201a17afc1b298b0b90f1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/gtest-parallel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/gtest-parallel b/deps/gtest-parallel index 96f4f904..cd488bde 160000 --- a/deps/gtest-parallel +++ b/deps/gtest-parallel @@ -1 +1 @@ -Subproject commit 96f4f904922f9bf66689e749c40f314845baaac8 +Subproject commit cd488bdedc1d2cffb98201a17afc1b298b0b90f1 From 5417481e9ae9e98afcb6345376305fae3f0afb17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 05:57:55 +0000 Subject: [PATCH 031/184] Build(deps): Bump deps/flatbuffers from `64e5252` to `c526cb6` Bumps [deps/flatbuffers](https://github.com/google/flatbuffers) from `64e5252` to `c526cb6`. - [Release notes](https://github.com/google/flatbuffers/releases) - [Commits](https://github.com/google/flatbuffers/compare/64e5252b4ef333c9e367378619151406435c9612...c526cb640b49c5c3a58298de93b8225efcce9047) --- updated-dependencies: - dependency-name: deps/flatbuffers dependency-version: c526cb640b49c5c3a58298de93b8225efcce9047 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/flatbuffers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/flatbuffers b/deps/flatbuffers index 64e5252b..c526cb64 160000 --- a/deps/flatbuffers +++ b/deps/flatbuffers @@ -1 +1 @@ -Subproject commit 64e5252b4ef333c9e367378619151406435c9612 +Subproject commit c526cb640b49c5c3a58298de93b8225efcce9047 From 760f29bcc13a805138a955edb01c78ab34acbce3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 05:58:18 +0000 Subject: [PATCH 032/184] Build(deps): Bump @modelcontextprotocol/sdk in /mcp Bumps [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) from 1.13.3 to 1.17.0. - [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases) - [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/1.13.3...1.17.0) --- updated-dependencies: - dependency-name: "@modelcontextprotocol/sdk" dependency-version: 1.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- mcp/package-lock.json | 9 +++++---- mcp/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mcp/package-lock.json b/mcp/package-lock.json index e4385e16..c79be0e2 100644 --- a/mcp/package-lock.json +++ b/mcp/package-lock.json @@ -9,13 +9,14 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.13.3" + "@modelcontextprotocol/sdk": "^1.17.0" } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.13.3.tgz", - "integrity": "sha512-bGwA78F/U5G2jrnsdRkPY3IwIwZeWUEfb5o764b79lb0rJmMT76TLwKhdNZOWakOQtedYefwIR4emisEMvInKA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.0.tgz", + "integrity": "sha512-qFfbWFA7r1Sd8D697L7GkTd36yqDuTkvz0KfOGkgXR8EUhQn3/EDNIR/qUdQNMT8IjmasBvHWuXeisxtXTQT2g==", + "license": "MIT", "dependencies": { "ajv": "^6.12.6", "content-type": "^1.0.5", diff --git a/mcp/package.json b/mcp/package.json index 3aa407be..0c7955b3 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -9,7 +9,7 @@ "dev": "node --watch server.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.13.3" + "@modelcontextprotocol/sdk": "^1.17.0" }, "keywords": ["mcp", "server"], "author": "", From d7fd3b59fa532bb3419ef108ded1523c1440578e Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Mon, 28 Jul 2025 19:00:39 +0200 Subject: [PATCH 033/184] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index cf332ddb..f59a72b3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ -

- Sogen +
From a5011dcaeb7f4e566d2c0bb3130b4fdae6d49539 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Mon, 28 Jul 2025 19:17:13 +0200 Subject: [PATCH 034/184] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f59a72b3..0b1a6bc2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +
From a066f8f25235d10965584bd9056d90e6ab7e7a5e Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Mon, 28 Jul 2025 19:28:34 +0200 Subject: [PATCH 035/184] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b1a6bc2..5edcb1d6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +
From 49150a35ef06d290d07488db1da0283a79ce0df9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:50:42 +0000 Subject: [PATCH 036/184] Build(deps): Bump deps/flatbuffers from `c526cb6` to `518bf42` Bumps [deps/flatbuffers](https://github.com/google/flatbuffers) from `c526cb6` to `518bf42`. - [Release notes](https://github.com/google/flatbuffers/releases) - [Commits](https://github.com/google/flatbuffers/compare/c526cb640b49c5c3a58298de93b8225efcce9047...518bf42df82da02b77696027215bda91edbd4102) --- updated-dependencies: - dependency-name: deps/flatbuffers dependency-version: 518bf42df82da02b77696027215bda91edbd4102 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/flatbuffers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/flatbuffers b/deps/flatbuffers index c526cb64..518bf42d 160000 --- a/deps/flatbuffers +++ b/deps/flatbuffers @@ -1 +1 @@ -Subproject commit c526cb640b49c5c3a58298de93b8225efcce9047 +Subproject commit 518bf42df82da02b77696027215bda91edbd4102 From 3a9d83cf775fea059ae48b32aca214915a380103 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:50:44 +0000 Subject: [PATCH 037/184] Build(deps): Bump deps/googletest from `32f9f4c` to `373af2e` Bumps [deps/googletest](https://github.com/google/googletest) from `32f9f4c` to `373af2e`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/32f9f4c82afa4249af66b55278df15c16b3031ea...373af2e3df71599b87a40ce0e37164523849166b) --- updated-dependencies: - dependency-name: deps/googletest dependency-version: 373af2e3df71599b87a40ce0e37164523849166b dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/googletest b/deps/googletest index 32f9f4c8..373af2e3 160000 --- a/deps/googletest +++ b/deps/googletest @@ -1 +1 @@ -Subproject commit 32f9f4c82afa4249af66b55278df15c16b3031ea +Subproject commit 373af2e3df71599b87a40ce0e37164523849166b From b656a881aea16fb515dccd0a93835da5ab2fd511 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:50:48 +0000 Subject: [PATCH 038/184] Build(deps): Bump lucide-react from 0.525.0 to 0.536.0 in /page Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.525.0 to 0.536.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.536.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-version: 0.536.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 9 +++++---- page/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..a926b8a7 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -27,7 +27,7 @@ "clsx": "^2.1.1", "flatbuffers": "^25.2.10", "jszip": "^3.10.1", - "lucide-react": "^0.525.0", + "lucide-react": "^0.536.0", "pe-library": "^1.0.1", "react": "^19.0.0", "react-bootstrap-icons": "^1.11.6", @@ -4775,9 +4775,10 @@ } }, "node_modules/lucide-react": { - "version": "0.525.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", - "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", + "version": "0.536.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.536.0.tgz", + "integrity": "sha512-2PgvNa9v+qz4Jt/ni8vPLt4jwoFybXHuubQT8fv4iCW5TjDxkbZjNZZHa485ad73NSEn/jdsEtU57eE1g+ma8A==", + "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } diff --git a/page/package.json b/page/package.json index 833f6ed9..8bc8974c 100644 --- a/page/package.json +++ b/page/package.json @@ -29,7 +29,7 @@ "clsx": "^2.1.1", "flatbuffers": "^25.2.10", "jszip": "^3.10.1", - "lucide-react": "^0.525.0", + "lucide-react": "^0.536.0", "pe-library": "^1.0.1", "react": "^19.0.0", "react-bootstrap-icons": "^1.11.6", From 7c848924ff61c1a86a8fe910da6cac027ac206a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:50:55 +0000 Subject: [PATCH 039/184] Build(deps): Bump tw-animate-css from 1.3.4 to 1.3.6 in /page Bumps [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) from 1.3.4 to 1.3.6. - [Release notes](https://github.com/Wombosvideo/tw-animate-css/releases) - [Commits](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.4...v1.3.6) --- updated-dependencies: - dependency-name: tw-animate-css dependency-version: 1.3.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 8 ++++---- page/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..b990ee14 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -39,7 +39,7 @@ "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", - "tw-animate-css": "^1.3.4", + "tw-animate-css": "^1.3.6", "vaul": "^1.1.2", "wasm-feature-detect": "^1.8.0" }, @@ -5678,9 +5678,9 @@ "license": "0BSD" }, "node_modules/tw-animate-css": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.4.tgz", - "integrity": "sha512-dd1Ht6/YQHcNbq0znIT6dG8uhO7Ce+VIIhZUhjsryXsMPJQz3bZg7Q2eNzLwipb25bRZslGb2myio5mScd1TFg==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.6.tgz", + "integrity": "sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Wombosvideo" diff --git a/page/package.json b/page/package.json index 833f6ed9..effc22f3 100644 --- a/page/package.json +++ b/page/package.json @@ -41,7 +41,7 @@ "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", - "tw-animate-css": "^1.3.4", + "tw-animate-css": "^1.3.6", "vaul": "^1.1.2", "wasm-feature-detect": "^1.8.0" }, From b6e8d09b5de2bb25b4259382799fd578dada8dbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:51:26 +0000 Subject: [PATCH 040/184] Build(deps-dev): Bump typescript-eslint from 8.35.1 to 8.38.0 in /page Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.35.1 to 8.38.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.38.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.38.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 159 +++++++++++++++++++++++++---------------- page/package.json | 2 +- 2 files changed, 98 insertions(+), 63 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..53362fe9 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -56,7 +56,7 @@ "globals": "^16.3.0", "prettier": "3.6.2", "typescript": "~5.8.3", - "typescript-eslint": "^8.35.1", + "typescript-eslint": "^8.38.0", "vite": "^7.0.0" } }, @@ -1211,6 +1211,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1224,6 +1225,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -1233,6 +1235,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3177,16 +3180,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", - "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/type-utils": "8.35.1", - "@typescript-eslint/utils": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3200,7 +3204,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.35.1", + "@typescript-eslint/parser": "^8.38.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -3210,20 +3214,22 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", - "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4" }, "engines": { @@ -3239,13 +3245,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", - "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", "debug": "^4.3.4" }, "engines": { @@ -3260,13 +3267,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", - "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1" + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3277,10 +3285,11 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", - "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3293,13 +3302,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", - "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3316,10 +3327,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3329,15 +3341,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3361,6 +3374,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -3370,6 +3384,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3385,6 +3400,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3393,15 +3409,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", - "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1" + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3416,12 +3433,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/types": "8.38.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -3559,6 +3577,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4064,6 +4083,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4080,6 +4100,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4106,6 +4127,7 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -4140,6 +4162,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4258,7 +4281,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", @@ -4364,6 +4388,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4801,6 +4826,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -4810,6 +4836,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5025,6 +5052,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5129,7 +5157,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react": { "version": "19.1.0", @@ -5394,6 +5423,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5457,6 +5487,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -5652,6 +5683,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5664,6 +5696,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.12" }, @@ -5714,14 +5747,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", - "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", - "@typescript-eslint/utils": "8.35.1" + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/page/package.json b/page/package.json index 833f6ed9..c37d2805 100644 --- a/page/package.json +++ b/page/package.json @@ -58,7 +58,7 @@ "globals": "^16.3.0", "prettier": "3.6.2", "typescript": "~5.8.3", - "typescript-eslint": "^8.35.1", + "typescript-eslint": "^8.38.0", "vite": "^7.0.0" } } From 97f280ca55a70bf24252730366a21d0b63a0a8ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:51:38 +0000 Subject: [PATCH 041/184] Build(deps-dev): Bump eslint from 9.30.0 to 9.32.0 in /page Bumps [eslint](https://github.com/eslint/eslint) from 9.30.0 to 9.32.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.30.0...v9.32.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.32.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 36 +++++++++++++++++++----------------- page/package.json | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..71a966a5 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -50,7 +50,7 @@ "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.6.0", - "eslint": "^9.30.0", + "eslint": "^9.32.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", @@ -944,9 +944,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -994,10 +994,11 @@ } }, "node_modules/@eslint/js": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.0.tgz", - "integrity": "sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1015,13 +1016,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.1", "levn": "^0.4.1" }, "engines": { @@ -3868,19 +3869,20 @@ } }, "node_modules/eslint": { - "version": "9.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.0.tgz", - "integrity": "sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.30.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", diff --git a/page/package.json b/page/package.json index 833f6ed9..13412175 100644 --- a/page/package.json +++ b/page/package.json @@ -52,7 +52,7 @@ "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.6.0", - "eslint": "^9.30.0", + "eslint": "^9.32.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", From c8373f06ee50c531010acb40e66bfc106ca8aefc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:51:45 +0000 Subject: [PATCH 042/184] Build(deps-dev): Bump @types/node from 24.0.8 to 24.1.0 in /page Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.0.8 to 24.1.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 24.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 9 +++++---- page/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..a5ed5969 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@eslint/js": "^9.30.0", - "@types/node": "^24.0.8", + "@types/node": "^24.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", @@ -3130,10 +3130,11 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.8.tgz", - "integrity": "sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==", + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", "devOptional": true, + "license": "MIT", "dependencies": { "undici-types": "~7.8.0" } diff --git a/page/package.json b/page/package.json index 833f6ed9..83b5fab0 100644 --- a/page/package.json +++ b/page/package.json @@ -47,7 +47,7 @@ }, "devDependencies": { "@eslint/js": "^9.30.0", - "@types/node": "^24.0.8", + "@types/node": "^24.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", From dfa0f952215bcda784aa81f911e6982741af5211 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:51:54 +0000 Subject: [PATCH 043/184] Build(deps): Bump react-router-dom from 7.6.3 to 7.7.1 in /page Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.6.3 to 7.7.1. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.7.1/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-version: 7.7.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 22 +++++++++++++--------- page/package.json | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 0fff5aa2..e4c90677 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -35,7 +35,7 @@ "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.3", - "react-router-dom": "^7.6.3", + "react-router-dom": "^7.7.1", "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", @@ -3714,6 +3714,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", "engines": { "node": ">=18" } @@ -5284,9 +5285,10 @@ } }, "node_modules/react-router": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.3.tgz", - "integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.7.1.tgz", + "integrity": "sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==", + "license": "MIT", "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" @@ -5305,11 +5307,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.3.tgz", - "integrity": "sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.7.1.tgz", + "integrity": "sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==", + "license": "MIT", "dependencies": { - "react-router": "7.6.3" + "react-router": "7.7.1" }, "engines": { "node": ">=20.0.0" @@ -5486,7 +5489,8 @@ "node_modules/set-cookie-parser": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" }, "node_modules/setimmediate": { "version": "1.0.5", diff --git a/page/package.json b/page/package.json index 833f6ed9..4d981233 100644 --- a/page/package.json +++ b/page/package.json @@ -37,7 +37,7 @@ "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.3", - "react-router-dom": "^7.6.3", + "react-router-dom": "^7.7.1", "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", From 1d5ca92984a02f761425782bbf8e71c38e3dd5df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:47:13 +0000 Subject: [PATCH 044/184] Build(deps): Bump @modelcontextprotocol/sdk in /mcp Bumps [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) from 1.17.0 to 1.17.1. - [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases) - [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/1.17.0...1.17.1) --- updated-dependencies: - dependency-name: "@modelcontextprotocol/sdk" dependency-version: 1.17.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- mcp/package-lock.json | 8 ++++---- mcp/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mcp/package-lock.json b/mcp/package-lock.json index c79be0e2..69c151bc 100644 --- a/mcp/package-lock.json +++ b/mcp/package-lock.json @@ -9,13 +9,13 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.17.0" + "@modelcontextprotocol/sdk": "^1.17.1" } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.0.tgz", - "integrity": "sha512-qFfbWFA7r1Sd8D697L7GkTd36yqDuTkvz0KfOGkgXR8EUhQn3/EDNIR/qUdQNMT8IjmasBvHWuXeisxtXTQT2g==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.1.tgz", + "integrity": "sha512-CPle1OQehbWqd25La9Ack5B07StKIxh4+Bf19qnpZKJC1oI22Y0czZHbifjw1UoczIfKBwBDAp/dFxvHG13B5A==", "license": "MIT", "dependencies": { "ajv": "^6.12.6", diff --git a/mcp/package.json b/mcp/package.json index 0c7955b3..815e22e0 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -9,7 +9,7 @@ "dev": "node --watch server.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.17.0" + "@modelcontextprotocol/sdk": "^1.17.1" }, "keywords": ["mcp", "server"], "author": "", From c21d8eaaa02e864f6ee8a3c85e5cb175de687abc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Aug 2025 08:35:32 +0000 Subject: [PATCH 045/184] Build(deps): Bump react-resizable-panels from 3.0.3 to 3.0.4 in /page Bumps [react-resizable-panels](https://github.com/bvaughn/react-resizable-panels) from 3.0.3 to 3.0.4. - [Release notes](https://github.com/bvaughn/react-resizable-panels/releases) - [Commits](https://github.com/bvaughn/react-resizable-panels/compare/3.0.3...3.0.4) --- updated-dependencies: - dependency-name: react-resizable-panels dependency-version: 3.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 9 +++++---- page/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 6897ba7b..f5b67df9 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -34,7 +34,7 @@ "react-dom": "^19.0.0", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", - "react-resizable-panels": "^3.0.3", + "react-resizable-panels": "^3.0.4", "react-router-dom": "^7.7.1", "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", @@ -5309,9 +5309,10 @@ } }, "node_modules/react-resizable-panels": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-3.0.3.tgz", - "integrity": "sha512-7HA8THVBHTzhDK4ON0tvlGXyMAJN1zBeRpuyyremSikgYh2ku6ltD7tsGQOcXx4NKPrZtYCm/5CBr+dkruTGQw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-3.0.4.tgz", + "integrity": "sha512-8Y4KNgV94XhUvI2LeByyPIjoUJb71M/0hyhtzkHaqpVHs+ZQs8b627HmzyhmVYi3C9YP6R+XD1KmG7hHjEZXFQ==", + "license": "MIT", "peerDependencies": { "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" diff --git a/page/package.json b/page/package.json index cfaca9c0..0a790c70 100644 --- a/page/package.json +++ b/page/package.json @@ -36,7 +36,7 @@ "react-dom": "^19.0.0", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", - "react-resizable-panels": "^3.0.3", + "react-resizable-panels": "^3.0.4", "react-router-dom": "^7.7.1", "react-window": "^1.8.11", "tailwind-merge": "^3.3.1", From fddce02a3807cda9f95300e24d30c5b2bd48d482 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Aug 2025 08:35:36 +0000 Subject: [PATCH 046/184] Build(deps): Bump react and @types/react in /page Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together. Updates `react` from 19.1.0 to 19.1.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react) Updates `@types/react` from 19.1.8 to 19.1.9 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: react dependency-version: 19.1.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/react" dependency-version: 19.1.9 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 16 ++++++++-------- page/package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 6897ba7b..32e5c639 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -29,7 +29,7 @@ "jszip": "^3.10.1", "lucide-react": "^0.536.0", "pe-library": "^1.0.1", - "react": "^19.0.0", + "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", "react-dom": "^19.0.0", "react-dropzone": "^14.3.8", @@ -46,7 +46,7 @@ "devDependencies": { "@eslint/js": "^9.30.0", "@types/node": "^24.1.0", - "@types/react": "^19.1.8", + "@types/react": "^19.1.9", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.6.0", @@ -3144,9 +3144,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -5166,9 +5166,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", "engines": { "node": ">=0.10.0" diff --git a/page/package.json b/page/package.json index cfaca9c0..551189db 100644 --- a/page/package.json +++ b/page/package.json @@ -31,7 +31,7 @@ "jszip": "^3.10.1", "lucide-react": "^0.536.0", "pe-library": "^1.0.1", - "react": "^19.0.0", + "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", "react-dom": "^19.0.0", "react-dropzone": "^14.3.8", @@ -48,7 +48,7 @@ "devDependencies": { "@eslint/js": "^9.30.0", "@types/node": "^24.1.0", - "@types/react": "^19.1.8", + "@types/react": "^19.1.9", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.6.0", From 2fea62ba033603be8c8e2c32ac96f5dffd465438 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Aug 2025 08:35:38 +0000 Subject: [PATCH 047/184] Build(deps-dev): Bump @vitejs/plugin-react from 4.6.0 to 4.7.0 in /page Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.6.0 to 4.7.0. - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.7.0/packages/plugin-react) --- updated-dependencies: - dependency-name: "@vitejs/plugin-react" dependency-version: 4.7.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 131 +++++++++++++++++++---------------------- page/package.json | 2 +- 2 files changed, 61 insertions(+), 72 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 6897ba7b..90244c0c 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -49,7 +49,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", - "@vitejs/plugin-react": "^4.6.0", + "@vitejs/plugin-react": "^4.7.0", "eslint": "^9.32.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", @@ -99,22 +99,22 @@ } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", + "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -130,16 +130,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -198,6 +198,16 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", @@ -344,13 +354,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -436,38 +446,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1160,17 +1160,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1182,15 +1178,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -1198,9 +1185,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2509,10 +2496,11 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", - "dev": true + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.40.0", @@ -3453,15 +3441,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.6.0.tgz", - "integrity": "sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", + "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.19", + "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -3469,7 +3458,7 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/acorn": { diff --git a/page/package.json b/page/package.json index cfaca9c0..32affc38 100644 --- a/page/package.json +++ b/page/package.json @@ -51,7 +51,7 @@ "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/react-helmet": "^6.1.11", - "@vitejs/plugin-react": "^4.6.0", + "@vitejs/plugin-react": "^4.7.0", "eslint": "^9.32.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", From 25f9f15920c8ad9445a952cbf72c73c396b85999 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Aug 2025 08:36:16 +0000 Subject: [PATCH 048/184] Build(deps-dev): Bump vite from 7.0.0 to 7.0.6 in /page Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.0 to 7.0.6. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.0.6/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.0.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 18 ++++++++++-------- page/package.json | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 6897ba7b..9a2614a8 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -57,7 +57,7 @@ "prettier": "3.6.2", "typescript": "~5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^7.0.0" + "vite": "^7.0.6" } }, "node_modules/@ampproject/remapping": { @@ -5889,13 +5889,14 @@ } }, "node_modules/vite": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", - "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "license": "MIT", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" @@ -5975,9 +5976,10 @@ } }, "node_modules/vite/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { "node": ">=12" }, diff --git a/page/package.json b/page/package.json index cfaca9c0..758d317f 100644 --- a/page/package.json +++ b/page/package.json @@ -59,6 +59,6 @@ "prettier": "3.6.2", "typescript": "~5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^7.0.0" + "vite": "^7.0.6" } } From 6f56fec3167db9e841845929cee3fad360de8ed7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Aug 2025 12:53:56 +0000 Subject: [PATCH 049/184] Build(deps): Bump react-dom and @types/react-dom in /page Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together. Updates `react-dom` from 19.1.0 to 19.1.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react-dom) Updates `@types/react-dom` from 19.1.6 to 19.1.7 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: react-dom dependency-version: 19.1.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: "@types/react-dom" dependency-version: 19.1.7 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 18 +++++++++--------- page/package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 01fc6579..e7a70c8f 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -31,7 +31,7 @@ "pe-library": "^1.0.1", "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", - "react-dom": "^19.0.0", + "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.4", @@ -47,7 +47,7 @@ "@eslint/js": "^9.30.0", "@types/node": "^24.1.0", "@types/react": "^19.1.9", - "@types/react-dom": "^19.1.6", + "@types/react-dom": "^19.1.7", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.7.0", "eslint": "^9.32.0", @@ -3141,9 +3141,9 @@ } }, "node_modules/@types/react-dom": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", "devOptional": true, "license": "MIT", "peerDependencies": { @@ -5176,15 +5176,15 @@ } }, "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "license": "MIT", "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^19.1.0" + "react": "^19.1.1" } }, "node_modules/react-dropzone": { diff --git a/page/package.json b/page/package.json index 1e155057..224f6fe5 100644 --- a/page/package.json +++ b/page/package.json @@ -33,7 +33,7 @@ "pe-library": "^1.0.1", "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", - "react-dom": "^19.0.0", + "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.4", @@ -49,7 +49,7 @@ "@eslint/js": "^9.30.0", "@types/node": "^24.1.0", "@types/react": "^19.1.9", - "@types/react-dom": "^19.1.6", + "@types/react-dom": "^19.1.7", "@types/react-helmet": "^6.1.11", "@vitejs/plugin-react": "^4.7.0", "eslint": "^9.32.0", From 73085b16db5dbb2edaa9d22c9cda2a89e292341f Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Tue, 5 Aug 2025 07:14:54 +0200 Subject: [PATCH 050/184] Update reflect_type_info.hpp --- src/analyzer/reflect_type_info.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/analyzer/reflect_type_info.hpp b/src/analyzer/reflect_type_info.hpp index 0a6059a9..dd5a8adf 100644 --- a/src/analyzer/reflect_type_info.hpp +++ b/src/analyzer/reflect_type_info.hpp @@ -14,6 +14,7 @@ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4308) +#pragma warning(disable : 4819) #endif #include "reflect_extension.hpp" From a1df4d804752a9fe4e01bba4253fec63115fcf0b Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Tue, 5 Aug 2025 07:24:16 +0200 Subject: [PATCH 051/184] Update reflect_type_info.hpp --- src/analyzer/reflect_type_info.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/analyzer/reflect_type_info.hpp b/src/analyzer/reflect_type_info.hpp index dd5a8adf..5cb93bc4 100644 --- a/src/analyzer/reflect_type_info.hpp +++ b/src/analyzer/reflect_type_info.hpp @@ -13,8 +13,8 @@ #ifdef _MSC_VER #pragma warning(push) +#pragma warning(disable : 4189) #pragma warning(disable : 4308) -#pragma warning(disable : 4819) #endif #include "reflect_extension.hpp" From 061cf01471c2280eb494398e1422c3ad703be29c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 05:25:17 +0000 Subject: [PATCH 052/184] Build(deps): Bump deps/reflect from `239f695` to `c21a448` Bumps [deps/reflect](https://github.com/qlibs/reflect) from `239f695` to `c21a448`. - [Release notes](https://github.com/qlibs/reflect/releases) - [Commits](https://github.com/qlibs/reflect/compare/239f695545f4d25a08fd673595f34cf4fe0e481e...c21a44839db947f3a6bd0c5a113191b18198c8cf) --- updated-dependencies: - dependency-name: deps/reflect dependency-version: c21a44839db947f3a6bd0c5a113191b18198c8cf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/reflect | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/reflect b/deps/reflect index 239f6955..c21a4483 160000 --- a/deps/reflect +++ b/deps/reflect @@ -1 +1 @@ -Subproject commit 239f695545f4d25a08fd673595f34cf4fe0e481e +Subproject commit c21a44839db947f3a6bd0c5a113191b18198c8cf From cae1cf5c1f8d568bc89e466eb5d17f4c59dfd8f4 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Tue, 5 Aug 2025 15:35:31 +0100 Subject: [PATCH 053/184] Added stubs for NtCreateNamedPipeFile NtReleaseWorkerFactoryWorker --- src/windows-emulator/devices/named_pipe.hpp | 21 ++++++ src/windows-emulator/io_device.cpp | 6 ++ src/windows-emulator/syscalls.cpp | 6 ++ src/windows-emulator/syscalls/file.cpp | 75 ++++++++++++++++++--- 4 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 src/windows-emulator/devices/named_pipe.hpp diff --git a/src/windows-emulator/devices/named_pipe.hpp b/src/windows-emulator/devices/named_pipe.hpp new file mode 100644 index 00000000..ef295342 --- /dev/null +++ b/src/windows-emulator/devices/named_pipe.hpp @@ -0,0 +1,21 @@ +#pragma once +#include "../io_device.hpp" + +class named_pipe : public io_device_container { +public: + std::u16string name; + ULONG pipe_type; + ULONG read_mode; + ULONG completion_mode; + ULONG max_instances; + ULONG inbound_quota; + ULONG outbound_quota; + LARGE_INTEGER default_timeout; + + void create(windows_emulator&, const io_device_creation_data&) override {} + void work(windows_emulator&) override {} + NTSTATUS io_control(windows_emulator&, const io_device_context&) override { return STATUS_NOT_SUPPORTED; } + + void serialize_object(utils::buffer_serializer&) const override {} + void deserialize_object(utils::buffer_deserializer&) override {} +}; \ No newline at end of file diff --git a/src/windows-emulator/io_device.cpp b/src/windows-emulator/io_device.cpp index ef6da159..9f34954d 100644 --- a/src/windows-emulator/io_device.cpp +++ b/src/windows-emulator/io_device.cpp @@ -4,6 +4,7 @@ #include "devices/afd_endpoint.hpp" #include "devices/mount_point_manager.hpp" #include "devices/security_support_provider.hpp" +#include "devices/named_pipe.hpp" namespace { @@ -49,6 +50,11 @@ std::unique_ptr create_device(const std::u16string_view device) return create_security_support_provider(); } + if (device == u"NamedPipe") + { + return std::make_unique(); + } + throw std::runtime_error("Unsupported device: " + u16_to_u8(device)); } diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index abba7931..c04e0d32 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -436,6 +436,11 @@ namespace syscalls return STATUS_SUCCESS; } + NTSTATUS handle_NtReleaseWorkerFactoryWorker() + { + return STATUS_SUCCESS; + } + NTSTATUS handle_NtCreateIoCompletion( const syscall_context& c, const emulator_object event_handle, const ACCESS_MASK desired_access, const emulator_object>> object_attributes, @@ -1185,6 +1190,7 @@ void syscall_dispatcher::add_handlers(std::map& ha add_handler(NtQueryEvent); add_handler(NtRemoveIoCompletionEx); add_handler(NtCreateDebugObject); + add_handler(NtReleaseWorkerFactoryWorker); #undef add_handler } diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 55773b7d..149929b6 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -9,6 +9,8 @@ #include +#include "../devices/named_pipe.hpp" + #if defined(OS_WINDOWS) #define fstat64 _fstat64 #elif defined(OS_MAC) @@ -1067,21 +1069,72 @@ namespace syscalls return STATUS_NOT_SUPPORTED; } - NTSTATUS handle_NtCreateNamedPipeFile( - const syscall_context& c, const emulator_object /*file_handle*/, const ULONG /*desired_access*/, - const emulator_object>> /*object_attributes*/, - const emulator_object>> /*io_status_block*/, const ULONG /*share_access*/, - const ULONG /*create_disposition*/, const ULONG /*create_options*/, const ULONG /*named_pipe_type*/, - const ULONG /*read_mode*/, const ULONG /*completion_mode*/, const ULONG /*maximum_instances*/, - const ULONG /*inbound_quota*/, const ULONG /*outbound_quota*/, - const emulator_object /*default_timeout*/) + NTSTATUS handle_NtCreateNamedPipeFile(const syscall_context& c, emulator_object file_handle, + ULONG desired_access, + emulator_object>> object_attributes, + emulator_object>> io_status_block, + ULONG share_access, ULONG create_disposition, ULONG create_options, + ULONG named_pipe_type, ULONG read_mode, ULONG completion_mode, + ULONG maximum_instances, ULONG inbound_quota, ULONG outbound_quota, + emulator_object default_timeout) { - c.win_emu.log.error("Unimplemented syscall NtCreateNamedPipeFile!"); - c.emu.stop(); + UNREFERENCED_PARAMETER(desired_access); + UNREFERENCED_PARAMETER(share_access); + UNREFERENCED_PARAMETER(create_disposition); + UNREFERENCED_PARAMETER(create_options); + UNREFERENCED_PARAMETER(object_attributes); - return STATUS_NOT_SUPPORTED; + std::u16string file_name; + + object_attributes.access([&](const auto& attrs) { + emulator_object>> unicode_string( + c.emu, static_cast(attrs.ObjectName)); + + unicode_string.access([&](const auto& unicode) { + if (unicode.Length > 0 && unicode.Buffer != 0) + { + const uint64_t buffer_addr = static_cast(unicode.Buffer); + std::vector buffer(unicode.Length / sizeof(char16_t)); + c.emu.read_memory(buffer_addr, buffer.data(), unicode.Length); + file_name.assign(buffer.begin(), buffer.end()); + } + }); + }); + + io_device_creation_data data{}; + + io_device_container container{u"NamedPipe", c.win_emu, data}; + if (auto* pipe_device = container.get_internal_device()) + { + pipe_device->name = file_name; + } + + // Create pipe and fill details + auto* pipe_device = container.get_internal_device(); + pipe_device->name = u"StubPipe"; + pipe_device->pipe_type = named_pipe_type; + pipe_device->read_mode = read_mode; + pipe_device->completion_mode = completion_mode; + pipe_device->max_instances = maximum_instances; + pipe_device->inbound_quota = inbound_quota; + pipe_device->outbound_quota = outbound_quota; + pipe_device->default_timeout = default_timeout.read(); // <--- FIXED + + // Store in device handle table + handle pipe_handle = c.proc.devices.store(std::move(container)); + file_handle.write(pipe_handle); + + // Return status via IOSB + IO_STATUS_BLOCK> iosb{}; + iosb.Status = STATUS_SUCCESS; + iosb.Information = 0; + io_status_block.write(iosb); // <--- FIXED + + return STATUS_SUCCESS; } + + NTSTATUS handle_NtFsControlFile(const syscall_context& c, const handle /*event_handle*/, const uint64_t /*apc_routine*/, const uint64_t /*app_context*/, const emulator_object>> /*io_status_block*/, From 5f9bfd469497ae98d9ff6fa06a1f544374911890 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Tue, 5 Aug 2025 15:44:19 +0100 Subject: [PATCH 054/184] Added stubs for NtCreateNamedPipeFile NtReleaseWorkerFactoryWorker --- src/windows-emulator/syscalls/file.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 149929b6..86fcb7e9 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -1086,6 +1086,7 @@ namespace syscalls std::u16string file_name; + // Get file name object_attributes.access([&](const auto& attrs) { emulator_object>> unicode_string( c.emu, static_cast(attrs.ObjectName)); @@ -1101,6 +1102,7 @@ namespace syscalls }); }); + //Build IO device io_device_creation_data data{}; io_device_container container{u"NamedPipe", c.win_emu, data}; @@ -1118,7 +1120,7 @@ namespace syscalls pipe_device->max_instances = maximum_instances; pipe_device->inbound_quota = inbound_quota; pipe_device->outbound_quota = outbound_quota; - pipe_device->default_timeout = default_timeout.read(); // <--- FIXED + pipe_device->default_timeout = default_timeout.read(); // Store in device handle table handle pipe_handle = c.proc.devices.store(std::move(container)); @@ -1128,7 +1130,7 @@ namespace syscalls IO_STATUS_BLOCK> iosb{}; iosb.Status = STATUS_SUCCESS; iosb.Information = 0; - io_status_block.write(iosb); // <--- FIXED + io_status_block.write(iosb); return STATUS_SUCCESS; } From 85843ff5c91f0d94eeab765253aa1831fc833cf9 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Tue, 5 Aug 2025 15:55:36 +0100 Subject: [PATCH 055/184] Fixed cross-platform: removed MS-specific macro --- src/windows-emulator/syscalls/file.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 86fcb7e9..ace40c1d 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -1078,11 +1078,11 @@ namespace syscalls ULONG maximum_instances, ULONG inbound_quota, ULONG outbound_quota, emulator_object default_timeout) { - UNREFERENCED_PARAMETER(desired_access); - UNREFERENCED_PARAMETER(share_access); - UNREFERENCED_PARAMETER(create_disposition); - UNREFERENCED_PARAMETER(create_options); - UNREFERENCED_PARAMETER(object_attributes); + (void)desired_access; + (void)share_access; + (void)create_disposition; + (void)create_options; + (void)object_attributes; std::u16string file_name; From 100638d8ea2061b9d2c9a2a13cbffd3264e0b028 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Tue, 5 Aug 2025 16:26:13 +0100 Subject: [PATCH 056/184] Fixed clang-tidy issue --- src/windows-emulator/syscalls/file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index ace40c1d..ad03773f 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -1094,7 +1094,7 @@ namespace syscalls unicode_string.access([&](const auto& unicode) { if (unicode.Length > 0 && unicode.Buffer != 0) { - const uint64_t buffer_addr = static_cast(unicode.Buffer); + auto buffer_addr = static_cast(unicode.Buffer); std::vector buffer(unicode.Length / sizeof(char16_t)); c.emu.read_memory(buffer_addr, buffer.data(), unicode.Length); file_name.assign(buffer.begin(), buffer.end()); From ffea72d48a773180fdae63afe26d158b68b347dd Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Wed, 6 Aug 2025 10:30:40 +0100 Subject: [PATCH 057/184] Added basic pipe support to NtRead/WriteFile --- src/common/platform/status.hpp | 10 ++ src/windows-emulator/devices/named_pipe.hpp | 2 + src/windows-emulator/io_device.cpp | 1 + src/windows-emulator/syscall_utils.hpp | 6 + src/windows-emulator/syscalls/file.cpp | 136 ++++++++++++++------ 5 files changed, 119 insertions(+), 36 deletions(-) diff --git a/src/common/platform/status.hpp b/src/common/platform/status.hpp index 583f258a..a9ea9625 100644 --- a/src/common/platform/status.hpp +++ b/src/common/platform/status.hpp @@ -52,6 +52,16 @@ using NTSTATUS = std::uint32_t; #define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000328L) #define STATUS_PORT_NOT_SET ((NTSTATUS)0xC0000353L) #define STATUS_DEBUGGER_INACTIVE ((NTSTATUS)0xC0000354L) +#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014BL) +#define STATUS_PIPE_EMPTY ((NTSTATUS)0xC00000D9L) +#define STATUS_PIPE_BUSY ((NTSTATUS)0xC00000AAL) +#define STATUS_PIPE_DISCONNECTED ((NTSTATUS)0xC00000B0L) +#define STATUS_PIPE_LISTENING ((NTSTATUS)0x00000105L) +#define STATUS_PIPE_CONNECTED ((NTSTATUS)0x00000106L) +#define STATUS_PIPE_CLOSING ((NTSTATUS)0xC00000B1L) +#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS)0xC00000ACL) +#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000ADL) +#define STATUS_PIPE_NOT_CONNECTED ((NTSTATUS)0xC00000BEL) #define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L) diff --git a/src/windows-emulator/devices/named_pipe.hpp b/src/windows-emulator/devices/named_pipe.hpp index ef295342..c550e539 100644 --- a/src/windows-emulator/devices/named_pipe.hpp +++ b/src/windows-emulator/devices/named_pipe.hpp @@ -4,6 +4,8 @@ class named_pipe : public io_device_container { public: std::u16string name; + std::deque write_queue; + ACCESS_MASK access = 0; ULONG pipe_type; ULONG read_mode; ULONG completion_mode; diff --git a/src/windows-emulator/io_device.cpp b/src/windows-emulator/io_device.cpp index 9f34954d..da7ad8a8 100644 --- a/src/windows-emulator/io_device.cpp +++ b/src/windows-emulator/io_device.cpp @@ -5,6 +5,7 @@ #include "devices/mount_point_manager.hpp" #include "devices/security_support_provider.hpp" #include "devices/named_pipe.hpp" +#include namespace { diff --git a/src/windows-emulator/syscall_utils.hpp b/src/windows-emulator/syscall_utils.hpp index 14395c59..58062f0d 100644 --- a/src/windows-emulator/syscall_utils.hpp +++ b/src/windows-emulator/syscall_utils.hpp @@ -3,6 +3,7 @@ #include "windows_emulator.hpp" #include #include +#include "windows-emulator/devices/named_pipe.hpp" struct syscall_context { @@ -28,6 +29,11 @@ inline bool is_syscall(const std::string_view name) return name.starts_with("Nt") && name.size() > 3 && is_uppercase(name[2]); } +inline bool is_named_pipe_path(const std::u16string_view& filename) +{ + return filename == u"\\Device\\NamedPipe\\" || filename.starts_with(u"\\Device\\NamedPipe\\"); +} + inline std::optional extract_syscall_id(const exported_symbol& symbol, std::span data) { if (!is_syscall(symbol.name)) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index ad03773f..666a2a5d 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -648,6 +648,34 @@ namespace syscalls return STATUS_SUCCESS; } + const auto* container = c.proc.devices.get(file_handle); + if (container) + { + if (auto* pipe = container->get_internal_device()) + { + if (!pipe->write_queue.empty()) + { + std::string_view data = pipe->write_queue.front(); + const size_t to_copy = std::min(data.size(), length); + + commit_file_data(data.substr(0, to_copy), c.emu, io_status_block, buffer); + + if (to_copy == data.size()) + { + pipe->write_queue.pop_front(); + } + else + { + pipe->write_queue.front().erase(0, to_copy); + } + + return STATUS_SUCCESS; + } + + return STATUS_PIPE_EMPTY; + } + } + const auto* f = c.proc.files.get(file_handle); if (!f) { @@ -685,6 +713,26 @@ namespace syscalls return STATUS_SUCCESS; } + const auto* container = c.proc.devices.get(file_handle); + if (container) + { + if (auto* pipe = container->get_internal_device()) + { + // TODO c.win_emu.callbacks.on_named_pipe_write(pipe->name, temp_buffer); + + // TODO pipe->write_queue.push_back(temp_buffer); + + if (io_status_block) + { + IO_STATUS_BLOCK> block{}; + block.Information = static_cast(temp_buffer.size()); + io_status_block.write(block); + } + + return STATUS_SUCCESS; + } + } + const auto* f = c.proc.files.get(file_handle); if (!f) { @@ -779,6 +827,33 @@ namespace syscalls return std::nullopt; } + NTSTATUS handle_named_pipe_create(const syscall_context& c, const emulator_object& out_handle, + const std::u16string_view filename, + const OBJECT_ATTRIBUTES>& attributes, + ACCESS_MASK desired_access) + { + (void)attributes; // This isn't being consumed atm, suppressing errors + + c.win_emu.callbacks.on_generic_access("Creating/opening named pipe", filename); + + io_device_creation_data data{}; + + std::u16string device_name = u"NamedPipe"; + + io_device_container container{device_name, c.win_emu, data}; + + if (auto* pipe_device = container.get_internal_device()) + { + pipe_device->name = std::u16string(filename); + pipe_device->access = desired_access; + } + + const auto handle = c.proc.devices.store(std::move(container)); + out_handle.write(handle); + + return STATUS_SUCCESS; + } + NTSTATUS handle_NtCreateFile(const syscall_context& c, const emulator_object file_handle, ACCESS_MASK desired_access, const emulator_object>> object_attributes, @@ -790,6 +865,11 @@ namespace syscalls const auto attributes = object_attributes.read(); auto filename = read_unicode_string(c.emu, attributes.ObjectName); + if (is_named_pipe_path(filename)) + { + return handle_named_pipe_create(c, file_handle, filename, attributes, desired_access); + } + auto printer = utils::finally([&] { c.win_emu.callbacks.on_generic_access("Opening file", filename); // }); @@ -1082,51 +1162,37 @@ namespace syscalls (void)share_access; (void)create_disposition; (void)create_options; - (void)object_attributes; - std::u16string file_name; + const auto attributes = object_attributes.read(); + const auto filename = read_unicode_string(c.emu, attributes.ObjectName); - // Get file name - object_attributes.access([&](const auto& attrs) { - emulator_object>> unicode_string( - c.emu, static_cast(attrs.ObjectName)); + if (!filename.starts_with(u"\\Device\\NamedPipe")) + return STATUS_NOT_SUPPORTED; + + c.win_emu.callbacks.on_generic_access("Creating named pipe", filename); - unicode_string.access([&](const auto& unicode) { - if (unicode.Length > 0 && unicode.Buffer != 0) - { - auto buffer_addr = static_cast(unicode.Buffer); - std::vector buffer(unicode.Length / sizeof(char16_t)); - c.emu.read_memory(buffer_addr, buffer.data(), unicode.Length); - file_name.assign(buffer.begin(), buffer.end()); - } - }); - }); - - //Build IO device io_device_creation_data data{}; - io_device_container container{u"NamedPipe", c.win_emu, data}; + if (auto* pipe_device = container.get_internal_device()) { - pipe_device->name = file_name; + pipe_device->name = filename; + pipe_device->pipe_type = named_pipe_type; + pipe_device->read_mode = read_mode; + pipe_device->completion_mode = completion_mode; + pipe_device->max_instances = maximum_instances; + pipe_device->inbound_quota = inbound_quota; + pipe_device->outbound_quota = outbound_quota; + pipe_device->default_timeout = default_timeout.read(); + } + else + { + return STATUS_NOT_SUPPORTED; } - // Create pipe and fill details - auto* pipe_device = container.get_internal_device(); - pipe_device->name = u"StubPipe"; - pipe_device->pipe_type = named_pipe_type; - pipe_device->read_mode = read_mode; - pipe_device->completion_mode = completion_mode; - pipe_device->max_instances = maximum_instances; - pipe_device->inbound_quota = inbound_quota; - pipe_device->outbound_quota = outbound_quota; - pipe_device->default_timeout = default_timeout.read(); - - // Store in device handle table handle pipe_handle = c.proc.devices.store(std::move(container)); file_handle.write(pipe_handle); - - // Return status via IOSB + IO_STATUS_BLOCK> iosb{}; iosb.Status = STATUS_SUCCESS; iosb.Information = 0; @@ -1135,8 +1201,6 @@ namespace syscalls return STATUS_SUCCESS; } - - NTSTATUS handle_NtFsControlFile(const syscall_context& c, const handle /*event_handle*/, const uint64_t /*apc_routine*/, const uint64_t /*app_context*/, const emulator_object>> /*io_status_block*/, From 8b2c17023626c4b99fb0c362161ce5c8fb645829 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Wed, 6 Aug 2025 11:01:42 +0100 Subject: [PATCH 058/184] Fixed clang exception. Again. --- src/windows-emulator/syscalls/file.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 666a2a5d..56d0ed27 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -1167,8 +1167,10 @@ namespace syscalls const auto filename = read_unicode_string(c.emu, attributes.ObjectName); if (!filename.starts_with(u"\\Device\\NamedPipe")) + { return STATUS_NOT_SUPPORTED; - + } + c.win_emu.callbacks.on_generic_access("Creating named pipe", filename); io_device_creation_data data{}; From 210ab2930c32711ef9eb85c7e34f5f54008c69c4 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Wed, 6 Aug 2025 11:12:44 +0100 Subject: [PATCH 059/184] Fixed platform portability issues --- src/windows-emulator/syscalls/file.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 56d0ed27..79928acb 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -717,7 +717,8 @@ namespace syscalls if (container) { if (auto* pipe = container->get_internal_device()) - { + { + (void)pipe; // For future use: suppressing compiler issues // TODO c.win_emu.callbacks.on_named_pipe_write(pipe->name, temp_buffer); // TODO pipe->write_queue.push_back(temp_buffer); From 0aea1f538547c624b0c8920da7c21cf9c01c930f Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Fri, 8 Aug 2025 11:22:56 +0100 Subject: [PATCH 060/184] I just learned how clang-format works. Fail. --- src/windows-emulator/devices/named_pipe.hpp | 28 +++++++++++++++------ src/windows-emulator/syscalls/file.cpp | 4 +-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/windows-emulator/devices/named_pipe.hpp b/src/windows-emulator/devices/named_pipe.hpp index c550e539..542248aa 100644 --- a/src/windows-emulator/devices/named_pipe.hpp +++ b/src/windows-emulator/devices/named_pipe.hpp @@ -1,11 +1,12 @@ #pragma once #include "../io_device.hpp" -class named_pipe : public io_device_container { -public: +class named_pipe : public io_device_container +{ + public: std::u16string name; std::deque write_queue; - ACCESS_MASK access = 0; + ACCESS_MASK access = 0; ULONG pipe_type; ULONG read_mode; ULONG completion_mode; @@ -14,10 +15,21 @@ public: ULONG outbound_quota; LARGE_INTEGER default_timeout; - void create(windows_emulator&, const io_device_creation_data&) override {} - void work(windows_emulator&) override {} - NTSTATUS io_control(windows_emulator&, const io_device_context&) override { return STATUS_NOT_SUPPORTED; } + void create(windows_emulator&, const io_device_creation_data&) override + { + } + void work(windows_emulator&) override + { + } + NTSTATUS io_control(windows_emulator&, const io_device_context&) override + { + return STATUS_NOT_SUPPORTED; + } - void serialize_object(utils::buffer_serializer&) const override {} - void deserialize_object(utils::buffer_deserializer&) override {} + void serialize_object(utils::buffer_serializer&) const override + { + } + void deserialize_object(utils::buffer_deserializer&) override + { + } }; \ No newline at end of file diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 79928acb..719c41d3 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -717,10 +717,10 @@ namespace syscalls if (container) { if (auto* pipe = container->get_internal_device()) - { + { (void)pipe; // For future use: suppressing compiler issues // TODO c.win_emu.callbacks.on_named_pipe_write(pipe->name, temp_buffer); - + // TODO pipe->write_queue.push_back(temp_buffer); if (io_status_block) From 051cef2212d0c529d051dde39579d06accac9ab7 Mon Sep 17 00:00:00 2001 From: CarlTSpeak Date: Fri, 8 Aug 2025 14:52:03 +0100 Subject: [PATCH 061/184] fix: handle VirtualAlloc invalid size and flags --- src/windows-emulator/syscalls/memory.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/windows-emulator/syscalls/memory.cpp b/src/windows-emulator/syscalls/memory.cpp index 42ca451b..25895695 100644 --- a/src/windows-emulator/syscalls/memory.cpp +++ b/src/windows-emulator/syscalls/memory.cpp @@ -181,6 +181,12 @@ namespace syscalls } auto allocation_bytes = bytes_to_allocate.read(); + + if (allocation_bytes == 0) + { + return STATUS_INVALID_PARAMETER; + } + allocation_bytes = page_align_up(allocation_bytes); bytes_to_allocate.write(allocation_bytes); @@ -244,6 +250,11 @@ namespace syscalls return STATUS_NOT_SUPPORTED; } + if (free_type == 0) + { + return STATUS_INVALID_PARAMETER; + } + const auto allocation_base = base_address.read(); const auto allocation_size = bytes_to_allocate.read(); From 09ad463027eef876d81744927c30111e19d15502 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 14:06:06 +0200 Subject: [PATCH 062/184] Support environment analysis --- src/analyzer/main.cpp | 140 ++++++++++++++++++++++++++++++++--- src/emulator/scoped_hook.hpp | 22 ++++++ 2 files changed, 151 insertions(+), 11 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 9e1e4125..d8a6c832 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "object_watching.hpp" #include "snapshot.hpp" @@ -57,6 +58,113 @@ namespace } } +#if !defined(__GNUC__) || defined(__clang__) + struct analysis_state + { + windows_emulator& win_emu_; + scoped_hook env_data_hook_; + scoped_hook env_ptr_hook_; + scoped_hook params_hook_; + std::set> modules_; + bool verbose_; + + analysis_state(windows_emulator& win_emu, std::set> modules, const bool verbose) + : win_emu_(win_emu), + env_data_hook_(win_emu.emu()), + env_ptr_hook_(win_emu.emu()), + params_hook_(win_emu.emu()), + modules_(std::move(modules)), + verbose_(verbose) + { + } + }; + + emulator_object get_process_params(windows_emulator& win_emu) + { + const auto peb = win_emu.process.peb.read(); + return {win_emu.emu(), peb.ProcessParameters}; + } + + uint64_t get_environment_ptr(windows_emulator& win_emu) + { + const auto process_params = get_process_params(win_emu); + return process_params.read().Environment; + } + + size_t get_environment_size(const x86_64_emulator& emu, const uint64_t env) + { + std::array data{}; + std::array empty{}; + + for (size_t i = 0; i < 0x100000; ++i) + { + if (!emu.try_read_memory(env + i, data.data(), data.size())) + { + return i; + } + + if (data == empty) + { + return i + data.size(); + } + } + + return 0; + } + + emulator_hook* install_env_hook(const std::shared_ptr& state) + { + const auto process_params = get_process_params(state->win_emu_); + + auto install_env_access_hook = [state] { + const auto env_ptr = get_environment_ptr(state->win_emu_); + const auto env_size = get_environment_size(state->win_emu_.emu(), env_ptr); + if (!env_size) + { + state->env_data_hook_.remove(); + return; + } + + auto hook_handler = [state, env_ptr](const uint64_t address, const void*, const size_t size) { + const auto rip = state->win_emu_.emu().read_instruction_pointer(); + const auto* mod = state->win_emu_.mod_manager.find_by_address(rip); + const auto is_main_access = + mod == state->win_emu_.mod_manager.executable || state->modules_.contains(mod->name); + + if (!is_main_access && !state->verbose_) + { + return; + } + + const auto offset = address - env_ptr; + const auto* mod_name = mod ? mod->name.c_str() : ""; + state->win_emu_.log.print(is_main_access ? color::green : color::dark_gray, + "Environment access: 0x%" PRIx64 " (0x%zX) at 0x%" PRIx64 " (%s)\n", offset, + size, rip, mod_name); + }; + + state->env_data_hook_ = state->win_emu_.emu().hook_memory_read(env_ptr, env_size, std::move(hook_handler)); + }; + + install_env_access_hook(); + + auto& win_emu = state->win_emu_; + return state->win_emu_.emu().hook_memory_write( + process_params.value() + offsetof(RTL_USER_PROCESS_PARAMETERS64, Environment), 0x8, + [&win_emu, install = std::move(install_env_access_hook)](const uint64_t address, const void*, size_t) { + const auto new_process_params = get_process_params(win_emu); + + const auto target_address = + new_process_params.value() + offsetof(RTL_USER_PROCESS_PARAMETERS64, Environment); + + if (address == target_address) + { + install(); + } + }); + } +#endif + void watch_system_objects(windows_emulator& win_emu, const std::set>& modules, const bool verbose) { @@ -72,23 +180,33 @@ namespace watch_object(win_emu, modules, emulator_object{win_emu.emu(), kusd_mmio::address()}, verbose); - auto* params_hook = watch_object(win_emu, modules, win_emu.process.process_params, verbose); + auto state = std::make_shared(win_emu, modules, verbose); + + state->params_hook_ = watch_object(win_emu, modules, win_emu.process.process_params, verbose); + + const auto update_env_hook = [state] { + state->env_ptr_hook_ = install_env_hook(state); // + }; + + update_env_hook(); win_emu.emu().hook_memory_write( win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters), 0x8, - [&win_emu, verbose, params_hook, modules](const uint64_t address, const void*, size_t) mutable { - const auto target_address = win_emu.process.peb.value() + offsetof(PEB64, ProcessParameters); + [state, update_env = std::move(update_env_hook)](const uint64_t address, const void*, size_t) { + const auto target_address = state->win_emu_.process.peb.value() + offsetof(PEB64, ProcessParameters); - if (address == target_address) + if (address != target_address) { - const emulator_object obj{ - win_emu.emu(), - win_emu.emu().read_memory(address), - }; - - win_emu.emu().delete_hook(params_hook); - params_hook = watch_object(win_emu, modules, obj, verbose); + return; } + + const emulator_object obj{ + state->win_emu_.emu(), + state->win_emu_.emu().read_memory(address), + }; + + state->params_hook_ = watch_object(state->win_emu_, state->modules_, obj, state->verbose_); + update_env(); }); #endif } diff --git a/src/emulator/scoped_hook.hpp b/src/emulator/scoped_hook.hpp index 2fd10985..105466fb 100644 --- a/src/emulator/scoped_hook.hpp +++ b/src/emulator/scoped_hook.hpp @@ -6,6 +6,11 @@ class scoped_hook public: scoped_hook() = default; + scoped_hook(emulator& emu) + : emu_(&emu) + { + } + scoped_hook(emulator& emu, emulator_hook* hook) : scoped_hook(emu, std::vector{hook}) { @@ -44,6 +49,23 @@ class scoped_hook return *this; } + scoped_hook& operator=(emulator_hook* hook) + { + this->replace({hook}); + return *this; + } + + void replace(std::vector hooks) + { + if (!this->emu_) + { + throw std::runtime_error("Invalid scoped hook"); + } + + this->remove(); + this->hooks_ = std::move(hooks); + } + void remove() { auto hooks = std::move(this->hooks_); From eb6d352a81087e9d97730dd1da9105950cc04324 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 17:07:33 +0200 Subject: [PATCH 063/184] Track import access --- src/analyzer/analysis.cpp | 118 +++++++++++++++++- src/analyzer/analysis.hpp | 14 ++- src/windows-emulator/module/mapped_module.hpp | 8 ++ .../module/module_mapping.cpp | 59 +++++++++ 4 files changed, 195 insertions(+), 4 deletions(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index f8a307ac..12557045 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -124,7 +124,7 @@ namespace } template - void print_arg_as_string(windows_emulator& win_emu, size_t index) + void print_arg_as_string(windows_emulator& win_emu, const size_t index) { const auto var_ptr = get_function_argument(win_emu.emu(), index); if (var_ptr) @@ -152,9 +152,60 @@ namespace } } + bool is_thread_alive(const analysis_context& c, const uint32_t thread_id) + { + for (const auto& t : c.win_emu->process.threads | std::views::values) + { + if (t.id == thread_id) + { + return true; + } + } + + return false; + } + + void update_import_access(analysis_context& c, const uint64_t address) + { + if (c.accessed_imports.empty()) + { + return; + } + + auto entry = c.accessed_imports.find(address); + if (entry != c.accessed_imports.end()) + { + c.accessed_imports.erase(entry); + } + + const auto& t = c.win_emu->current_thread(); + for (entry = c.accessed_imports.begin(); entry != c.accessed_imports.end();) + { + auto& a = entry->second; + + constexpr auto inst_delay = 100u; + const auto is_same_thread = t.id == a.thread_id; + const auto execution_delay_reached = + is_same_thread && a.access_inst_count + inst_delay <= t.executed_instructions; + + if (!execution_delay_reached && is_thread_alive(c, a.thread_id)) + { + ++entry; + continue; + } + + c.win_emu->log.print(color::green, "Import read access without execution: %s (%s) at 0x%" PRIx64 " (%s)\n", + a.import_name.c_str(), a.import_module.c_str(), a.access_rip, + a.accessor_module.c_str()); + + entry = c.accessed_imports.erase(entry); + } + } + void handle_instruction(analysis_context& c, const uint64_t address) { auto& win_emu = *c.win_emu; + update_import_access(c, address); #ifdef OS_EMSCRIPTEN if ((win_emu.get_executed_instructions() % 0x20000) == 0) @@ -293,6 +344,65 @@ namespace c.win_emu->log.info("%.*s%s", static_cast(data.size()), data.data(), data.ends_with("\n") ? "" : "\n"); } } + + void watch_import_table(analysis_context& c) + { + c.win_emu->setup_process_if_necessary(); + + const auto& import_list = c.win_emu->mod_manager.executable->imports; + if (import_list.empty()) + { + return; + } + + auto min = std::numeric_limits::max(); + auto max = std::numeric_limits::min(); + + for (const auto& imports : import_list | std::views::values) + { + for (const auto& import : imports) + { + min = std::min(import.address, min); + max = std::max(import.address, max); + } + } + + c.win_emu->emu().hook_memory_read(min, max - min, [&c](const uint64_t address, const void*, size_t) { + const auto& import_list = c.win_emu->mod_manager.executable->imports; + + const auto rip = c.win_emu->emu().read_instruction_pointer(); + if (!c.win_emu->mod_manager.executable->is_within(rip)) + { + return; + } + + for (const auto& [module_name, imports] : import_list) + { + for (const auto& import : imports) + { + if (address != import.address) + { + continue; + } + + const auto function_address = c.win_emu->emu().read_memory(address); + + auto& access = c.accessed_imports[function_address]; + access.access_rip = c.win_emu->emu().read_instruction_pointer(); + access.accessor_module = c.win_emu->mod_manager.find_name(access.access_rip); + + access.import_name = import.name; + access.import_module = module_name; + + const auto& t = c.win_emu->current_thread(); + access.thread_id = t.id; + access.access_inst_count = t.executed_instructions; + + return; + } + } + }); + } } void register_analysis_callbacks(analysis_context& c) @@ -317,9 +427,11 @@ void register_analysis_callbacks(analysis_context& c) cb.on_generic_access = make_callback(c, handle_generic_access); cb.on_generic_activity = make_callback(c, handle_generic_activity); cb.on_suspicious_activity = make_callback(c, handle_suspicious_activity); + + watch_import_table(c); } -mapped_module* get_module_if_interesting(module_manager& manager, const string_set& modules, uint64_t address) +mapped_module* get_module_if_interesting(module_manager& manager, const string_set& modules, const uint64_t address) { if (manager.executable->is_within(address)) { @@ -338,4 +450,4 @@ mapped_module* get_module_if_interesting(module_manager& manager, const string_s } return nullptr; -} \ No newline at end of file +} diff --git a/src/analyzer/analysis.hpp b/src/analyzer/analysis.hpp index 1af666ba..57d50661 100644 --- a/src/analyzer/analysis.hpp +++ b/src/analyzer/analysis.hpp @@ -20,6 +20,16 @@ struct analysis_settings string_set ignored_functions{}; }; +struct accessed_import +{ + uint32_t thread_id{}; + uint64_t access_rip{}; + uint64_t access_inst_count{}; + std::string accessor_module{}; + std::string import_name{}; + std::string import_module{}; +}; + struct analysis_context { const analysis_settings* settings{}; @@ -27,7 +37,9 @@ struct analysis_context std::string output{}; bool has_reached_main{false}; + + std::map accessed_imports{}; }; void register_analysis_callbacks(analysis_context& c); -mapped_module* get_module_if_interesting(module_manager& manager, const string_set& modules, uint64_t address); \ No newline at end of file +mapped_module* get_module_if_interesting(module_manager& manager, const string_set& modules, uint64_t address); diff --git a/src/windows-emulator/module/mapped_module.hpp b/src/windows-emulator/module/mapped_module.hpp index 2019243f..fbd4b034 100644 --- a/src/windows-emulator/module/mapped_module.hpp +++ b/src/windows-emulator/module/mapped_module.hpp @@ -9,7 +9,14 @@ struct exported_symbol uint64_t address{}; }; +struct imported_symbol +{ + std::string name{}; + uint64_t address{}; +}; + using exported_symbols = std::vector; +using imported_symbols = std::map>; using address_name_mapping = std::map; struct mapped_section @@ -28,6 +35,7 @@ struct mapped_module uint64_t entry_point{}; exported_symbols exports{}; + imported_symbols imports{}; address_name_mapping address_names{}; std::vector sections{}; diff --git a/src/windows-emulator/module/module_mapping.cpp b/src/windows-emulator/module/module_mapping.cpp index 036088ed..942b0cd9 100644 --- a/src/windows-emulator/module/module_mapping.cpp +++ b/src/windows-emulator/module/module_mapping.cpp @@ -29,6 +29,64 @@ namespace return mem; } + void collect_imports(mapped_module& binary, const utils::safe_buffer_accessor buffer, + const PEOptionalHeader_t& optional_header) + { + const auto& import_directory_entry = optional_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; + if (import_directory_entry.VirtualAddress == 0 || import_directory_entry.Size == 0) + { + return; + } + + const auto import_descriptors = buffer.as(import_directory_entry.VirtualAddress); + + for (size_t i = 0;; ++i) + { + const auto descriptor = import_descriptors.get(i); + if (!descriptor.Name) + { + break; + } + + const auto module_name = buffer.as_string(descriptor.Name); + auto& imports = binary.imports[module_name]; + + auto original_thunk_data = buffer.as(descriptor.FirstThunk); + + if (descriptor.OriginalFirstThunk) + { + original_thunk_data = buffer.as(descriptor.OriginalFirstThunk); + } + + for (size_t j = 0;; ++j) + { + const auto original_thunk = original_thunk_data.get(j); + if (!original_thunk.u1.AddressOfData) + { + break; + } + + imported_symbol sym{}; + + const auto thunk_rva = descriptor.FirstThunk // + + sizeof(IMAGE_THUNK_DATA) * j // + + offsetof(IMAGE_THUNK_DATA, u1.Function); + sym.address = thunk_rva + binary.image_base; + + if (IMAGE_SNAP_BY_ORDINAL(original_thunk.u1.Ordinal)) + { + sym.name = "#" + std::to_string(original_thunk.u1.Ordinal); + } + else + { + sym.name = buffer.as_string(original_thunk.u1.AddressOfData + offsetof(IMAGE_IMPORT_BY_NAME, Name)); + } + + imports.push_back(std::move(sym)); + } + } + } + void collect_exports(mapped_module& binary, const utils::safe_buffer_accessor buffer, const PEOptionalHeader_t& optional_header) { @@ -248,6 +306,7 @@ mapped_module map_module_from_data(memory_manager& memory, const std::span Date: Sat, 9 Aug 2025 17:20:22 +0200 Subject: [PATCH 064/184] Add missing types --- src/common/platform/win_pefile.hpp | 41 +++++++++++++++++++ .../module/module_mapping.cpp | 12 +++--- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/common/platform/win_pefile.hpp b/src/common/platform/win_pefile.hpp index d73222af..b154a8b5 100644 --- a/src/common/platform/win_pefile.hpp +++ b/src/common/platform/win_pefile.hpp @@ -283,6 +283,47 @@ typedef struct _IMAGE_BASE_RELOCATION // WORD TypeOffset[1]; } IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION; +#define IMAGE_ORDINAL_FLAG64 0x8000000000000000 +#define IMAGE_ORDINAL_FLAG32 0x80000000 +#define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff) +#define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff) +#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0) +#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0) + +typedef struct _IMAGE_IMPORT_BY_NAME +{ + WORD Hint; + CHAR Name[1]; +} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; + +typedef struct _IMAGE_IMPORT_DESCRIPTOR +{ + union + { + DWORD Characteristics; // 0 for terminating null import descriptor + DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) + } DUMMYUNIONNAME; + DWORD TimeDateStamp; // 0 if not bound, + // -1 if bound, and real date\time stamp + // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) + // O.W. date/time stamp of DLL bound to (Old BIND) + + DWORD ForwarderChain; // -1 if no forwarders + DWORD Name; + DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) +} IMAGE_IMPORT_DESCRIPTOR; + +typedef struct _IMAGE_THUNK_DATA64 +{ + union + { + ULONGLONG ForwarderString; // PBYTE + ULONGLONG Function; // PDWORD + ULONGLONG Ordinal; + ULONGLONG AddressOfData; // PIMAGE_IMPORT_BY_NAME + } u1; +} IMAGE_THUNK_DATA64; + #endif template diff --git a/src/windows-emulator/module/module_mapping.cpp b/src/windows-emulator/module/module_mapping.cpp index 942b0cd9..bfedf783 100644 --- a/src/windows-emulator/module/module_mapping.cpp +++ b/src/windows-emulator/module/module_mapping.cpp @@ -51,11 +51,11 @@ namespace const auto module_name = buffer.as_string(descriptor.Name); auto& imports = binary.imports[module_name]; - auto original_thunk_data = buffer.as(descriptor.FirstThunk); + auto original_thunk_data = buffer.as(descriptor.FirstThunk); if (descriptor.OriginalFirstThunk) { - original_thunk_data = buffer.as(descriptor.OriginalFirstThunk); + original_thunk_data = buffer.as(descriptor.OriginalFirstThunk); } for (size_t j = 0;; ++j) @@ -68,12 +68,12 @@ namespace imported_symbol sym{}; - const auto thunk_rva = descriptor.FirstThunk // - + sizeof(IMAGE_THUNK_DATA) * j // - + offsetof(IMAGE_THUNK_DATA, u1.Function); + const auto thunk_rva = descriptor.FirstThunk // + + sizeof(IMAGE_THUNK_DATA64) * j // + + offsetof(IMAGE_THUNK_DATA64, u1.Function); sym.address = thunk_rva + binary.image_base; - if (IMAGE_SNAP_BY_ORDINAL(original_thunk.u1.Ordinal)) + if (IMAGE_SNAP_BY_ORDINAL64(original_thunk.u1.Ordinal)) { sym.name = "#" + std::to_string(original_thunk.u1.Ordinal); } From eb07148bfddb26632b4b2eec3bb635c95fa50827 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 17:23:58 +0200 Subject: [PATCH 065/184] Support hook deletion during hook deletion --- src/backends/icicle-emulator/icicle_x86_64_emulator.cpp | 2 ++ src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index cb759e3a..b63b8aa6 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -377,7 +377,9 @@ namespace icicle } icicle_remove_hook(this->emu_, id); + const auto obj = std::move(entry->second); this->hooks_.erase(entry); + (void)obj; } void serialize_state(utils::buffer_serializer& buffer, const bool is_snapshot) const override diff --git a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp index 52629f76..000027e5 100644 --- a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp +++ b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp @@ -605,7 +605,9 @@ namespace unicorn if (entry != this->hooks_.end()) { + const auto obj = std::move(*entry); this->hooks_.erase(entry); + (void)obj; } } From 292fc6ce67507cc8d845da1600520980b22c86af Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 17:38:20 +0200 Subject: [PATCH 066/184] Fix compilation --- .../icicle-emulator/icicle_x86_64_emulator.cpp | 3 +++ .../unicorn-emulator/unicorn_x86_64_emulator.cpp | 2 +- src/common/platform/win_pefile.hpp | 10 +++++----- src/common/utils/object.hpp | 8 ++++++++ src/windows-emulator/module/module_mapping.cpp | 4 ++-- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index b63b8aa6..b01ed360 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -103,6 +103,9 @@ namespace icicle ~icicle_x86_64_emulator() override { + reset_object_with_delayed_destruction(this->hooks_); + reset_object_with_delayed_destruction(this->storage_); + if (this->emu_) { icicle_destroy_emulator(this->emu_); diff --git a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp index 000027e5..0ffa5b46 100644 --- a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp +++ b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp @@ -206,7 +206,7 @@ namespace unicorn ~unicorn_x86_64_emulator() override { - this->hooks_.clear(); + reset_object_with_delayed_destruction(this->hooks_); uc_close(this->uc_); } diff --git a/src/common/platform/win_pefile.hpp b/src/common/platform/win_pefile.hpp index b154a8b5..d2c83b60 100644 --- a/src/common/platform/win_pefile.hpp +++ b/src/common/platform/win_pefile.hpp @@ -298,11 +298,11 @@ typedef struct _IMAGE_IMPORT_BY_NAME typedef struct _IMAGE_IMPORT_DESCRIPTOR { - union - { - DWORD Characteristics; // 0 for terminating null import descriptor - DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) - } DUMMYUNIONNAME; + // union + //{ + // DWORD Characteristics; // 0 for terminating null import descriptor + DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) + //} DUMMYUNIONNAME; DWORD TimeDateStamp; // 0 if not bound, // -1 if bound, and real date\time stamp // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) diff --git a/src/common/utils/object.hpp b/src/common/utils/object.hpp index e0cc9a84..e1f206f7 100644 --- a/src/common/utils/object.hpp +++ b/src/common/utils/object.hpp @@ -12,4 +12,12 @@ namespace utils object& operator=(object&&) = default; object& operator=(const object&) = default; }; + + template + void reset_object_with_delayed_destruction(T& obj) + { + T new_obj{}; + const auto old = std::move(obj); + obj = std::move(new_obj); + } } diff --git a/src/windows-emulator/module/module_mapping.cpp b/src/windows-emulator/module/module_mapping.cpp index bfedf783..496d89b8 100644 --- a/src/windows-emulator/module/module_mapping.cpp +++ b/src/windows-emulator/module/module_mapping.cpp @@ -52,7 +52,6 @@ namespace auto& imports = binary.imports[module_name]; auto original_thunk_data = buffer.as(descriptor.FirstThunk); - if (descriptor.OriginalFirstThunk) { original_thunk_data = buffer.as(descriptor.OriginalFirstThunk); @@ -79,7 +78,8 @@ namespace } else { - sym.name = buffer.as_string(original_thunk.u1.AddressOfData + offsetof(IMAGE_IMPORT_BY_NAME, Name)); + sym.name = buffer.as_string( + static_cast(original_thunk.u1.AddressOfData + offsetof(IMAGE_IMPORT_BY_NAME, Name))); } imports.push_back(std::move(sym)); From 2abe1737f3e5b8c224eee749c63d8663cd9bbabc Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 17:42:33 +0200 Subject: [PATCH 067/184] Fix android compilation --- src/windows-emulator/module/module_mapping.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/windows-emulator/module/module_mapping.cpp b/src/windows-emulator/module/module_mapping.cpp index 496d89b8..d58aaf00 100644 --- a/src/windows-emulator/module/module_mapping.cpp +++ b/src/windows-emulator/module/module_mapping.cpp @@ -67,9 +67,8 @@ namespace imported_symbol sym{}; - const auto thunk_rva = descriptor.FirstThunk // - + sizeof(IMAGE_THUNK_DATA64) * j // - + offsetof(IMAGE_THUNK_DATA64, u1.Function); + static_assert(sizeof(IMAGE_THUNK_DATA64) == sizeof(uint64_t)); + const auto thunk_rva = descriptor.FirstThunk + sizeof(IMAGE_THUNK_DATA64) * j; sym.address = thunk_rva + binary.image_base; if (IMAGE_SNAP_BY_ORDINAL64(original_thunk.u1.Ordinal)) From 3b9320fd6229e31ee19cf3ef066e851ae8e23fdd Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 18:02:37 +0200 Subject: [PATCH 068/184] Better import access tracking --- src/analyzer/analysis.cpp | 29 ++++++++++++++++------------- src/analyzer/analysis.hpp | 3 ++- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index 12557045..67c45408 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -172,19 +172,19 @@ namespace return; } - auto entry = c.accessed_imports.find(address); - if (entry != c.accessed_imports.end()) - { - c.accessed_imports.erase(entry); - } - const auto& t = c.win_emu->current_thread(); - for (entry = c.accessed_imports.begin(); entry != c.accessed_imports.end();) + for (auto entry = c.accessed_imports.begin(); entry != c.accessed_imports.end();) { - auto& a = entry->second; + auto& a = *entry; + const auto is_same_thread = t.id == a.thread_id; + + if (is_same_thread && address == a.address) + { + entry = c.accessed_imports.erase(entry); + continue; + } constexpr auto inst_delay = 100u; - const auto is_same_thread = t.id == a.thread_id; const auto execution_delay_reached = is_same_thread && a.access_inst_count + inst_delay <= t.executed_instructions; @@ -273,8 +273,8 @@ namespace const auto* mod_name = win_emu.mod_manager.find_name(return_address); win_emu.log.print(is_interesting_call ? color::yellow : color::dark_gray, - "Executing function: %s - %s (0x%" PRIx64 ") via (0x%" PRIx64 ") %s\n", - binary->name.c_str(), export_entry->second.c_str(), address, return_address, mod_name); + "Executing function: %s (%s) (0x%" PRIx64 ") via (0x%" PRIx64 ") %s\n", + export_entry->second.c_str(), binary->name.c_str(), address, return_address, mod_name); if (is_interesting_call) { @@ -385,9 +385,10 @@ namespace continue; } - const auto function_address = c.win_emu->emu().read_memory(address); + accessed_import access{}; + + access.address = c.win_emu->emu().read_memory(address); - auto& access = c.accessed_imports[function_address]; access.access_rip = c.win_emu->emu().read_instruction_pointer(); access.accessor_module = c.win_emu->mod_manager.find_name(access.access_rip); @@ -398,6 +399,8 @@ namespace access.thread_id = t.id; access.access_inst_count = t.executed_instructions; + c.accessed_imports.push_back(std::move(access)); + return; } } diff --git a/src/analyzer/analysis.hpp b/src/analyzer/analysis.hpp index 57d50661..eba795ca 100644 --- a/src/analyzer/analysis.hpp +++ b/src/analyzer/analysis.hpp @@ -22,6 +22,7 @@ struct analysis_settings struct accessed_import { + uint64_t address{}; uint32_t thread_id{}; uint64_t access_rip{}; uint64_t access_inst_count{}; @@ -38,7 +39,7 @@ struct analysis_context std::string output{}; bool has_reached_main{false}; - std::map accessed_imports{}; + std::vector accessed_imports{}; }; void register_analysis_callbacks(analysis_context& c); From b3bdfc9d6b2af91de002971b0ef6a9660c9705f2 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 20:44:09 +0200 Subject: [PATCH 069/184] Support hooking/unhooking within hooks for icicle --- .../icicle-bridge/src/icicle.rs | 125 ++++++++-- .../icicle-emulator/icicle-bridge/src/lib.rs | 8 + .../icicle_x86_64_emulator.cpp | 232 ++++++++++++++---- 3 files changed, 297 insertions(+), 68 deletions(-) diff --git a/src/backends/icicle-emulator/icicle-bridge/src/icicle.rs b/src/backends/icicle-emulator/icicle-bridge/src/icicle.rs index 660ade77..3eec79dd 100644 --- a/src/backends/icicle-emulator/icicle-bridge/src/icicle.rs +++ b/src/backends/icicle-emulator/icicle-bridge/src/icicle.rs @@ -1,5 +1,6 @@ use icicle_cpu::ExceptionCode; use icicle_cpu::ValueSource; +use std::collections::HashSet; use std::{cell::RefCell, collections::HashMap, rc::Rc}; use crate::registers; @@ -73,31 +74,96 @@ fn qualify_hook_id(hook_id: u32, hook_type: HookType) -> u32 { pub struct HookContainer { hook_id: u32, + is_iterating: bool, hooks: HashMap>, + hooks_to_add: HashMap>, + hooks_to_remove: HashSet, } impl HookContainer { pub fn new() -> Self { Self { hook_id: 0, + is_iterating: false, hooks: HashMap::new(), + hooks_to_add: HashMap::new(), + hooks_to_remove: HashSet::new(), } } pub fn add_hook(&mut self, callback: Box) -> u32 { self.hook_id += 1; let id = self.hook_id; - self.hooks.insert(id, callback); + + if self.is_iterating { + self.hooks_to_add.insert(id, callback); + } else { + self.hooks.insert(id, callback); + } return id; } - pub fn get_hooks(&self) -> &HashMap> { - return &self.hooks; + pub fn for_each_hook(&mut self, mut callback: F) + where + F: FnMut(&Func), + { + let was_iterating = self.do_pre_access_work(); + + for (_, func) in &self.hooks { + callback(func.as_ref()); + } + + self.do_post_access_work(was_iterating); + } + + pub fn access_hook(&mut self, id: u32, mut callback: F) + where + F: FnMut(&Func), + { + let was_iterating = self.do_pre_access_work(); + + let hook = self.hooks.get(&id); + if hook.is_some() { + callback(hook.unwrap().as_ref()); + } + + self.do_post_access_work(was_iterating); + } + + pub fn is_empty(&self) -> bool { + return self.hooks.is_empty(); } pub fn remove_hook(&mut self, id: u32) { - self.hooks.remove(&id); + if self.is_iterating { + self.hooks_to_remove.insert(id); + } else { + self.hooks.remove(&id); + } + } + + fn do_pre_access_work(&mut self) -> bool { + let was_iterating = self.is_iterating; + self.is_iterating = true; + return was_iterating; + } + + fn do_post_access_work(&mut self, was_iterating: bool) { + self.is_iterating = was_iterating; + if self.is_iterating { + return; + } + + let to_remove = std::mem::take(&mut self.hooks_to_remove); + for id in &to_remove { + self.hooks.remove(&id); + } + + let to_add = std::mem::take(&mut self.hooks_to_add); + for (id, func) in to_add { + self.hooks.insert(id, func); + } } } @@ -157,6 +223,7 @@ struct ExecutionHooks { specific_hooks: HookContainer, block_hooks: HookContainer, address_mapping: HashMap>, + one_time_callbacks: Vec>, } impl ExecutionHooks { @@ -167,31 +234,38 @@ impl ExecutionHooks { specific_hooks: HookContainer::new(), block_hooks: HookContainer::new(), address_mapping: HashMap::new(), + one_time_callbacks: Vec::new(), } } - fn run_hooks(&self, address: u64) { - for (_key, func) in self.generic_hooks.get_hooks() { - func(address); + fn run_hooks(&mut self, address: u64) { + if !self.one_time_callbacks.is_empty() { + let callbacks = std::mem::take(&mut self.one_time_callbacks); + for cb in callbacks { + cb.as_ref()(); + } } + self.generic_hooks.for_each_hook(|func| { + func(address); + }); + let mapping = self.address_mapping.get(&address); if mapping.is_none() { return; } for id in mapping.unwrap() { - let func = self.specific_hooks.get_hooks().get(&id); - if func.is_some() { - func.unwrap()(address); - } + self.specific_hooks.access_hook(*id, |func| { + func(address); + }); } } pub fn on_block(&mut self, address: u64, instructions: u64) { - for (_key, func) in self.block_hooks.get_hooks() { + self.block_hooks.for_each_hook(|func| { func(address, instructions); - } + }); } pub fn execute(&mut self, cpu: &mut icicle_cpu::Cpu, address: u64) { @@ -224,6 +298,10 @@ impl ExecutionHooks { return id; } + pub fn schedule(&mut self, callback: Box) { + self.one_time_callbacks.push(callback); + } + pub fn remove_generic_hook(&mut self, id: u32) { self.generic_hooks.remove_hook(id); } @@ -368,10 +446,10 @@ impl IcicleEmulator { } } - fn handle_interrupt(&self, code: i32) -> bool { - for (_key, func) in self.interrupt_hooks.get_hooks() { + fn handle_interrupt(&mut self, code: i32) -> bool { + self.interrupt_hooks.for_each_hook(|func| { func(code); - } + }); return true; } @@ -393,16 +471,15 @@ impl IcicleEmulator { } fn handle_violation(&mut self, address: u64, permission: u8, unmapped: bool) -> bool { - let hooks = &self.violation_hooks.get_hooks(); - if hooks.is_empty() { + if self.violation_hooks.is_empty() { return false; } let mut continue_execution = true; - for (_key, func) in self.violation_hooks.get_hooks() { + self.violation_hooks.for_each_hook(|func| { continue_execution &= func(address, permission, unmapped); - } + }); return continue_execution; } @@ -412,9 +489,9 @@ impl IcicleEmulator { return self.handle_interrupt(value as i32); } - for (_key, func) in self.syscall_hooks.get_hooks() { + self.syscall_hooks.for_each_hook(|func| { func(); - } + }); self.vm.cpu.write_pc(self.vm.cpu.read_pc() + 2); return true; @@ -521,6 +598,10 @@ impl IcicleEmulator { } } + pub fn run_on_next_instruction(&mut self, callback: Box) { + self.execution_hooks.borrow_mut().schedule(callback); + } + pub fn map_memory(&mut self, address: u64, length: u64, permissions: u8) -> bool { const MAPPING_PERMISSIONS: u8 = icicle_vm::cpu::mem::perm::MAP | icicle_vm::cpu::mem::perm::INIT diff --git a/src/backends/icicle-emulator/icicle-bridge/src/lib.rs b/src/backends/icicle-emulator/icicle-bridge/src/lib.rs index 74e07b54..c8efe281 100644 --- a/src/backends/icicle-emulator/icicle-bridge/src/lib.rs +++ b/src/backends/icicle-emulator/icicle-bridge/src/lib.rs @@ -307,6 +307,14 @@ pub fn icicle_remove_hook(ptr: *mut c_void, id: u32) { } } +#[unsafe(no_mangle)] +pub fn icicle_run_on_next_instruction(ptr: *mut c_void, callback: RawFunction, data: *mut c_void) { + unsafe { + let emulator = &mut *(ptr as *mut IcicleEmulator); + emulator.run_on_next_instruction(Box::new(move || callback(data))); + } +} + #[unsafe(no_mangle)] pub fn icicle_read_register( ptr: *mut c_void, diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index b01ed360..20ed80bb 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -1,7 +1,9 @@ #define ICICLE_EMULATOR_IMPL #include "icicle_x86_64_emulator.hpp" +#include #include +#include using icicle_emulator = struct icicle_emulator_; @@ -44,6 +46,7 @@ extern "C" void icicle_start(icicle_emulator*, size_t count); void icicle_stop(icicle_emulator*); void icicle_destroy_emulator(icicle_emulator*); + void icicle_run_on_next_instruction(icicle_emulator*, raw_func* callback, void* data); } namespace icicle @@ -58,24 +61,35 @@ namespace icicle } } - emulator_hook* wrap_hook(const uint32_t id) - { - return reinterpret_cast(static_cast(id)); - } - template struct function_object : utils::object { + bool* hook_state{}; std::function func{}; - function_object(std::function f = {}) - : func(std::move(f)) + function_object(std::function f = {}, bool* state = nullptr) + : hook_state(state), + func(std::move(f)) { } template auto operator()(Args&&... args) const { + bool old_state{}; + if (this->hook_state) + { + old_state = *this->hook_state; + *this->hook_state = true; + } + + const auto _ = utils::finally([&] { + if (this->hook_state) + { + *this->hook_state = old_state; + } + }); + return this->func.operator()(std::forward(args)...); } @@ -83,10 +97,18 @@ namespace icicle }; template - std::unique_ptr> make_function_object(std::function func) + std::unique_ptr> make_function_object(std::function func, bool& hook_state) { - return std::make_unique>(std::move(func)); + return std::make_unique>(std::move(func), &hook_state); } + + struct memory_access_hook + { + uint64_t address{}; + uint64_t size{}; + memory_access_hook_callback callback{}; + bool is_read{}; + }; } class icicle_x86_64_emulator : public x86_64_emulator @@ -105,6 +127,7 @@ namespace icicle { reset_object_with_delayed_destruction(this->hooks_); reset_object_with_delayed_destruction(this->storage_); + utils::reset_object_with_delayed_destruction(this->hooks_to_install_); if (this->emu_) { @@ -239,7 +262,7 @@ namespace icicle return nullptr; } - auto obj = make_function_object(std::move(callback)); + auto obj = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = obj.get(); const auto invoker = +[](void* cb) { @@ -255,7 +278,7 @@ namespace icicle emulator_hook* hook_basic_block(basic_block_hook_callback callback) override { - auto object = make_function_object(std::move(callback)); + auto object = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = object.get(); auto* wrapper = +[](void* user, const uint64_t addr, const uint64_t instructions) { basic_block block{}; @@ -274,7 +297,7 @@ namespace icicle emulator_hook* hook_interrupt(interrupt_hook_callback callback) override { - auto obj = make_function_object(std::move(callback)); + auto obj = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = obj.get(); auto* wrapper = +[](void* user, const int32_t code) { const auto& func = *static_cast(user); @@ -289,7 +312,7 @@ namespace icicle emulator_hook* hook_memory_violation(memory_violation_hook_callback callback) override { - auto obj = make_function_object(std::move(callback)); + auto obj = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = obj.get(); auto* wrapper = +[](void* user, const uint64_t address, const uint8_t operation, const int32_t unmapped) -> int32_t { @@ -310,7 +333,7 @@ namespace icicle emulator_hook* hook_memory_execution(const uint64_t address, memory_execution_hook_callback callback) override { - auto object = make_function_object(std::move(callback)); + auto object = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = object.get(); auto* wrapper = +[](void* user, const uint64_t addr) { const auto& func = *static_cast(user); @@ -325,7 +348,7 @@ namespace icicle emulator_hook* hook_memory_execution(memory_execution_hook_callback callback) override { - auto object = make_function_object(std::move(callback)); + auto object = make_function_object(std::move(callback), this->is_in_hook_); auto* ptr = object.get(); auto* wrapper = +[](void* user, const uint64_t addr) { const auto& func = *static_cast(user); @@ -341,48 +364,36 @@ namespace icicle emulator_hook* hook_memory_read(const uint64_t address, const uint64_t size, memory_access_hook_callback callback) override { - auto obj = make_function_object(std::move(callback)); - auto* ptr = obj.get(); - auto* wrapper = +[](void* user, const uint64_t address, const void* data, size_t length) { - const auto& func = *static_cast(user); - func(address, data, length); - }; - - const auto id = icicle_add_read_hook(this->emu_, address, address + size, wrapper, ptr); - this->hooks_[id] = std::move(obj); - - return wrap_hook(id); + return this->try_install_memory_access_hook(memory_access_hook{ + .address = address, + .size = size, + .callback = std::move(callback), + .is_read = true, + }); } emulator_hook* hook_memory_write(const uint64_t address, const uint64_t size, memory_access_hook_callback callback) override { - auto obj = make_function_object(std::move(callback)); - auto* ptr = obj.get(); - auto* wrapper = +[](void* user, const uint64_t address, const void* data, size_t length) { - const auto& func = *static_cast(user); - func(address, data, length); - }; - - const auto id = icicle_add_write_hook(this->emu_, address, address + size, wrapper, ptr); - this->hooks_[id] = std::move(obj); - - return wrap_hook(id); + return this->try_install_memory_access_hook(memory_access_hook{ + .address = address, + .size = size, + .callback = std::move(callback), + .is_read = false, + }); } void delete_hook(emulator_hook* hook) override { - const auto id = static_cast(reinterpret_cast(hook)); - const auto entry = this->hooks_.find(id); - if (entry == this->hooks_.end()) + if (this->is_in_hook_) { - return; + this->hooks_to_delete_.insert(hook); + this->schedule_action_execution(); + } + else + { + this->delete_hook_internal(hook); } - - icicle_remove_hook(this->emu_, id); - const auto obj = std::move(entry->second); - this->hooks_.erase(entry); - (void)obj; } void serialize_state(utils::buffer_serializer& buffer, const bool is_snapshot) const override @@ -442,9 +453,138 @@ namespace icicle } private: + bool is_in_hook_{false}; std::list> storage_{}; std::unordered_map> hooks_{}; + std::unordered_map> id_mapping_{}; icicle_emulator* emu_{}; + uint32_t index_{0}; + + std::unordered_set hooks_to_delete_{}; + std::unordered_map hooks_to_install_{}; + + emulator_hook* wrap_hook(const std::optional icicle_id) + { + const auto id = ++this->index_; + auto* hook = reinterpret_cast(static_cast(id)); + + this->id_mapping_[hook] = icicle_id; + + return hook; + } + + emulator_hook* hook_memory_access(memory_access_hook hook, emulator_hook* hook_id) + { + auto obj = make_function_object(std::move(hook.callback), this->is_in_hook_); + auto* ptr = obj.get(); + auto* wrapper = +[](void* user, const uint64_t address, const void* data, size_t length) { + const auto& func = *static_cast(user); + func(address, data, length); + }; + + auto* installer = hook.is_read ? &icicle_add_read_hook : &icicle_add_write_hook; + const auto id = installer(this->emu_, hook.address, hook.address + hook.size, wrapper, ptr); + this->hooks_[id] = std::move(obj); + + if (hook_id) + { + this->id_mapping_[hook_id] = id; + return hook_id; + } + + return wrap_hook(id); + } + + void delete_hook_internal(emulator_hook* hook) + { + auto hook_id = this->id_mapping_.find(hook); + if (hook_id == this->id_mapping_.end()) + { + return; + } + + if (!hook_id->second.has_value()) + { + this->hooks_to_delete_.insert(hook); + return; + } + + const auto id = *hook_id->second; + this->id_mapping_.erase(hook_id); + + const auto entry = this->hooks_.find(id); + if (entry == this->hooks_.end()) + { + return; + } + + icicle_remove_hook(this->emu_, id); + const auto obj = std::move(entry->second); + this->hooks_.erase(entry); + (void)obj; + } + + void perform_pending_actions() + { + const auto hooks_to_delete = std::move(this->hooks_to_delete_); + const auto hooks_to_install = std::move(this->hooks_to_install_); + + this->hooks_to_delete_ = {}; + this->hooks_to_install_ = {}; + + for (auto& hook : hooks_to_install) + { + this->hook_memory_access(std::move(hook.second), hook.first); + } + + for (auto* hook : hooks_to_delete) + { + this->delete_hook_internal(hook); + } + } + + emulator_hook* try_install_memory_access_hook(memory_access_hook hook) + { + if (!this->is_in_hook_) + { + return this->hook_memory_access(std::move(hook), nullptr); + } + + auto* hook_id = wrap_hook(std::nullopt); + this->hooks_to_install_[hook_id] = std::move(hook); + + this->schedule_action_execution(); + + return hook_id; + } + + void schedule_action_execution() + { + this->run_on_next_instruction([this] { + this->perform_pending_actions(); // + }); + } + + void run_on_next_instruction(std::function func) const + { + auto* heap_func = new std::function(std::move(func)); + auto* callback = +[](void* data) { + auto* cb = static_cast*>(data); + + try + { + (*cb)(); + } + catch (...) + { + // Ignore + } + + delete cb; + }; + + icicle_run_on_next_instruction(this->emu_, callback, heap_func); + } }; std::unique_ptr create_x86_64_emulator() From 9e45d2a33338a26cb23b3cf7aee8925f7ca3e31e Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 21:00:10 +0200 Subject: [PATCH 070/184] Fix warning --- src/backends/icicle-emulator/icicle_x86_64_emulator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index 20ed80bb..7e5600ca 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -526,8 +526,8 @@ namespace icicle void perform_pending_actions() { + auto hooks_to_install = std::move(this->hooks_to_install_); const auto hooks_to_delete = std::move(this->hooks_to_delete_); - const auto hooks_to_install = std::move(this->hooks_to_install_); this->hooks_to_delete_ = {}; this->hooks_to_install_ = {}; From 93ff52c2ecf9670edff249f28fe1c70384f1531c Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 21:36:40 +0200 Subject: [PATCH 071/184] Fix ordinals --- src/windows-emulator/module/module_mapping.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows-emulator/module/module_mapping.cpp b/src/windows-emulator/module/module_mapping.cpp index d58aaf00..73950f1b 100644 --- a/src/windows-emulator/module/module_mapping.cpp +++ b/src/windows-emulator/module/module_mapping.cpp @@ -73,7 +73,7 @@ namespace if (IMAGE_SNAP_BY_ORDINAL64(original_thunk.u1.Ordinal)) { - sym.name = "#" + std::to_string(original_thunk.u1.Ordinal); + sym.name = "#" + std::to_string(IMAGE_ORDINAL64(original_thunk.u1.Ordinal)); } else { From 806aa8b61b0246fc8478553779b7ee09a2d4c828 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 9 Aug 2025 21:54:46 +0200 Subject: [PATCH 072/184] Print module name --- src/analyzer/analysis.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index 67c45408..3ff57d84 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -134,6 +134,16 @@ namespace } } + void print_module_name(windows_emulator& win_emu, const size_t index) + { + const auto var_ptr = get_function_argument(win_emu.emu(), index); + if (var_ptr) + { + const auto* module_name = win_emu.mod_manager.find_name(var_ptr); + print_string(win_emu.log, module_name); + } + } + void handle_function_details(analysis_context& c, const std::string_view function) { if (function == "GetEnvironmentVariableA" || function == "ExpandEnvironmentStringsA") @@ -150,6 +160,11 @@ namespace print_arg_as_string(*c.win_emu, 2); print_arg_as_string(*c.win_emu, 1); } + else if (function == "GetProcAddress") + { + print_module_name(*c.win_emu, 0); + print_arg_as_string(*c.win_emu, 1); + } } bool is_thread_alive(const analysis_context& c, const uint32_t thread_id) From fc9a240d9ff691a8ae443ae94d52d3b5b11ead13 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 07:58:38 +0200 Subject: [PATCH 073/184] Update project name --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c770d906..dce0655a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ option(MOMO_ENABLE_CLANG_TIDY "Enable clang-tidy checks" OFF) option(MOMO_ENABLE_RUST_CODE "Enable code parts written in rust" ON) option(MOMO_EMSCRIPTEN_MEMORY64 "Enable memory 64 support for emscripten builds" OFF) option(MOMO_EMSCRIPTEN_SUPPORT_NODEJS "Enable Node.js filesystem for emscripten compilation" OFF) -option(MOMO_BUILD_AS_LIBRARY "Configure and Build the emulator as a shared library (without the samples and tests)" OFF) +option(MOMO_BUILD_AS_LIBRARY "Configure and Build the sogen as a shared library (without the samples and tests)" OFF) set(MOMO_REFLECTION_LEVEL "0" CACHE STRING "Reflection level for the build") message(STATUS "Reflection level is set to: ${MOMO_REFLECTION_LEVEL}") @@ -32,7 +32,7 @@ set(ENV{ARCHFLAGS} "nope") ########################################## -project(emulator LANGUAGES C CXX) +project(sogen LANGUAGES C CXX) enable_testing() ########################################## From b980ff6277570c7492f62df245200712a48852e2 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 08:37:02 +0200 Subject: [PATCH 074/184] Fix crash is module is nullptr --- src/analyzer/main.cpp | 2 +- src/analyzer/object_watching.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index d8a6c832..04763617 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -129,7 +129,7 @@ namespace const auto rip = state->win_emu_.emu().read_instruction_pointer(); const auto* mod = state->win_emu_.mod_manager.find_by_address(rip); const auto is_main_access = - mod == state->win_emu_.mod_manager.executable || state->modules_.contains(mod->name); + mod && (mod == state->win_emu_.mod_manager.executable || state->modules_.contains(mod->name)); if (!is_main_access && !state->verbose_) { diff --git a/src/analyzer/object_watching.hpp b/src/analyzer/object_watching.hpp index 3ba81167..fa0d3f32 100644 --- a/src/analyzer/object_watching.hpp +++ b/src/analyzer/object_watching.hpp @@ -15,7 +15,7 @@ emulator_hook* watch_object(windows_emulator& emu, const std::setname); + const auto is_main_access = mod && (mod == emu.mod_manager.executable || modules.contains(mod->name)); if (!verbose && !is_main_access) { From 74bff9358092951ccebb119691bb33a1082cdab0 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 08:40:29 +0200 Subject: [PATCH 075/184] Print on unknown exception --- src/analyzer/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 04763617..aac0d2af 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -685,10 +685,10 @@ namespace catch (std::exception& e) { puts(e.what()); - -#if defined(_WIN32) && 0 - MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); -#endif + } + catch (...) + { + puts("An unknown exception occured"); } return 1; From 5fbf0659373f552b81da135836dfaed7686d662a Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 10:03:12 +0200 Subject: [PATCH 076/184] Handle debug strings via callback --- src/analyzer/analysis.cpp | 6 ++++++ src/windows-emulator/syscalls/event.cpp | 4 ++-- src/windows-emulator/windows_emulator.hpp | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index 3ff57d84..a8944573 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -36,6 +36,11 @@ namespace STR_VIEW_VA(details), rip, c.win_emu->process.previous_ip); } + void handle_debug_string(const analysis_context& c, const std::string_view details) + { + c.win_emu->log.info("--> Debug string: %.*s\n", STR_VIEW_VA(details)); + } + void handle_generic_activity(const analysis_context& c, const std::string_view details) { c.win_emu->log.print(color::dark_gray, "%.*s\n", STR_VIEW_VA(details)); @@ -442,6 +447,7 @@ void register_analysis_callbacks(analysis_context& c) cb.on_thread_set_name = make_callback(c, handle_thread_set_name); cb.on_instruction = make_callback(c, handle_instruction); + cb.on_debug_string = make_callback(c, handle_debug_string); cb.on_generic_access = make_callback(c, handle_generic_access); cb.on_generic_activity = make_callback(c, handle_generic_activity); cb.on_suspicious_activity = make_callback(c, handle_suspicious_activity); diff --git a/src/windows-emulator/syscalls/event.cpp b/src/windows-emulator/syscalls/event.cpp index a2c17b76..7c058965 100644 --- a/src/windows-emulator/syscalls/event.cpp +++ b/src/windows-emulator/syscalls/event.cpp @@ -9,11 +9,11 @@ namespace syscalls { if (handle == DBWIN_DATA_READY) { - if (c.proc.dbwin_buffer) + if (c.proc.dbwin_buffer && c.win_emu.callbacks.on_debug_string) { constexpr auto pid_length = 4; const auto debug_data = read_string(c.win_emu.memory, c.proc.dbwin_buffer + pid_length); - c.win_emu.log.info("--> Debug string: %s\n", debug_data.c_str()); + c.win_emu.callbacks.on_debug_string(debug_data); } return STATUS_SUCCESS; diff --git a/src/windows-emulator/windows_emulator.hpp b/src/windows-emulator/windows_emulator.hpp index c6732a30..982a1f82 100644 --- a/src/windows-emulator/windows_emulator.hpp +++ b/src/windows-emulator/windows_emulator.hpp @@ -32,6 +32,7 @@ struct emulator_callbacks : module_manager::callbacks, process_context::callback opt_func on_generic_access{}; opt_func on_generic_activity{}; opt_func on_suspicious_activity{}; + opt_func on_debug_string{}; opt_func on_instruction{}; opt_func on_ioctrl{}; }; From 94687d73fe5976b1265af106b6116922f3a4ef53 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 11:18:05 +0200 Subject: [PATCH 077/184] Small fixes --- src/analyzer/analysis.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index a8944573..9f3a7d09 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -54,7 +54,7 @@ namespace void handle_memory_allocate(const analysis_context& c, const uint64_t address, const uint64_t length, const memory_permission permission, const bool commit) { - const auto* action = commit ? "Committed" : "Allocated"; + const auto* action = commit ? "Committed" : "Allocating"; c.win_emu->log.print(is_executable(permission) ? color::gray : color::dark_gray, "--> %s 0x%" PRIx64 " - 0x%" PRIx64 " (%s)\n", action, address, address + length, @@ -170,6 +170,11 @@ namespace print_module_name(*c.win_emu, 0); print_arg_as_string(*c.win_emu, 1); } + else if (function == "lstrcmpi") + { + print_arg_as_string(*c.win_emu, 0); + print_arg_as_string(*c.win_emu, 1); + } } bool is_thread_alive(const analysis_context& c, const uint32_t thread_id) From f9cee1837c3ef450a6b61ff3a4d2550945379c6f Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 12:43:35 +0200 Subject: [PATCH 078/184] Print compare input --- src/analyzer/analysis.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index 9f3a7d09..b7b9f7d1 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -170,7 +170,7 @@ namespace print_module_name(*c.win_emu, 0); print_arg_as_string(*c.win_emu, 1); } - else if (function == "lstrcmpi") + else if (function == "lstrcmp" || function == "lstrcmpi") { print_arg_as_string(*c.win_emu, 0); print_arg_as_string(*c.win_emu, 1); From 832570eddac4a3b6c8783dbd43da4c3a6aa79675 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 12:43:49 +0200 Subject: [PATCH 079/184] Support ignored functions and interesting modules --- page/src/settings.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/page/src/settings.ts b/page/src/settings.ts index 067edf3e..de6ada8b 100644 --- a/page/src/settings.ts +++ b/page/src/settings.ts @@ -6,6 +6,8 @@ export interface Settings { persist: boolean; execAccess: boolean; wasm64: boolean; + ignoredFunctions: string[]; + interestingModules: string[]; } export function createDefaultSettings(): Settings { @@ -17,6 +19,8 @@ export function createDefaultSettings(): Settings { persist: false, execAccess: true, wasm64: false, + ignoredFunctions: [], + interestingModules: [], }; } @@ -69,5 +73,15 @@ export function translateSettings(settings: Settings): string[] { switches.push("-x"); } + settings.ignoredFunctions.forEach((f) => { + switches.push("-i"); + switches.push(f); + }); + + settings.interestingModules.forEach((m) => { + switches.push("-m"); + switches.push(m); + }); + return switches; } From d73445d8681f08fe0f26b5782d81235b35c104b7 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 17:07:00 +0200 Subject: [PATCH 080/184] Support interesting modules and ignored functions --- page/src/components/item-list.tsx | 81 +++++++++++++++++++++++++++ page/src/components/settings-menu.tsx | 48 ++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 page/src/components/item-list.tsx diff --git a/page/src/components/item-list.tsx b/page/src/components/item-list.tsx new file mode 100644 index 00000000..855d7c63 --- /dev/null +++ b/page/src/components/item-list.tsx @@ -0,0 +1,81 @@ +import { Input } from "./ui/input"; +import { Button } from "./ui/button"; +import { Plus, Trash } from "react-bootstrap-icons"; +import { Label } from "./ui/label"; + +interface ItemListProps { + title: string; + items: string[]; + onChange: (items: string[]) => void; +} + +export function ItemList(props: ItemListProps) { + const removeItem = (index: number) => { + const newItems = [...props.items]; + newItems.splice(index, 1); + props.onChange(newItems); + }; + + const addItem = (item: string) => { + if (item.length == 0) { + return; + } + + const newItems = props.items.concat(item); + props.onChange(newItems); + }; + + return ( +
+
+

{props.title}

+ {/*

+ Set the settings for the emulation. +

*/} +
+ +
+ {props.items.map((item, index) => { + return ( +
+ + +
+ ); + })} +
+ +
{ + const nameInput = (e.target as any).elements.name; + const newItem = nameInput.value; + nameInput.value = ""; + + addItem(newItem); + e.preventDefault(); + }} + > +
+ + +
+
+
+ ); +} diff --git a/page/src/components/settings-menu.tsx b/page/src/components/settings-menu.tsx index 5ff10b12..f080f33c 100644 --- a/page/src/components/settings-menu.tsx +++ b/page/src/components/settings-menu.tsx @@ -4,6 +4,14 @@ import { Label } from "./ui/label"; import { Settings } from "@/settings"; import { TextTooltip } from "./text-tooltip"; +import { ItemList } from "./item-list"; + +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { ChevronDown } from "react-bootstrap-icons"; interface SettingsMenuProps { settings: Settings; @@ -167,6 +175,46 @@ export class SettingsMenu extends React.Component { } /> + + + + +
+ + +
+
+
+ + this.setState({ ignoredFunctions: items })} + /> + +
+ + + + +
+ + +
+
+
+ + this.setState({ interestingModules: items })} + /> + +
); } From 2681c7c97e3b97641e2c97c1e212ac489f847528 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 10 Aug 2025 17:33:26 +0200 Subject: [PATCH 081/184] Overflow fix --- page/src/components/item-list.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/page/src/components/item-list.tsx b/page/src/components/item-list.tsx index 855d7c63..a76b2916 100644 --- a/page/src/components/item-list.tsx +++ b/page/src/components/item-list.tsx @@ -34,14 +34,16 @@ export function ItemList(props: ItemListProps) {

*/} -
+
{props.items.map((item, index) => { return (
- +
))}
@@ -172,7 +165,7 @@ export function LandingPage() {

Powerful Features

-

+

Built from the ground up for performance and accuracy in Windows process emulation

@@ -182,7 +175,7 @@ export function LandingPage() { {features.map((feature, index) => (
{feature.icon}
- + {feature.title}
-

+

{feature.description}

@@ -206,13 +199,13 @@ export function LandingPage() { {/* Use Cases */} -
+

Perfect For Your Research

-

+

Designed for researchers who need precise control over Windows process execution

@@ -222,7 +215,7 @@ export function LandingPage() { {useCases.map((useCase, index) => (
{useCase.icon}
@@ -230,7 +223,7 @@ export function LandingPage() {

{useCase.title}

-

{useCase.description}

+

{useCase.description}

))}
@@ -244,7 +237,7 @@ export function LandingPage() {

See Sogen in Action

-

+

Watch a comprehensive overview of the emulator's capabilities and discover how it can accelerate your research workflow.

@@ -253,7 +246,7 @@ export function LandingPage() {
-
+
+
+ {["wY9Q0DhodOQ"].map((value, index) => ( + + ))}
From a54c46c4a09de34988fa90f566fc871bc03dfacc Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 23 Aug 2025 12:34:16 +0200 Subject: [PATCH 164/184] Add link titles --- page/src/landing-page.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/page/src/landing-page.tsx b/page/src/landing-page.tsx index 8cc0f986..9d8e28ce 100644 --- a/page/src/landing-page.tsx +++ b/page/src/landing-page.tsx @@ -313,12 +313,14 @@ export function LandingPage() { @@ -326,6 +328,7 @@ export function LandingPage() { From f9428b1ddff2d71d83c1bc9148682164e6b593c2 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 23 Aug 2025 13:06:24 +0200 Subject: [PATCH 165/184] Use buttons as children --- page/src/landing-page.tsx | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/page/src/landing-page.tsx b/page/src/landing-page.tsx index 9d8e28ce..29587483 100644 --- a/page/src/landing-page.tsx +++ b/page/src/landing-page.tsx @@ -108,23 +108,29 @@ export function LandingPage() { @@ -262,21 +268,27 @@ export function LandingPage() { From 0cdf5b4aa6adf1a3f06eb45a7c7dcc2d6a251fc7 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 23 Aug 2025 13:11:10 +0200 Subject: [PATCH 166/184] Less annoying button --- page/src/landing-page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/page/src/landing-page.tsx b/page/src/landing-page.tsx index 29587483..d1610e00 100644 --- a/page/src/landing-page.tsx +++ b/page/src/landing-page.tsx @@ -110,10 +110,10 @@ export function LandingPage() {
{/* CTA Section */} -
+

Ready to Start Emulating? From 6244b21af6daa1d0f9ac8ecbcd9e9bd418cdef1d Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Sat, 23 Aug 2025 17:32:07 +0200 Subject: [PATCH 169/184] Update Header.tsx --- page/src/Header.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/page/src/Header.tsx b/page/src/Header.tsx index fbf2f934..53a40e53 100644 --- a/page/src/Header.tsx +++ b/page/src/Header.tsx @@ -6,8 +6,7 @@ export interface HeaderProps { preload?: string[]; } -const image = - "https://repository-images.githubusercontent.com/842883987/9e56f43b-4afd-464d-85b9-d7e555751a39"; +const image = "https://momo5502.com/emulator/preview.png"; export function Header(props: HeaderProps) { return ( From 0a8a5a8355b0982e86f0a1ad4cdbbcedb861cfd7 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 23 Aug 2025 18:09:38 +0200 Subject: [PATCH 170/184] Better header --- page/index.html | 26 +++++++++----------------- page/src/Header.tsx | 2 +- page/src/landing-page.tsx | 4 ++-- page/src/playground.tsx | 2 +- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/page/index.html b/page/index.html index e751201f..d6487a55 100644 --- a/page/index.html +++ b/page/index.html @@ -19,42 +19,34 @@ content="Sogen is a high-performance Windows user space emulator that can emulate windows processes. It is ideal for security-, DRM- or malware research." data-react-helmet="true" /> - - + + - + diff --git a/page/src/Header.tsx b/page/src/Header.tsx index 53a40e53..8ab97bdc 100644 --- a/page/src/Header.tsx +++ b/page/src/Header.tsx @@ -19,7 +19,7 @@ export function Header(props: HeaderProps) { - + diff --git a/page/src/landing-page.tsx b/page/src/landing-page.tsx index 321a9605..bff1ece1 100644 --- a/page/src/landing-page.tsx +++ b/page/src/landing-page.tsx @@ -80,8 +80,8 @@ export function LandingPage() { return ( <>
{/* Hero Section with Animated Background */} diff --git a/page/src/playground.tsx b/page/src/playground.tsx index 40bec190..9a103a1a 100644 --- a/page/src/playground.tsx +++ b/page/src/playground.tsx @@ -293,7 +293,7 @@ export class Playground extends React.Component< <>
Date: Sun, 24 Aug 2025 06:42:15 +0200 Subject: [PATCH 171/184] Update landing-page.tsx --- page/src/landing-page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/page/src/landing-page.tsx b/page/src/landing-page.tsx index bff1ece1..982c9d7f 100644 --- a/page/src/landing-page.tsx +++ b/page/src/landing-page.tsx @@ -30,7 +30,7 @@ export function LandingPage() { icon: , title: "Hooking Capabilities", description: - "Provides flexible hooking interfaces to intercept memory access, code execution and much more", + "Provides powerful hooking interfaces to intercept memory access, code execution and much more", accent: "from-[#ffcb00] to-[#da6000]", }, { From bf03007603ff5cb041f26f93450419e2e0cd8c59 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 24 Aug 2025 08:02:36 +0200 Subject: [PATCH 172/184] Remove useless mcp server --- .github/dependabot.yml | 6 - mcp/.gitignore | 41 -- mcp/README.md | 118 ----- mcp/package-lock.json | 1041 ---------------------------------------- mcp/package.json | 17 - mcp/server.js | 296 ------------ 6 files changed, 1519 deletions(-) delete mode 100644 mcp/.gitignore delete mode 100644 mcp/README.md delete mode 100644 mcp/package-lock.json delete mode 100644 mcp/package.json delete mode 100644 mcp/server.js diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c8d48837..00543ccc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,12 +18,6 @@ updates: interval: monthly open-pull-requests-limit: 100 - - package-ecosystem: "npm" - directory: "/mcp" - schedule: - interval: monthly - open-pull-requests-limit: 100 - - package-ecosystem: "cargo" directory: "/src/backends/icicle-emulator/icicle-bridge/" schedule: diff --git a/mcp/.gitignore b/mcp/.gitignore deleted file mode 100644 index 1a24826e..00000000 --- a/mcp/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Dependencies -node_modules/ -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Coverage directory used by tools like istanbul -coverage/ -*.lcov - -# nyc test coverage -.nyc_output - -# Environment variables -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -# Editor directories and files -.vscode/ -.idea/ -*.swp -*.swo -*~ - -# OS generated files -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -ehthumbs.db -Thumbs.db diff --git a/mcp/README.md b/mcp/README.md deleted file mode 100644 index da194167..00000000 --- a/mcp/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# Sogen MCP Server - -A Model Context Protocol (MCP) server that provides AI access to the sogen userspace emulator. - -## Setup - -1. Install dependencies: - ```bash - npm install - ``` - -2. Run the server: - ```bash - npm start - ``` - - Or for development with auto-restart: - ```bash - npm run dev - ``` - -## Structure - -- `server.js` - Main server implementation -- `package.json` - Node.js project configuration - -## Available Tools - -### `list_applications` -Lists all available applications in the sogen userspace emulator. - -**Parameters:** None - -**Example usage:** -```json -{ - "name": "list_applications", - "arguments": {} -} -``` - -### `run_application` -Executes a specific application from the allowed list in the sogen userspace emulator. - -**Parameters:** -- `application` (string, required): The name of the application to run (use `list_applications` to see available apps) -- `args` (array of strings, optional): Arguments to pass to the application -- `timeout` (number, optional): Timeout in milliseconds (default: 5000) - -**Example usage:** -```json -{ - "name": "run_application", - "arguments": { - "application": "echo", - "args": ["Hello from sogen!"], - "timeout": 3000 - } -} -``` - -## Adding More Tools - -To add additional tools: -1. Add the tool definition to the `ListToolsRequestSchema` handler -2. Add the implementation to the `CallToolRequestSchema` handler -3. Create the corresponding method in the `MyMCPServer` class - -## Execution Model - -The server uses an **analyzer-based execution model**: - -- Applications are not executed directly -- Instead, the server runs: `C:/analyer.exe -e C:/somedir [args...]` -- The analyzer handles the actual execution within the sogen environment -- All output comes from the analyzer process - -### Command Structure -``` -C:/analyer.exe -e C:/somedir [arguments...] -``` - -Where: -- `C:/analyer.exe` - The sogen analyzer executable -- `-e C:/somedir` - Analyzer flags and environment directory -- `` - The application from `get_applications()` -- `[arguments...]` - Optional arguments passed to the application - -## Implementation Required - -You need to provide the implementation for the `get_applications()` method in `server.js`. This method should: - -```javascript -async get_applications() { - // Return a Promise that resolves to a string array - // Example: return ['echo', 'ls', 'cat', 'grep']; -} -``` - -## Usage - -This server allows AI assistants to: -1. **List available applications** using `list_applications` -2. **Execute specific applications** using `run_application` with validation - -The server communicates over stdio and is designed for MCP-compatible clients. - -### Example Workflow -1. Call `list_applications` to see what's available -2. Call `run_application` with a valid application name and arguments - -## Next Steps - -1. **Implement `get_applications()` method** - Provide the actual implementation -2. Add application-specific argument validation -3. Implement resource handling for file access -4. Add comprehensive logging and monitoring -5. Consider per-application sandboxing for enhanced security diff --git a/mcp/package-lock.json b/mcp/package-lock.json deleted file mode 100644 index e0facaa3..00000000 --- a/mcp/package-lock.json +++ /dev/null @@ -1,1041 +0,0 @@ -{ - "name": "my-mcp-server", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "my-mcp-server", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.17.3" - } - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", - "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.6", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.2.tgz", - "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/zod": { - "version": "3.25.56", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.56.tgz", - "integrity": "sha512-rd6eEF3BTNvQnR2e2wwolfTmUTnp70aUTqr0oaGbHifzC3BKJsoV+Gat8vxUMR1hwOKBs6El+qWehrHbCpW6SQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - } - } -} diff --git a/mcp/package.json b/mcp/package.json deleted file mode 100644 index ee93ece1..00000000 --- a/mcp/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "sogen-mcp-server", - "version": "1.0.0", - "description": "MCP server for sogen userspace emulator", - "main": "server.js", - "type": "module", - "scripts": { - "start": "node server.js", - "dev": "node --watch server.js" - }, - "dependencies": { - "@modelcontextprotocol/sdk": "^1.17.3" - }, - "keywords": ["mcp", "server"], - "author": "", - "license": "MIT" -} diff --git a/mcp/server.js b/mcp/server.js deleted file mode 100644 index 2e473985..00000000 --- a/mcp/server.js +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/env node - -import { Server } from "@modelcontextprotocol/sdk/server/index.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { - CallToolRequestSchema, - ListToolsRequestSchema, -} from "@modelcontextprotocol/sdk/types.js"; -import { spawn } from "child_process"; -import path from "path"; -import { fileURLToPath } from "url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -class SogenMCPServer { - constructor() { - this.server = new Server( - { - name: "sogen-mcp-server", - version: "1.0.0", - }, - { - capabilities: { - tools: {}, - }, - } - ); - - this.setupToolHandlers(); - this.setupErrorHandling(); - } - - setupToolHandlers() { - // Handle tool listing - this.server.setRequestHandler(ListToolsRequestSchema, async () => { - return { - tools: [ - { - name: "list_applications", - description: - "List all available applications in the sogen userspace emulator", - inputSchema: { - type: "object", - properties: {}, - additionalProperties: false, - }, - }, - { - name: "run_application", - description: - "Execute a specific application in the sogen userspace emulator", - inputSchema: { - type: "object", - properties: { - application: { - type: "string", - description: - "The name of the application to run (use list_applications to see available apps)", - }, - args: { - type: "array", - items: { - type: "string", - }, - description: "Arguments to pass to the application", - default: [], - }, - timeout: { - type: "number", - description: "Timeout in milliseconds (default: 50000)", - default: 50000, - }, - }, - required: ["application"], - }, - }, - ], - }; - }); - - // Handle tool execution - this.server.setRequestHandler(CallToolRequestSchema, async (request) => { - const { name, arguments: args } = request.params; - - switch (name) { - case "list_applications": - return await this.listApplications(); - - case "run_application": - return await this.runApplication( - args.application, - args.args || [], - args.timeout || 50000 - ); - - default: - throw new Error(`Unknown tool: ${name}`); - } - }); - } - - async listApplications() { - try { - const applications = await this.get_applications(); - - return { - content: [ - { - type: "text", - text: `Available applications in sogen:\n\n${applications - .map((app) => `• ${app}`) - .join("\n")}\n\nTotal: ${applications.length} application(s)`, - }, - ], - }; - } catch (error) { - return { - content: [ - { - type: "text", - text: `Error listing applications: ${error.message}`, - }, - ], - }; - } - } - - async runApplication(applicationName, args = [], timeout = 5000) { - try { - // First, get the list of available applications to validate - const availableApps = await this.get_applications(); - - if (!availableApps.includes(applicationName)) { - return { - content: [ - { - type: "text", - text: `Error: Application '${applicationName}' is not available.\n\nAvailable applications:\n${availableApps - .map((app) => `• ${app}`) - .join("\n")}`, - }, - ], - }; - } - - return await this.executeApplication(applicationName, args, timeout); - } catch (error) { - return { - content: [ - { - type: "text", - text: `Error running application '${applicationName}': ${error.message}`, - }, - ], - }; - } - } - - async executeApplication(applicationName, args, timeout) { - return new Promise((resolve, reject) => { - // Get the parent directory (emulator root) - const emulatorRoot = path.dirname(__dirname); - - // Build the analyzer command: C:/analyer.exe -e C:/somedir - const analyzerPath = - "C:\\Users\\mauri\\Desktop\\emulator\\build\\vs2022\\artifacts-relwithdebinfo\\analyzer.exe"; - const analyzerArgs = [ - "-c", - "-e", - "C:\\Users\\mauri\\Desktop\\emulator\\src\\tools\\root", - applicationName, - ...args, - ]; - - const child = spawn(analyzerPath, analyzerArgs, { - cwd: "C:\\Users\\mauri\\Desktop\\emulator\\build\\vs2022\\artifacts-relwithdebinfo", - shell: true, - stdio: ["pipe", "pipe", "pipe"], - }); - - let stdout = ""; - let stderr = ""; - let timedOut = false; - - // Set up timeout - const timer = setTimeout(() => { - timedOut = true; - child.kill("SIGTERM"); - }, timeout); - - // Collect stdout - child.stdout.on("data", (data) => { - stdout += data.toString(); - }); - - // Collect stderr - child.stderr.on("data", (data) => { - stderr += data.toString(); - }); - - // Handle process completion - child.on("close", (code) => { - clearTimeout(timer); - - if (timedOut) { - resolve({ - content: [ - { - type: "text", - text: `Application '${applicationName}' timed out after ${timeout}ms\nAnalyzer command: ${analyzerPath} ${analyzerArgs.join( - " " - )}\nPartial stdout: ${stdout}\nPartial stderr: ${stderr}`, - }, - ], - }); - } else { - const output = []; - - if (stdout) { - output.push(`STDOUT:\n${stdout}`); - } - - if (stderr) { - output.push(`STDERR:\n${stderr}`); - } - - if (!stdout && !stderr) { - output.push("Application executed successfully with no output."); - } - - output.push(`Exit code: ${code}`); - - resolve({ - content: [ - { - type: "text", - text: `Application: ${applicationName}\nArguments: [${args.join( - ", " - )}]\nAnalyzer command: ${analyzerPath} ${analyzerArgs.join( - " " - )}\n\n${output.join("\n\n")}`, - }, - ], - }); - } - }); - - // Handle spawn errors - child.on("error", (error) => { - clearTimeout(timer); - resolve({ - content: [ - { - type: "text", - text: `Error executing application '${applicationName}' via analyzer: ${ - error.message - }\nAnalyzer command: ${analyzerPath} ${analyzerArgs.join(" ")}`, - }, - ], - }); - }); - }); - } - - async get_applications() { - return [ - "c:/test-sample.exe", - "c:/wukong/b1/Binaries/Win64/b1-Win64-Shipping.exe", - ]; - } - - setupErrorHandling() { - this.server.onerror = (error) => { - console.error("[MCP Error]", error); - }; - - process.on("SIGINT", async () => { - await this.server.close(); - process.exit(0); - }); - } - - async run() { - const transport = new StdioServerTransport(); - await this.server.connect(transport); - console.error("MCP Server running on stdio"); - } -} - -// Start the server -const server = new SogenMCPServer(); -server.run().catch((error) => { - console.error("Failed to start server:", error); - process.exit(1); -}); From 93c62d87eeeb71cccd50017f2b8e9c4fb88a0104 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:03:35 +0000 Subject: [PATCH 173/184] Build(deps): Bump deps/capstone from `2f85e93` to `9539045` Bumps [deps/capstone](https://github.com/capstone-engine/capstone) from `2f85e93` to `9539045`. - [Release notes](https://github.com/capstone-engine/capstone/releases) - [Commits](https://github.com/capstone-engine/capstone/compare/2f85e932c148bd126cc64fa42260bed116c2552f...9539045d675a30eed43869325f7f51cfc26de0b7) --- updated-dependencies: - dependency-name: deps/capstone dependency-version: 9539045d675a30eed43869325f7f51cfc26de0b7 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/capstone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/capstone b/deps/capstone index 2f85e932..9539045d 160000 --- a/deps/capstone +++ b/deps/capstone @@ -1 +1 @@ -Subproject commit 2f85e932c148bd126cc64fa42260bed116c2552f +Subproject commit 9539045d675a30eed43869325f7f51cfc26de0b7 From c9e3222dc1cfed74444828be6d738c85c41b8af9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:03:40 +0000 Subject: [PATCH 174/184] Build(deps): Bump deps/googletest from `a05c091` to `6986c2b` Bumps [deps/googletest](https://github.com/google/googletest) from `a05c091` to `6986c2b`. - [Release notes](https://github.com/google/googletest/releases) - [Commits](https://github.com/google/googletest/compare/a05c0915074bcd1b82f232e081da9bb6c205c28d...6986c2b575f77135401a4e1c65a7a42f20e18fef) --- updated-dependencies: - dependency-name: deps/googletest dependency-version: 6986c2b575f77135401a4e1c65a7a42f20e18fef dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- deps/googletest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/googletest b/deps/googletest index a05c0915..6986c2b5 160000 --- a/deps/googletest +++ b/deps/googletest @@ -1 +1 @@ -Subproject commit a05c0915074bcd1b82f232e081da9bb6c205c28d +Subproject commit 6986c2b575f77135401a4e1c65a7a42f20e18fef From c63f6731f3ef0ae0e8f6a1c00e7a795e308d3ad2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:06:33 +0000 Subject: [PATCH 175/184] Build(deps): Bump actions/upload-pages-artifact from 3 to 4 Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 50a4ad20..abe64626 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -712,7 +712,7 @@ jobs: uses: actions/configure-pages@v5 - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: path: ./page/dist From 11651c23f17ae84b3a694edf65e14f2c8926e0d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:07:36 +0000 Subject: [PATCH 176/184] Build(deps-dev): Bump @eslint/js from 9.33.0 to 9.34.0 in /page Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.33.0 to 9.34.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.34.0/packages/js) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.34.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 21 +++++++++++++++++---- page/package.json | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 58a24fa2..c91476d4 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -45,7 +45,7 @@ "wasm-feature-detect": "^1.8.0" }, "devDependencies": { - "@eslint/js": "^9.30.0", + "@eslint/js": "^9.34.0", "@types/node": "^24.3.0", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", @@ -998,9 +998,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { @@ -4508,6 +4508,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", diff --git a/page/package.json b/page/package.json index 8a9c47b3..1f1abc2f 100644 --- a/page/package.json +++ b/page/package.json @@ -47,7 +47,7 @@ "wasm-feature-detect": "^1.8.0" }, "devDependencies": { - "@eslint/js": "^9.30.0", + "@eslint/js": "^9.34.0", "@types/node": "^24.3.0", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", From b834feadaeefc595015db51560024ee7c9879290 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:07:48 +0000 Subject: [PATCH 177/184] Build(deps): Bump react-router-dom from 7.8.1 to 7.8.2 in /page Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.8.1 to 7.8.2. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.8.2/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-version: 7.8.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 16 ++++++++-------- page/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 58a24fa2..be741f09 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -35,7 +35,7 @@ "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.4", - "react-router-dom": "^7.8.1", + "react-router-dom": "^7.8.2", "react-window": "^1.8.11", "shell-quote": "^1.8.3", "tailwind-merge": "^3.3.1", @@ -5821,9 +5821,9 @@ } }, "node_modules/react-router": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.1.tgz", - "integrity": "sha512-5cy/M8DHcG51/KUIka1nfZ2QeylS4PJRs6TT8I4PF5axVsI5JUxp0hC0NZ/AEEj8Vw7xsEoD7L/6FY+zoYaOGA==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", + "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -5843,12 +5843,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.1.tgz", - "integrity": "sha512-NkgBCF3sVgCiAWIlSt89GR2PLaksMpoo3HDCorpRfnCEfdtRPLiuTf+CNXvqZMI5SJLZCLpVCvcZrTdtGW64xQ==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.2.tgz", + "integrity": "sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==", "license": "MIT", "dependencies": { - "react-router": "7.8.1" + "react-router": "7.8.2" }, "engines": { "node": ">=20.0.0" diff --git a/page/package.json b/page/package.json index 8a9c47b3..92526d75 100644 --- a/page/package.json +++ b/page/package.json @@ -37,7 +37,7 @@ "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", "react-resizable-panels": "^3.0.4", - "react-router-dom": "^7.8.1", + "react-router-dom": "^7.8.2", "react-window": "^1.8.11", "shell-quote": "^1.8.3", "tailwind-merge": "^3.3.1", From 414aee8c6eca46c46982edc3f0df30e1188c39e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:08:05 +0000 Subject: [PATCH 178/184] Build(deps): Bump lucide-react from 0.540.0 to 0.541.0 in /page Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.540.0 to 0.541.0. - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.541.0/packages/lucide-react) --- updated-dependencies: - dependency-name: lucide-react dependency-version: 0.541.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 8 ++++---- page/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 58a24fa2..b146dae9 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -27,7 +27,7 @@ "clsx": "^2.1.1", "flatbuffers": "^25.2.10", "jszip": "^3.10.1", - "lucide-react": "^0.540.0", + "lucide-react": "^0.541.0", "pe-library": "^1.0.1", "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", @@ -5302,9 +5302,9 @@ } }, "node_modules/lucide-react": { - "version": "0.540.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.540.0.tgz", - "integrity": "sha512-armkCAqQvO62EIX4Hq7hqX/q11WSZu0Jd23cnnqx0/49yIxGXyL/zyZfBxNN9YDx0ensPTb4L+DjTh3yQXUxtQ==", + "version": "0.541.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.541.0.tgz", + "integrity": "sha512-s0Vircsu5WaGv2KoJZ5+SoxiAJ3UXV5KqEM3eIFDHaHkcLIFdIWgXtZ412+Gh02UsdS7Was+jvEpBvPCWQISlg==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" diff --git a/page/package.json b/page/package.json index 8a9c47b3..cedac9f2 100644 --- a/page/package.json +++ b/page/package.json @@ -29,7 +29,7 @@ "clsx": "^2.1.1", "flatbuffers": "^25.2.10", "jszip": "^3.10.1", - "lucide-react": "^0.540.0", + "lucide-react": "^0.541.0", "pe-library": "^1.0.1", "react": "^19.1.1", "react-bootstrap-icons": "^1.11.6", From 364791f5cc6657585eab0ec79d38850571c4d304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 06:08:11 +0000 Subject: [PATCH 179/184] Build(deps-dev): Bump eslint from 9.33.0 to 9.34.0 in /page Bumps [eslint](https://github.com/eslint/eslint) from 9.33.0 to 9.34.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.33.0...v9.34.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.34.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 16 ++++++++-------- page/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index 58a24fa2..77afa6dd 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -52,7 +52,7 @@ "@types/react-helmet": "^6.1.11", "@types/shell-quote": "^1.7.5", "@vitejs/plugin-react": "^5.0.1", - "eslint": "^9.33.0", + "eslint": "^9.34.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", @@ -998,9 +998,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { @@ -4387,9 +4387,9 @@ } }, "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { @@ -4399,7 +4399,7 @@ "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", + "@eslint/js": "9.34.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", diff --git a/page/package.json b/page/package.json index 8a9c47b3..f069ddcb 100644 --- a/page/package.json +++ b/page/package.json @@ -54,7 +54,7 @@ "@types/react-helmet": "^6.1.11", "@types/shell-quote": "^1.7.5", "@vitejs/plugin-react": "^5.0.1", - "eslint": "^9.33.0", + "eslint": "^9.34.0", "eslint-plugin-react-hooks": "^6.0.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", From 37310a308b910d7baca286c9c50c7fd841474422 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Sun, 24 Aug 2025 08:43:23 +0200 Subject: [PATCH 180/184] Fix Node.js analyzer --- cmake/compiler-env.cmake | 4 ++++ src/analyzer/analysis.cpp | 4 ++-- src/analyzer/main.cpp | 4 ++-- src/windows-emulator/logger.cpp | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cmake/compiler-env.cmake b/cmake/compiler-env.cmake index 8cd65263..f8b428bd 100644 --- a/cmake/compiler-env.cmake +++ b/cmake/compiler-env.cmake @@ -144,6 +144,10 @@ if(CMAKE_SYSTEM_NAME MATCHES "Emscripten") endif() if(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) + add_compile_definitions( + MOMO_EMSCRIPTEN_SUPPORT_NODEJS=1 + ) + add_link_options( -lnodefs.js -sNODERAWFS=1 -sENVIRONMENT=node diff --git a/src/analyzer/analysis.cpp b/src/analyzer/analysis.cpp index 4d518a6e..29697e4a 100644 --- a/src/analyzer/analysis.cpp +++ b/src/analyzer/analysis.cpp @@ -5,7 +5,7 @@ #include "windows_emulator.hpp" #include -#ifdef OS_EMSCRIPTEN +#if defined(OS_EMSCRIPTEN) && !defined(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) #include #endif @@ -299,7 +299,7 @@ namespace auto& win_emu = *c.win_emu; update_import_access(c, address); -#ifdef OS_EMSCRIPTEN +#if defined(OS_EMSCRIPTEN) && !defined(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) if ((win_emu.get_executed_instructions() % 0x20000) == 0) { debugger::event_context ec{.win_emu = win_emu}; diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index fa79f325..ae019121 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -14,7 +14,7 @@ #include #include -#ifdef OS_EMSCRIPTEN +#if defined(OS_EMSCRIPTEN) && !defined(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) #include #endif @@ -275,7 +275,7 @@ namespace }}; std::optional exit_status{}; -#ifdef OS_EMSCRIPTEN +#if defined(OS_EMSCRIPTEN) && !defined(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) const auto _1 = utils::finally([&] { debugger::handle_exit(win_emu, exit_status); // }); diff --git a/src/windows-emulator/logger.cpp b/src/windows-emulator/logger.cpp index a1ffd387..fbd46ffd 100644 --- a/src/windows-emulator/logger.cpp +++ b/src/windows-emulator/logger.cpp @@ -8,7 +8,7 @@ namespace #ifdef _WIN32 #define COLOR(win, posix, web) win using color_type = WORD; -#elif defined(__EMSCRIPTEN__) +#elif defined(__EMSCRIPTEN__) && !defined(MOMO_EMSCRIPTEN_SUPPORT_NODEJS) #define COLOR(win, posix, web) web using color_type = const char*; #else From aa1a49ad6f066abbdce0b4da30ec8519371c99a2 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 24 Aug 2025 09:32:59 +0200 Subject: [PATCH 181/184] Get rid of static variables --- src/analyzer/main.cpp | 24 ++++++++++++++---------- src/analyzer/object_watching.hpp | 20 +++++++++++++------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index ae019121..8f7f109b 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -66,6 +66,8 @@ namespace scoped_hook env_ptr_hook_; scoped_hook params_hook_; scoped_hook ldr_hook_; + std::shared_ptr params_state = std::make_shared(); + std::shared_ptr ldr_state = std::make_shared(); std::set> modules_; bool verbose_; @@ -179,8 +181,8 @@ namespace auto state = std::make_shared(win_emu, modules, verbose); - state->params_hook_ = watch_object(win_emu, modules, win_emu.process.process_params, verbose); - state->ldr_hook_ = watch_object(win_emu, modules, win_emu.process.peb.read().Ldr, verbose); + state->params_hook_ = watch_object(win_emu, modules, win_emu.process.process_params, verbose, state->params_state); + state->ldr_hook_ = watch_object(win_emu, modules, win_emu.process.peb.read().Ldr, verbose, state->ldr_state); const auto update_env_hook = [state] { state->env_ptr_hook_ = install_env_hook(state); // @@ -192,14 +194,15 @@ namespace [state, update_env = std::move(update_env_hook)](const uint64_t, const void*, size_t) { const auto new_ptr = state->win_emu_.process.peb.read().ProcessParameters; state->params_hook_ = watch_object( - state->win_emu_, state->modules_, new_ptr, state->verbose_); + state->win_emu_, state->modules_, new_ptr, state->verbose_, state->params_state); update_env(); }); win_emu.emu().hook_memory_write( win_emu.process.peb.value() + offsetof(PEB64, Ldr), 0x8, [state](const uint64_t, const void*, size_t) { const auto new_ptr = state->win_emu_.process.peb.read().Ldr; - state->ldr_hook_ = watch_object(state->win_emu_, state->modules_, new_ptr, state->verbose_); + state->ldr_hook_ = + watch_object(state->win_emu_, state->modules_, new_ptr, state->verbose_, state->ldr_state); }); #endif } @@ -541,7 +544,10 @@ namespace continue; } - auto read_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto read_count = std::make_shared(0); + const auto write_count = std::make_shared(0); + + auto read_handler = [&, section, concise_logging, read_count](const uint64_t address, const void*, size_t) { const auto rip = win_emu->emu().read_instruction_pointer(); if (!win_emu->mod_manager.executable->is_within(rip)) { @@ -550,8 +556,7 @@ namespace if (concise_logging) { - static uint64_t count{0}; - ++count; + const auto count = ++*read_count; if (count > 20 && count % 100000 != 0) { return; @@ -562,7 +567,7 @@ namespace section.name.c_str(), address, rip); }; - const auto write_handler = [&, section, concise_logging](const uint64_t address, const void*, size_t) { + const auto write_handler = [&, section, concise_logging, write_count](const uint64_t address, const void*, size_t) { const auto rip = win_emu->emu().read_instruction_pointer(); if (!win_emu->mod_manager.executable->is_within(rip)) { @@ -571,8 +576,7 @@ namespace if (concise_logging) { - static uint64_t count{0}; - ++count; + const auto count = ++*write_count; if (count > 100 && count % 100000 != 0) { return; diff --git a/src/analyzer/object_watching.hpp b/src/analyzer/object_watching.hpp index c8cc493e..c1473ab1 100644 --- a/src/analyzer/object_watching.hpp +++ b/src/analyzer/object_watching.hpp @@ -2,17 +2,25 @@ #include "reflect_type_info.hpp" #include +#include #include +struct object_watching_state +{ + std::unordered_set logged_addresses{}; +}; + template emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, emulator_object object, - const auto verbose) + const auto verbose, + std::shared_ptr shared_state = std::make_unique()) { const reflect_type_info info{}; return emu.emu().hook_memory_read( object.value(), static_cast(object.size()), - [i = std::move(info), object, &emu, verbose, modules](const uint64_t address, const void*, const size_t size) { + [i = std::move(info), object, &emu, verbose, modules, state = std::move(shared_state)](const uint64_t address, const void*, + const size_t size) { const auto rip = emu.emu().read_instruction_pointer(); const auto* mod = emu.mod_manager.find_by_address(rip); const auto is_main_access = !mod || (mod == emu.mod_manager.executable || modules.contains(mod->name)); @@ -24,12 +32,10 @@ emulator_hook* watch_object(windows_emulator& emu, const std::set logged_addresses{}; - bool is_new = false; for (size_t j = 0; j < size; ++j) { - is_new |= logged_addresses.insert(address + j).second; + is_new |= state->logged_addresses.insert(address + j).second; } if (!is_new) @@ -71,7 +77,7 @@ emulator_hook* watch_object(windows_emulator& emu, const std::set emulator_hook* watch_object(windows_emulator& emu, const std::set>& modules, const uint64_t address, - const auto verbose) + const auto verbose, std::shared_ptr state = std::make_unique()) { - return watch_object(emu, modules, emulator_object{emu.emu(), address}, verbose); + return watch_object(emu, modules, emulator_object{emu.emu(), address}, verbose, std::move(state)); } From da822a901e329abdcad55880812078cb20836f51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 08:18:33 +0000 Subject: [PATCH 182/184] Build(deps-dev): Bump @types/react from 19.1.10 to 19.1.11 in /page Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.10 to 19.1.11. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-version: 19.1.11 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 21 ++++----------------- page/package.json | 2 +- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index e2f93aee..db807e9f 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -47,7 +47,7 @@ "devDependencies": { "@eslint/js": "^9.34.0", "@types/node": "^24.3.0", - "@types/react": "^19.1.10", + "@types/react": "^19.1.11", "@types/react-dom": "^19.1.7", "@types/react-helmet": "^6.1.11", "@types/shell-quote": "^1.7.5", @@ -3631,9 +3631,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", - "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", + "version": "19.1.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.11.tgz", + "integrity": "sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -4508,19 +4508,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", diff --git a/page/package.json b/page/package.json index bf670b79..d4e29c9b 100644 --- a/page/package.json +++ b/page/package.json @@ -49,7 +49,7 @@ "devDependencies": { "@eslint/js": "^9.34.0", "@types/node": "^24.3.0", - "@types/react": "^19.1.10", + "@types/react": "^19.1.11", "@types/react-dom": "^19.1.7", "@types/react-helmet": "^6.1.11", "@types/shell-quote": "^1.7.5", From 752d625820d85ae78b76c12f23dce9ba0d2399bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 08:18:35 +0000 Subject: [PATCH 183/184] Build(deps): Bump react-resizable-panels from 3.0.4 to 3.0.5 in /page Bumps [react-resizable-panels](https://github.com/bvaughn/react-resizable-panels) from 3.0.4 to 3.0.5. - [Release notes](https://github.com/bvaughn/react-resizable-panels/releases) - [Commits](https://github.com/bvaughn/react-resizable-panels/compare/3.0.4...3.0.5) --- updated-dependencies: - dependency-name: react-resizable-panels dependency-version: 3.0.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- page/package-lock.json | 21 ++++----------------- page/package.json | 2 +- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/page/package-lock.json b/page/package-lock.json index e2f93aee..5be2154b 100644 --- a/page/package-lock.json +++ b/page/package-lock.json @@ -34,7 +34,7 @@ "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", - "react-resizable-panels": "^3.0.4", + "react-resizable-panels": "^3.0.5", "react-router-dom": "^7.8.2", "react-window": "^1.8.11", "shell-quote": "^1.8.3", @@ -4508,19 +4508,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -5824,9 +5811,9 @@ } }, "node_modules/react-resizable-panels": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-3.0.4.tgz", - "integrity": "sha512-8Y4KNgV94XhUvI2LeByyPIjoUJb71M/0hyhtzkHaqpVHs+ZQs8b627HmzyhmVYi3C9YP6R+XD1KmG7hHjEZXFQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-3.0.5.tgz", + "integrity": "sha512-3z1yN25DMTXLg2wfyFrW32r5k4WEcUa3F7cJ2EgtNK07lnOs4mpM8yWLGunCpkhcQRwJX4fqoLcIh/pHPxzlmQ==", "license": "MIT", "peerDependencies": { "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", diff --git a/page/package.json b/page/package.json index bf670b79..9b31a2c0 100644 --- a/page/package.json +++ b/page/package.json @@ -36,7 +36,7 @@ "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-helmet": "^6.1.0", - "react-resizable-panels": "^3.0.4", + "react-resizable-panels": "^3.0.5", "react-router-dom": "^7.8.2", "react-window": "^1.8.11", "shell-quote": "^1.8.3", From da6be67bbee14b04920f3ff9b3554a31e6db2609 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 24 Aug 2025 12:07:39 +0200 Subject: [PATCH 184/184] Update unicorn --- deps/unicorn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/unicorn b/deps/unicorn index f5108b33..79f4f7a5 160000 --- a/deps/unicorn +++ b/deps/unicorn @@ -1 +1 @@ -Subproject commit f5108b33a55db0dee2285cf0cc600e7e71240be0 +Subproject commit 79f4f7a51eb4e8360ab08a51ce6d68b8ae24cd1b