Full Code of diasurgical/DevilutionX for AI

master 4f6a172aa37e cached
1343 files
14.3 MB
3.8M tokens
6711 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (15,187K chars total). Download the full file to get everything.
Repository: diasurgical/DevilutionX
Branch: master
Commit: 4f6a172aa37e
Files: 1343
Total size: 14.3 MB

Directory structure:
gitextract_h4wrmfpe/

├── .devcontainer/
│   ├── Dockerfile
│   ├── devcontainer.json
│   └── fluxbox/
│       ├── apps
│       └── menu
├── .editorconfig
├── .gdbinit
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── 3ds.yml
│       ├── Android.yml
│       ├── Linux_aarch64.yml
│       ├── Linux_x86.yml
│       ├── Linux_x86_64.yml
│       ├── Linux_x86_64_SDL1.yml
│       ├── Linux_x86_64_SDL3_test.yml
│       ├── Linux_x86_64_test.yml
│       ├── PS4.yml
│       ├── PS5.yml
│       ├── Windows9x_MinGW.yml
│       ├── Windows_MSVC_x64.yml
│       ├── Windows_MinGW_x64.yml
│       ├── Windows_MinGW_x86.yml
│       ├── Windows_XP_32bit.yml
│       ├── amiga-m68k.yml
│       ├── cache-cleanup.yml
│       ├── clang-format-check.yml
│       ├── clang-tidy-check.yml
│       ├── iOS.yml
│       ├── macOS_arm64.yml
│       ├── macOS_x86_64.yml
│       ├── miyoo_mini_release.yml
│       ├── opendingux_release.yml
│       ├── retrofw_release.yml
│       ├── s390x_qemu_big_endian_tests.yml
│       ├── src_dist_release.yml
│       ├── switch.yml
│       ├── translations.yml
│       ├── vita.yml
│       ├── xbox_nxdk.yml
│       └── xbox_one.yml
├── .gitignore
├── .lldbinit
├── 3rdParty/
│   ├── Lua/
│   │   └── CMakeLists.txt
│   ├── PKWare/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── PKWare.vcxproj
│   │   ├── PKWare.vcxproj.filters
│   │   ├── Pkware.dsp
│   │   ├── explode.cpp
│   │   ├── implode.cpp
│   │   └── pkware.h
│   ├── PicoSHA2/
│   │   └── picosha2.h
│   ├── SDL2/
│   │   ├── CMake/
│   │   │   └── FindSDL2.cmake
│   │   └── CMakeLists.txt
│   ├── SDL3/
│   │   └── CMakeLists.txt
│   ├── SDL3_image/
│   │   └── CMakeLists.txt
│   ├── SDL3_mixer/
│   │   └── CMakeLists.txt
│   ├── SDL_audiolib/
│   │   └── CMakeLists.txt
│   ├── SDL_image/
│   │   ├── CMakeLists.txt
│   │   └── IMG.c
│   ├── SheenBidi/
│   │   └── CMakeLists.txt
│   ├── asio/
│   │   ├── CMakeLists.txt
│   │   ├── asio_handle_exception.cpp
│   │   └── asio_handle_exception.hpp
│   ├── benchmark/
│   │   └── CMakeLists.txt
│   ├── bzip2/
│   │   ├── CMakeLists.txt
│   │   └── bz_internal_error.c
│   ├── discord/
│   │   ├── .editorconfig
│   │   ├── CMakeLists.txt
│   │   └── fixes.patch
│   ├── find_steam_game/
│   │   └── CMakeLists.txt
│   ├── googletest/
│   │   └── CMakeLists.txt
│   ├── libfmt/
│   │   └── CMakeLists.txt
│   ├── libmpq/
│   │   ├── CMakeLists.txt
│   │   └── config.h
│   ├── libpng/
│   │   └── CMakeLists.txt
│   ├── libsmackerdec/
│   │   └── CMakeLists.txt
│   ├── libsodium/
│   │   └── CMakeLists.txt
│   ├── libzt/
│   │   └── CMakeLists.txt
│   ├── magic_enum/
│   │   └── CMakeLists.txt
│   ├── sol2/
│   │   ├── CMakeLists.txt
│   │   └── sol_config/
│   │       └── sol/
│   │           ├── config.hpp
│   │           └── debug.hpp
│   ├── tl/
│   │   ├── CMakeLists.txt
│   │   ├── expected.hpp
│   │   └── function_ref.hpp
│   ├── tolk/
│   │   └── CMakeLists.txt
│   ├── unordered_dense/
│   │   ├── 0001-Disable-PMR-support-for-mingw-std-threads-compat.patch
│   │   └── CMakeLists.txt
│   └── zlib/
│       ├── CMake/
│       │   └── FindZLIB.cmake
│       └── CMakeLists.txt
├── Brewfile
├── CMake/
│   ├── Assets.cmake
│   ├── Definitions.cmake
│   ├── Dependencies.cmake
│   ├── Mods.cmake
│   ├── MoldLinker.cmake
│   ├── Platforms.cmake
│   ├── Tests.cmake
│   ├── VcPkgManifestFeatures.cmake
│   ├── finders/
│   │   ├── FindGperftools.cmake
│   │   ├── FindSDL2_image.cmake
│   │   ├── FindSDL_audiolib.cmake
│   │   ├── FindSpeechd.cmake
│   │   ├── Findsimpleini.cmake
│   │   └── Findsodium.cmake
│   ├── functions/
│   │   ├── FetchContent_ExcludeFromAll_backport.cmake
│   │   ├── copy_files.cmake
│   │   ├── dependency_options.cmake
│   │   ├── devilutionx_library.cmake
│   │   ├── emscripten_system_library.cmake
│   │   ├── genex.cmake
│   │   ├── git.cmake
│   │   ├── object_libraries.cmake
│   │   ├── set_relative_file_macro.cmake
│   │   └── trim_retired_files.cmake
│   └── platforms/
│       ├── .editorconfig
│       ├── aarch64-linux-gnu-clang-static-libc++.toolchain.cmake
│       ├── aarch64-linux-gnu.toolchain.cmake
│       ├── amiga.cmake
│       ├── android.cmake
│       ├── cpigamesh.cmake
│       ├── ctr/
│       │   ├── Tools3DS.cmake
│       │   ├── asio_defs.cmake
│       │   ├── bin2s_header.h.in
│       │   └── modules/
│       │       ├── FindCITRO3D.cmake
│       │       ├── FindCTRULIB.cmake
│       │       ├── FindPNG.cmake
│       │       ├── FindZLIB.cmake
│       │       ├── LibFindMacros.cmake
│       │       └── try_add_imported_target.cmake
│       ├── debian-cross-pkg-config.sh
│       ├── djcpp.toolchain.cmake
│       ├── dos.cmake
│       ├── emscripten.cmake
│       ├── gkd350h.cmake
│       ├── haiku.cmake
│       ├── ios.cmake
│       ├── ios.toolchain.cmake
│       ├── lepus.cmake
│       ├── linux_i386.toolchain.cmake
│       ├── macos_tiger.cmake
│       ├── macports/
│       │   └── finders/
│       │       └── FindMacportsLegacySupport.cmake
│       ├── mingw/
│       │   └── zt_defs.cmake
│       ├── mingw9x/
│       │   └── include/
│       │       └── windef.h
│       ├── mingw9x.toolchain.cmake
│       ├── mingwcc.toolchain.cmake
│       ├── mingwcc64.toolchain.cmake
│       ├── miyoo_mini.cmake
│       ├── n3ds.cmake
│       ├── ps4.cmake
│       ├── retrofw.cmake
│       ├── rg350.cmake
│       ├── rg99.cmake
│       ├── switch/
│       │   └── asio_defs.cmake
│       ├── switch.cmake
│       ├── threads-stub/
│       │   └── FindThreads.cmake
│       ├── uwp_lib.cmake
│       ├── vita.cmake
│       ├── windows.cmake
│       ├── windows9x.cmake
│       ├── windowsXP.cmake
│       ├── xbox_nxdk/
│       │   └── finders/
│       │       ├── FindPNG.cmake
│       │       ├── FindSDL2.cmake
│       │       └── FindZLIB.cmake
│       └── xbox_nxdk.cmake
├── CMakeLists.txt
├── CMakeSettings.json
├── CODE_OF_CONDUCT.md
├── LICENSE.md
├── Packaging/
│   ├── OpenDingux/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── build-all.sh
│   │   ├── build.sh
│   │   ├── devilutionx-from-disk.sh
│   │   ├── devilutionx-umount-opk-and-run.sh
│   │   ├── gkd350h-manual.txt
│   │   ├── gkd350h.desktop
│   │   ├── lepus-manual.txt
│   │   ├── lepus.desktop
│   │   ├── package-opk.sh
│   │   ├── profile-generate.sh
│   │   ├── retrofw-manual.txt
│   │   ├── retrofw.desktop
│   │   ├── rg350-manual.txt
│   │   ├── rg350.desktop
│   │   ├── rg99-manual.txt
│   │   ├── rg99-pgo.md
│   │   ├── rg99.desktop
│   │   └── targets.sh
│   ├── amiga/
│   │   ├── Dockerfile
│   │   ├── devilutionx.info
│   │   └── prep.sh
│   ├── apple/
│   │   ├── AppIcon.icns
│   │   ├── AppIcon_128.icns
│   │   ├── Info.plist
│   │   ├── LaunchScreen.storyboard
│   │   └── png2icns_tiger/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── png2icns_tiger.c
│   │       └── run.sh
│   ├── cpi-gamesh/
│   │   ├── __init__.py
│   │   ├── build.sh
│   │   └── readme.md
│   ├── ctr/
│   │   └── template.rsf
│   ├── emscripten/
│   │   └── index.html
│   ├── haiku/
│   │   └── devilutionX.rdef.in
│   ├── miyoo_mini/
│   │   ├── build.sh
│   │   ├── setup_toolchain.sh
│   │   ├── skeleton_MiniUI/
│   │   │   └── Diablo/
│   │   │       ├── Diablo.m3u
│   │   │       ├── launch.sh
│   │   │       └── readme.txt
│   │   ├── skeleton_OnionOS/
│   │   │   ├── Roms/
│   │   │   │   └── PORTS/
│   │   │   │       ├── Games/
│   │   │   │       │   └── Diablo (devilutionX)/
│   │   │   │       │       └── _required_files.txt
│   │   │   │       └── Shortcuts/
│   │   │   │           └── Action/
│   │   │   │               └── Diablo (DevilutionX).notfound
│   │   │   └── readme.txt
│   │   └── toolchainfile.cmake
│   ├── nix/
│   │   ├── AppImage.sh
│   │   ├── AppRun
│   │   ├── LinuxReleasePackaging.sh
│   │   ├── README.txt
│   │   ├── debian-cross-aarch64-prep.sh
│   │   ├── debian-cross-i386-prep.sh
│   │   ├── debian-host-prep.sh
│   │   ├── devilutionx-hellfire.desktop
│   │   ├── devilutionx.6
│   │   ├── devilutionx.desktop
│   │   └── devilutionx.metainfo.xml
│   ├── pi/
│   │   └── README.txt
│   ├── ps4/
│   │   ├── README.md
│   │   └── build.sh
│   ├── ps5/
│   │   ├── README.md
│   │   ├── build.sh
│   │   └── homebrew.js
│   ├── resources/
│   │   ├── LICENSE.CC-BY.txt
│   │   ├── LICENSE.OFL.txt
│   │   ├── LICENSE.zlib.txt
│   │   └── README-SDL.txt
│   ├── switch/
│   │   ├── README.txt
│   │   └── packages.txt
│   ├── vita/
│   │   ├── README.txt
│   │   └── sce_sys/
│   │       └── livearea/
│   │           └── contents/
│   │               └── template.xml
│   ├── windows/
│   │   ├── CMakePresets.json
│   │   ├── README.txt
│   │   ├── devilutionx.exe.manifest
│   │   ├── devilutionx.rc
│   │   ├── dos-prep.sh
│   │   ├── mingw-prep.sh
│   │   └── mingw9x-prep.sh
│   ├── xbox-one/
│   │   └── build.bat
│   └── xbox_nxdk/
│       └── xbe_logo.pgm
├── README.md
├── Source/
│   ├── .clang-format
│   ├── .clang-tidy
│   ├── CMakeLists.txt
│   ├── DiabloUI/
│   │   ├── button.cpp
│   │   ├── button.h
│   │   ├── credits.cpp
│   │   ├── credits_lines.cpp
│   │   ├── credits_lines.h
│   │   ├── diabloui.cpp
│   │   ├── diabloui.h
│   │   ├── dialogs.cpp
│   │   ├── dialogs.h
│   │   ├── hero/
│   │   │   ├── selhero.cpp
│   │   │   └── selhero.h
│   │   ├── mainmenu.cpp
│   │   ├── multi/
│   │   │   ├── selconn.cpp
│   │   │   ├── selgame.cpp
│   │   │   └── selgame.h
│   │   ├── progress.cpp
│   │   ├── scrollbar.cpp
│   │   ├── scrollbar.h
│   │   ├── selok.cpp
│   │   ├── selok.h
│   │   ├── selstart.cpp
│   │   ├── selstart.h
│   │   ├── selyesno.cpp
│   │   ├── selyesno.h
│   │   ├── settingsmenu.cpp
│   │   ├── settingsmenu.h
│   │   ├── support_lines.cpp
│   │   ├── support_lines.h
│   │   ├── text_input.cpp
│   │   ├── text_input.hpp
│   │   ├── title.cpp
│   │   ├── ui_flags.hpp
│   │   └── ui_item.h
│   ├── appfat.cpp
│   ├── appfat.h
│   ├── automap.cpp
│   ├── automap.h
│   ├── capture.cpp
│   ├── capture.h
│   ├── codec.cpp
│   ├── codec.h
│   ├── control/
│   │   ├── control.hpp
│   │   ├── control_chat.cpp
│   │   ├── control_chat.hpp
│   │   ├── control_chat_commands.cpp
│   │   ├── control_chat_commands.hpp
│   │   ├── control_flasks.cpp
│   │   ├── control_flasks.hpp
│   │   ├── control_gold.cpp
│   │   ├── control_infobox.cpp
│   │   ├── control_panel.cpp
│   │   └── control_panel.hpp
│   ├── controls/
│   │   ├── README.md
│   │   ├── axis_direction.cpp
│   │   ├── axis_direction.h
│   │   ├── control_mode.cpp
│   │   ├── control_mode.hpp
│   │   ├── controller.cpp
│   │   ├── controller.h
│   │   ├── controller_buttons.cpp
│   │   ├── controller_buttons.h
│   │   ├── controller_motion.cpp
│   │   ├── controller_motion.h
│   │   ├── devices/
│   │   │   ├── game_controller.cpp
│   │   │   ├── game_controller.h
│   │   │   ├── joystick.cpp
│   │   │   ├── joystick.h
│   │   │   ├── kbcontroller.cpp
│   │   │   └── kbcontroller.h
│   │   ├── game_controls.cpp
│   │   ├── game_controls.h
│   │   ├── input.h
│   │   ├── keymapper.cpp
│   │   ├── keymapper.hpp
│   │   ├── menu_controls.cpp
│   │   ├── menu_controls.h
│   │   ├── modifier_hints.cpp
│   │   ├── modifier_hints.h
│   │   ├── padmapper.cpp
│   │   ├── padmapper.hpp
│   │   ├── plrctrls.cpp
│   │   ├── plrctrls.h
│   │   ├── remap_keyboard.h
│   │   └── touch/
│   │       ├── event_handlers.cpp
│   │       ├── event_handlers.h
│   │       ├── gamepad.cpp
│   │       ├── gamepad.h
│   │       ├── renderers.cpp
│   │       └── renderers.h
│   ├── cpp.hint
│   ├── crawl.cpp
│   ├── crawl.hpp
│   ├── cursor.cpp
│   ├── cursor.h
│   ├── data/
│   │   ├── file.cpp
│   │   ├── file.hpp
│   │   ├── iterators.hpp
│   │   ├── parser.cpp
│   │   ├── parser.hpp
│   │   ├── record_reader.cpp
│   │   ├── record_reader.hpp
│   │   ├── value_reader.cpp
│   │   └── value_reader.hpp
│   ├── dead.cpp
│   ├── dead.h
│   ├── debug.cpp
│   ├── debug.h
│   ├── diablo.cpp
│   ├── diablo.h
│   ├── diablo_msg.cpp
│   ├── diablo_msg.hpp
│   ├── discord/
│   │   ├── discord.cpp
│   │   └── discord.h
│   ├── doom.cpp
│   ├── doom.h
│   ├── dvlnet/
│   │   ├── abstract_net.cpp
│   │   ├── abstract_net.h
│   │   ├── base.cpp
│   │   ├── base.h
│   │   ├── base_protocol.h
│   │   ├── cdwrap.cpp
│   │   ├── cdwrap.h
│   │   ├── frame_queue.cpp
│   │   ├── frame_queue.h
│   │   ├── leaveinfo.hpp
│   │   ├── loopback.cpp
│   │   ├── loopback.h
│   │   ├── packet.cpp
│   │   ├── packet.h
│   │   ├── protocol_zt.cpp
│   │   ├── protocol_zt.h
│   │   ├── tcp_client.cpp
│   │   ├── tcp_client.h
│   │   ├── tcp_server.cpp
│   │   ├── tcp_server.h
│   │   ├── zerotier_lwip.cpp
│   │   ├── zerotier_lwip.h
│   │   ├── zerotier_native.cpp
│   │   └── zerotier_native.h
│   ├── effects.cpp
│   ├── effects.h
│   ├── effects_stubs.cpp
│   ├── encrypt.cpp
│   ├── encrypt.h
│   ├── engine/
│   │   ├── actor_position.cpp
│   │   ├── actor_position.hpp
│   │   ├── animationinfo.cpp
│   │   ├── animationinfo.h
│   │   ├── assets.cpp
│   │   ├── assets.hpp
│   │   ├── backbuffer_state.cpp
│   │   ├── backbuffer_state.hpp
│   │   ├── circle.hpp
│   │   ├── clx_sprite.hpp
│   │   ├── demomode.cpp
│   │   ├── demomode.h
│   │   ├── direction.cpp
│   │   ├── direction.hpp
│   │   ├── displacement.hpp
│   │   ├── dx.cpp
│   │   ├── dx.h
│   │   ├── events.cpp
│   │   ├── events.hpp
│   │   ├── lighting_defs.hpp
│   │   ├── load_cel.cpp
│   │   ├── load_cel.hpp
│   │   ├── load_cl2.cpp
│   │   ├── load_cl2.hpp
│   │   ├── load_clx.cpp
│   │   ├── load_clx.hpp
│   │   ├── load_file.hpp
│   │   ├── load_pcx.cpp
│   │   ├── load_pcx.hpp
│   │   ├── palette.cpp
│   │   ├── palette.h
│   │   ├── path.cpp
│   │   ├── path.h
│   │   ├── point.hpp
│   │   ├── points_in_rectangle_range.hpp
│   │   ├── random.cpp
│   │   ├── random.hpp
│   │   ├── rectangle.hpp
│   │   ├── render/
│   │   │   ├── automap_render.cpp
│   │   │   ├── automap_render.hpp
│   │   │   ├── blit_impl.hpp
│   │   │   ├── clx_render.cpp
│   │   │   ├── clx_render.hpp
│   │   │   ├── dun_render.cpp
│   │   │   ├── dun_render.hpp
│   │   │   ├── light_render.cpp
│   │   │   ├── light_render.hpp
│   │   │   ├── primitive_render.cpp
│   │   │   ├── primitive_render.hpp
│   │   │   ├── scrollrt.cpp
│   │   │   ├── scrollrt.h
│   │   │   ├── text_render.cpp
│   │   │   └── text_render.hpp
│   │   ├── size.hpp
│   │   ├── sound.cpp
│   │   ├── sound.h
│   │   ├── sound_defs.hpp
│   │   ├── sound_position.cpp
│   │   ├── sound_position.hpp
│   │   ├── sound_stubs.cpp
│   │   ├── surface.cpp
│   │   ├── surface.hpp
│   │   ├── ticks.cpp
│   │   ├── ticks.hpp
│   │   ├── trn.cpp
│   │   ├── trn.hpp
│   │   └── world_tile.hpp
│   ├── game_mode.cpp
│   ├── game_mode.hpp
│   ├── gamemenu.cpp
│   ├── gamemenu.h
│   ├── gmenu.cpp
│   ├── gmenu.h
│   ├── headless_mode.cpp
│   ├── headless_mode.hpp
│   ├── help.cpp
│   ├── help.h
│   ├── hwcursor.cpp
│   ├── hwcursor.hpp
│   ├── init.cpp
│   ├── init.hpp
│   ├── interfac.cpp
│   ├── interfac.h
│   ├── inv.cpp
│   ├── inv.h
│   ├── inv_iterators.hpp
│   ├── items/
│   │   ├── validation.cpp
│   │   └── validation.h
│   ├── items.cpp
│   ├── items.h
│   ├── levels/
│   │   ├── crypt.cpp
│   │   ├── crypt.h
│   │   ├── drlg_l1.cpp
│   │   ├── drlg_l1.h
│   │   ├── drlg_l2.cpp
│   │   ├── drlg_l2.h
│   │   ├── drlg_l3.cpp
│   │   ├── drlg_l3.h
│   │   ├── drlg_l4.cpp
│   │   ├── drlg_l4.h
│   │   ├── dun_tile.hpp
│   │   ├── gendung.cpp
│   │   ├── gendung.h
│   │   ├── gendung_defs.hpp
│   │   ├── reencode_dun_cels.cpp
│   │   ├── reencode_dun_cels.hpp
│   │   ├── setmaps.cpp
│   │   ├── setmaps.h
│   │   ├── themes.cpp
│   │   ├── themes.h
│   │   ├── tile_properties.cpp
│   │   ├── tile_properties.hpp
│   │   ├── town.cpp
│   │   ├── town.h
│   │   ├── trigs.cpp
│   │   └── trigs.h
│   ├── lighting.cpp
│   ├── lighting.h
│   ├── loadsave.cpp
│   ├── loadsave.h
│   ├── lua/
│   │   ├── autocomplete.cpp
│   │   ├── autocomplete.hpp
│   │   ├── lua_event.cpp
│   │   ├── lua_event.hpp
│   │   ├── lua_global.cpp
│   │   ├── lua_global.hpp
│   │   ├── metadoc.hpp
│   │   ├── modules/
│   │   │   ├── audio.cpp
│   │   │   ├── audio.hpp
│   │   │   ├── dev/
│   │   │   │   ├── display.cpp
│   │   │   │   ├── display.hpp
│   │   │   │   ├── items.cpp
│   │   │   │   ├── items.hpp
│   │   │   │   ├── level/
│   │   │   │   │   ├── map.cpp
│   │   │   │   │   ├── map.hpp
│   │   │   │   │   ├── warp.cpp
│   │   │   │   │   └── warp.hpp
│   │   │   │   ├── level.cpp
│   │   │   │   ├── level.hpp
│   │   │   │   ├── monsters.cpp
│   │   │   │   ├── monsters.hpp
│   │   │   │   ├── player/
│   │   │   │   │   ├── gold.cpp
│   │   │   │   │   ├── gold.hpp
│   │   │   │   │   ├── spells.cpp
│   │   │   │   │   ├── spells.hpp
│   │   │   │   │   ├── stats.cpp
│   │   │   │   │   └── stats.hpp
│   │   │   │   ├── player.cpp
│   │   │   │   ├── player.hpp
│   │   │   │   ├── quests.cpp
│   │   │   │   ├── quests.hpp
│   │   │   │   ├── search.cpp
│   │   │   │   ├── search.hpp
│   │   │   │   ├── towners.cpp
│   │   │   │   └── towners.hpp
│   │   │   ├── dev.cpp
│   │   │   ├── dev.hpp
│   │   │   ├── floatingnumbers.cpp
│   │   │   ├── floatingnumbers.hpp
│   │   │   ├── hellfire.cpp
│   │   │   ├── hellfire.hpp
│   │   │   ├── i18n.cpp
│   │   │   ├── i18n.hpp
│   │   │   ├── items.cpp
│   │   │   ├── items.hpp
│   │   │   ├── log.cpp
│   │   │   ├── log.hpp
│   │   │   ├── monsters.cpp
│   │   │   ├── monsters.hpp
│   │   │   ├── player.cpp
│   │   │   ├── player.hpp
│   │   │   ├── render.cpp
│   │   │   ├── render.hpp
│   │   │   ├── system.cpp
│   │   │   ├── system.hpp
│   │   │   ├── towners.cpp
│   │   │   └── towners.hpp
│   │   ├── repl.cpp
│   │   └── repl.hpp
│   ├── main.cpp
│   ├── menu.cpp
│   ├── menu.h
│   ├── minitext.cpp
│   ├── minitext.h
│   ├── missiles.cpp
│   ├── missiles.h
│   ├── monster.cpp
│   ├── monster.h
│   ├── monsters/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── movie.cpp
│   ├── movie.h
│   ├── mpq/
│   │   ├── mpq_common.cpp
│   │   ├── mpq_common.hpp
│   │   ├── mpq_reader.cpp
│   │   ├── mpq_reader.hpp
│   │   ├── mpq_sdl_rwops.cpp
│   │   ├── mpq_sdl_rwops.hpp
│   │   ├── mpq_writer.cpp
│   │   └── mpq_writer.hpp
│   ├── msg.cpp
│   ├── msg.h
│   ├── multi.cpp
│   ├── multi.h
│   ├── nthread.cpp
│   ├── nthread.h
│   ├── objects.cpp
│   ├── objects.h
│   ├── options.cpp
│   ├── options.h
│   ├── pack.cpp
│   ├── pack.h
│   ├── panels/
│   │   ├── charpanel.cpp
│   │   ├── charpanel.hpp
│   │   ├── console.cpp
│   │   ├── console.hpp
│   │   ├── info_box.cpp
│   │   ├── info_box.hpp
│   │   ├── mainpanel.cpp
│   │   ├── mainpanel.hpp
│   │   ├── partypanel.cpp
│   │   ├── partypanel.hpp
│   │   ├── spell_book.cpp
│   │   ├── spell_book.hpp
│   │   ├── spell_icons.cpp
│   │   ├── spell_icons.hpp
│   │   ├── spell_list.cpp
│   │   ├── spell_list.hpp
│   │   └── ui_panels.hpp
│   ├── pfile.cpp
│   ├── pfile.h
│   ├── platform/
│   │   ├── android/
│   │   │   ├── CMakeLists.txt
│   │   │   └── android.cpp
│   │   ├── ctr/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── asio/
│   │   │   │   ├── include/
│   │   │   │   │   ├── errno.h
│   │   │   │   │   ├── net/
│   │   │   │   │   │   └── if.h
│   │   │   │   │   ├── netdb.h
│   │   │   │   │   ├── netinet/
│   │   │   │   │   │   └── in.h
│   │   │   │   │   └── sys/
│   │   │   │   │       ├── ioctl.h
│   │   │   │   │       ├── poll.h
│   │   │   │   │       ├── socket.h
│   │   │   │   │       ├── uio.h
│   │   │   │   │       └── un.h
│   │   │   │   ├── net/
│   │   │   │   │   └── if.c
│   │   │   │   └── sys/
│   │   │   │       ├── socket.c
│   │   │   │       └── uio.c
│   │   │   ├── cfgu_service.hpp
│   │   │   ├── display.cpp
│   │   │   ├── display.hpp
│   │   │   ├── keyboard.cpp
│   │   │   ├── keyboard.h
│   │   │   ├── locale.cpp
│   │   │   ├── locale.hpp
│   │   │   ├── messagebox.cpp
│   │   │   ├── random.cpp
│   │   │   ├── random.hpp
│   │   │   ├── sockets.cpp
│   │   │   ├── sockets.hpp
│   │   │   ├── system.cpp
│   │   │   └── system.h
│   │   ├── ios/
│   │   │   ├── ios_paths.h
│   │   │   └── ios_paths.m
│   │   ├── locale.cpp
│   │   ├── locale.hpp
│   │   ├── macos_sdl1/
│   │   │   └── SDL_filesystem.m
│   │   ├── switch/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── asio/
│   │   │   │   ├── include/
│   │   │   │   │   ├── errno.h
│   │   │   │   │   ├── net/
│   │   │   │   │   │   └── if.h
│   │   │   │   │   ├── netinet/
│   │   │   │   │   │   └── in.h
│   │   │   │   │   └── sys/
│   │   │   │   │       ├── uio.h
│   │   │   │   │       └── un.h
│   │   │   │   ├── net/
│   │   │   │   │   └── if.c
│   │   │   │   ├── pause.c
│   │   │   │   └── sys/
│   │   │   │       └── signal.c
│   │   │   ├── docking.cpp
│   │   │   ├── docking.h
│   │   │   ├── keyboard.cpp
│   │   │   ├── keyboard.h
│   │   │   ├── network.cpp
│   │   │   ├── network.h
│   │   │   ├── random.cpp
│   │   │   ├── random.hpp
│   │   │   ├── romfs.cpp
│   │   │   └── romfs.hpp
│   │   └── vita/
│   │       ├── CMakeLists.txt
│   │       ├── keyboard.cpp
│   │       ├── keyboard.h
│   │       ├── network.cpp
│   │       ├── network.h
│   │       ├── random.cpp
│   │       ├── random.hpp
│   │       ├── touch.cpp
│   │       └── touch.h
│   ├── player.cpp
│   ├── player.h
│   ├── plrmsg.cpp
│   ├── plrmsg.h
│   ├── portal.cpp
│   ├── portal.h
│   ├── portals/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── qol/
│   │   ├── autopickup.cpp
│   │   ├── autopickup.h
│   │   ├── chatlog.cpp
│   │   ├── chatlog.h
│   │   ├── floatingnumbers.cpp
│   │   ├── floatingnumbers.h
│   │   ├── itemlabels.cpp
│   │   ├── itemlabels.h
│   │   ├── monhealthbar.cpp
│   │   ├── monhealthbar.h
│   │   ├── stash.cpp
│   │   ├── stash.h
│   │   ├── xpbar.cpp
│   │   └── xpbar.h
│   ├── quests/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── quests.cpp
│   ├── quests.h
│   ├── quick_messages.cpp
│   ├── quick_messages.hpp
│   ├── restrict.cpp
│   ├── restrict.h
│   ├── sha.cpp
│   ├── sha.h
│   ├── sound_effect_enums.h
│   ├── spells.cpp
│   ├── spells.h
│   ├── stores.cpp
│   ├── stores.h
│   ├── storm/
│   │   ├── storm_net.cpp
│   │   ├── storm_net.hpp
│   │   ├── storm_svid.cpp
│   │   └── storm_svid.h
│   ├── sync.cpp
│   ├── sync.h
│   ├── tables/
│   │   ├── itemdat.cpp
│   │   ├── itemdat.h
│   │   ├── misdat.cpp
│   │   ├── misdat.h
│   │   ├── monstdat.cpp
│   │   ├── monstdat.h
│   │   ├── objdat.cpp
│   │   ├── objdat.h
│   │   ├── playerdat.cpp
│   │   ├── playerdat.hpp
│   │   ├── spelldat.cpp
│   │   ├── spelldat.h
│   │   ├── textdat.cpp
│   │   ├── textdat.h
│   │   ├── townerdat.cpp
│   │   └── townerdat.hpp
│   ├── tmsg.cpp
│   ├── tmsg.h
│   ├── towners.cpp
│   ├── towners.h
│   ├── track.cpp
│   ├── track.h
│   ├── translation_dummy.cpp
│   ├── utils/
│   │   ├── algorithm/
│   │   │   └── container.hpp
│   │   ├── attributes.h
│   │   ├── aulib.hpp
│   │   ├── bitset2d.hpp
│   │   ├── cel_to_clx.cpp
│   │   ├── cel_to_clx.hpp
│   │   ├── cl2_to_clx.cpp
│   │   ├── cl2_to_clx.hpp
│   │   ├── clx_decode.hpp
│   │   ├── clx_encode.hpp
│   │   ├── console.cpp
│   │   ├── console.h
│   │   ├── display.cpp
│   │   ├── display.h
│   │   ├── endian_read.hpp
│   │   ├── endian_stream.hpp
│   │   ├── endian_swap.hpp
│   │   ├── endian_write.hpp
│   │   ├── enum_traits.h
│   │   ├── file_name_generator.hpp
│   │   ├── file_util.cpp
│   │   ├── file_util.h
│   │   ├── format_int.cpp
│   │   ├── format_int.hpp
│   │   ├── hp_mana_units.hpp
│   │   ├── ini.cpp
│   │   ├── ini.hpp
│   │   ├── intrusive_optional.hpp
│   │   ├── is_of.hpp
│   │   ├── language.cpp
│   │   ├── language.h
│   │   ├── log.hpp
│   │   ├── logged_fstream.cpp
│   │   ├── logged_fstream.hpp
│   │   ├── math.h
│   │   ├── palette_blending.cpp
│   │   ├── palette_blending.hpp
│   │   ├── palette_kd_tree.cpp
│   │   ├── palette_kd_tree.hpp
│   │   ├── parse_int.cpp
│   │   ├── parse_int.hpp
│   │   ├── paths.cpp
│   │   ├── paths.h
│   │   ├── pcx.hpp
│   │   ├── pcx_to_clx.cpp
│   │   ├── pcx_to_clx.hpp
│   │   ├── png.h
│   │   ├── pointer_value_union.hpp
│   │   ├── push_aulib_decoder.cpp
│   │   ├── push_aulib_decoder.h
│   │   ├── screen_reader.cpp
│   │   ├── screen_reader.hpp
│   │   ├── sdl2_backports.h
│   │   ├── sdl2_to_1_2_backports.cpp
│   │   ├── sdl2_to_1_2_backports.h
│   │   ├── sdl_bilinear_scale.cpp
│   │   ├── sdl_bilinear_scale.hpp
│   │   ├── sdl_compat.h
│   │   ├── sdl_geometry.h
│   │   ├── sdl_mutex.h
│   │   ├── sdl_ptrs.h
│   │   ├── sdl_thread.cpp
│   │   ├── sdl_thread.h
│   │   ├── sdl_wrap.h
│   │   ├── soundsample.cpp
│   │   ├── soundsample.h
│   │   ├── static_vector.hpp
│   │   ├── status_macros.hpp
│   │   ├── stdcompat/
│   │   │   ├── filesystem.hpp
│   │   │   └── shared_ptr_array.hpp
│   │   ├── str_case.cpp
│   │   ├── str_case.hpp
│   │   ├── str_cat.cpp
│   │   ├── str_cat.hpp
│   │   ├── str_split.hpp
│   │   ├── string_or_view.hpp
│   │   ├── string_view_hash.hpp
│   │   ├── stubs.h
│   │   ├── surface_to_clx.cpp
│   │   ├── surface_to_clx.hpp
│   │   ├── surface_to_pcx.cpp
│   │   ├── surface_to_pcx.hpp
│   │   ├── surface_to_png.cpp
│   │   ├── surface_to_png.hpp
│   │   ├── timer.cpp
│   │   ├── timer.hpp
│   │   ├── ui_fwd.h
│   │   ├── utf8.cpp
│   │   └── utf8.hpp
│   ├── vision.cpp
│   └── vision.hpp
├── Translations/
│   ├── be.po
│   ├── bg.po
│   ├── cs.po
│   ├── da.po
│   ├── de.po
│   ├── devilutionx.pot
│   ├── el.po
│   ├── es.po
│   ├── et.po
│   ├── fi.po
│   ├── fr.po
│   ├── glossary.md
│   ├── hr.po
│   ├── hu.po
│   ├── it.po
│   ├── ja.po
│   ├── ko.po
│   ├── pl.po
│   ├── pt_BR.po
│   ├── ro.po
│   ├── ru.po
│   ├── sv.po
│   ├── tr.po
│   ├── uk.po
│   ├── zh_CN.po
│   └── zh_TW.po
├── VERSION
├── android-project/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   ├── proguard-rules.pro
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── org/
│   │           │       ├── diasurgical/
│   │           │       │   └── devilutionx/
│   │           │       │       ├── DataActivity.java
│   │           │       │       ├── DevilutionXSDLActivity.java
│   │           │       │       ├── ExternalFilesManager.java
│   │           │       │       └── ImportActivity.java
│   │           │       └── libsdl/
│   │           │           └── app/
│   │           │               ├── HIDDevice.java
│   │           │               ├── HIDDeviceBLESteamController.java
│   │           │               ├── HIDDeviceManager.java
│   │           │               ├── HIDDeviceUSB.java
│   │           │               ├── SDL.java
│   │           │               ├── SDLActivity.java
│   │           │               ├── SDLAudioManager.java
│   │           │               ├── SDLControllerManager.java
│   │           │               └── SDLSurface.java
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── gamepad.xml
│   │               ├── layout/
│   │               │   └── activity_data.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── values/
│   │               │   ├── colors.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-be/
│   │               │   └── strings.xml
│   │               ├── values-bg/
│   │               │   └── strings.xml
│   │               ├── values-cs/
│   │               │   └── strings.xml
│   │               ├── values-da/
│   │               │   └── strings.xml
│   │               ├── values-de/
│   │               │   └── strings.xml
│   │               ├── values-es/
│   │               │   └── strings.xml
│   │               ├── values-fi/
│   │               │   └── strings.xml
│   │               ├── values-fr/
│   │               │   └── strings.xml
│   │               ├── values-hr/
│   │               │   └── strings.xml
│   │               ├── values-hu/
│   │               │   └── strings.xml
│   │               ├── values-it/
│   │               │   └── strings.xml
│   │               ├── values-ko-rKR/
│   │               │   └── strings.xml
│   │               ├── values-pl/
│   │               │   └── strings.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-ro-rRO/
│   │               │   └── strings.xml
│   │               ├── values-ru/
│   │               │   └── strings.xml
│   │               ├── values-sv/
│   │               │   └── strings.xml
│   │               ├── values-tr/
│   │               │   └── strings.xml
│   │               ├── values-uk/
│   │               │   └── strings.xml
│   │               ├── values-zh-rCN/
│   │               │   └── strings.xml
│   │               ├── values-zh-rTW/
│   │               │   └── strings.xml
│   │               └── xml/
│   │                   ├── backup_descriptor.xml
│   │                   ├── backup_rules.xml
│   │                   └── shortcuts.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   └── settings.gradle
├── assets/
│   ├── ASSETS_VERSION
│   ├── arena/
│   │   ├── church.dun
│   │   ├── circle_of_death.dun
│   │   └── hell.dun
│   ├── data/
│   │   ├── boxleftend.clx
│   │   ├── boxmiddle.clx
│   │   ├── boxrightend.clx
│   │   ├── charbg.clx
│   │   ├── dirtybuc.clx
│   │   ├── dirtybucp.clx
│   │   ├── health.clx
│   │   ├── healthbox.clx
│   │   ├── hintbox.clx
│   │   ├── hintboxbackground.clx
│   │   ├── hinticons.clx
│   │   ├── inv/
│   │   │   └── objcurs-widths.txt
│   │   ├── monstertags.clx
│   │   ├── panel8buc.clx
│   │   ├── panel8bucp.clx
│   │   ├── resistance.clx
│   │   ├── stash.clx
│   │   ├── stashnavbtns.clx
│   │   ├── talkbutton.clx
│   │   └── xpbar.clx
│   ├── fonts/
│   │   ├── 12-00.clx
│   │   ├── 12-01.clx
│   │   ├── 12-02.clx
│   │   ├── 12-03.clx
│   │   ├── 12-04.clx
│   │   ├── 12-05.clx
│   │   ├── 12-1f1.clx
│   │   ├── 12-1f3.clx
│   │   ├── 12-1f4.clx
│   │   ├── 12-1f5.clx
│   │   ├── 12-1f6.clx
│   │   ├── 12-1f9.clx
│   │   ├── 12-20.clx
│   │   ├── 12-26.clx
│   │   ├── 12-e0.clx
│   │   ├── 22-00.clx
│   │   ├── 22-01.clx
│   │   ├── 22-02.clx
│   │   ├── 22-03.clx
│   │   ├── 22-04.clx
│   │   ├── 22-05.clx
│   │   ├── 22-20.clx
│   │   ├── 24-00.clx
│   │   ├── 24-01.clx
│   │   ├── 24-02.clx
│   │   ├── 24-03.clx
│   │   ├── 24-04.clx
│   │   ├── 24-05.clx
│   │   ├── 24-1f1.clx
│   │   ├── 24-1f3.clx
│   │   ├── 24-1f4.clx
│   │   ├── 24-1f5.clx
│   │   ├── 24-1f6.clx
│   │   ├── 24-1f9.clx
│   │   ├── 24-20.clx
│   │   ├── 24-26.clx
│   │   ├── 24-e0.clx
│   │   ├── 30-00.clx
│   │   ├── 30-01.clx
│   │   ├── 30-02.clx
│   │   ├── 30-03.clx
│   │   ├── 30-04.clx
│   │   ├── 30-05.clx
│   │   ├── 30-20.clx
│   │   ├── 30-e0.clx
│   │   ├── 42-00.clx
│   │   ├── 42-01.clx
│   │   ├── 42-02.clx
│   │   ├── 42-03.clx
│   │   ├── 42-04.clx
│   │   ├── 42-05.clx
│   │   ├── 42-20.clx
│   │   ├── 46-00.clx
│   │   ├── 46-01.clx
│   │   ├── 46-02.clx
│   │   ├── 46-03.clx
│   │   ├── 46-04.clx
│   │   ├── 46-05.clx
│   │   ├── 46-20.clx
│   │   ├── black.trn
│   │   ├── blue.trn
│   │   ├── buttonface.trn
│   │   ├── buttonpushed.trn
│   │   ├── gamedialogred.trn
│   │   ├── gamedialogwhite.trn
│   │   ├── gamedialogyellow.trn
│   │   ├── goldui.trn
│   │   ├── golduis.trn
│   │   ├── grayui.trn
│   │   ├── grayuis.trn
│   │   ├── orange.trn
│   │   ├── red.trn
│   │   ├── tr/
│   │   │   ├── 12-00.clx
│   │   │   ├── 24-00.clx
│   │   │   ├── 30-00.clx
│   │   │   ├── 42-00.clx
│   │   │   └── 46-00.clx
│   │   ├── white.trn
│   │   ├── whitegold.trn
│   │   └── yellow.trn
│   ├── gendata/
│   │   ├── cut2w.clx
│   │   ├── cut3w.clx
│   │   ├── cut4w.clx
│   │   ├── cutgatew.clx
│   │   ├── cutl1dw.clx
│   │   ├── cutportlw.clx
│   │   ├── cutportrw.clx
│   │   ├── cutstartw.clx
│   │   ├── cutttw.clx
│   │   └── pause.trn
│   ├── levels/
│   │   ├── l1data/
│   │   │   └── sklkngt.dun
│   │   ├── l2data/
│   │   │   └── bonechat.dun
│   │   └── towndata/
│   │       ├── automap.amp
│   │       └── automap.dun
│   ├── lua/
│   │   ├── devilutionx/
│   │   │   └── events.lua
│   │   ├── inspect.lua
│   │   ├── mods/
│   │   │   ├── Floating Numbers - Damage/
│   │   │   │   └── init.lua
│   │   │   ├── Floating Numbers - XP/
│   │   │   │   └── init.lua
│   │   │   ├── adria_refills_mana/
│   │   │   │   └── init.lua
│   │   │   └── clock/
│   │   │       └── init.lua
│   │   └── repl_prelude.lua
│   ├── lua_internal/
│   │   └── get_lua_function_signature.lua
│   ├── plrgfx/
│   │   └── warrior/
│   │       └── whu/
│   │           ├── whufm.trn
│   │           ├── whulm.trn
│   │           └── whuqm.trn
│   ├── txtdata/
│   │   ├── Experience.tsv
│   │   ├── Readme.md
│   │   ├── classes/
│   │   │   ├── README.md
│   │   │   ├── barbarian/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── bard/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── classdat.tsv
│   │   │   ├── monk/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── rogue/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── sorcerer/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   └── warrior/
│   │   │       ├── animations.tsv
│   │   │       ├── attributes.tsv
│   │   │       ├── sounds.tsv
│   │   │       ├── sprites.tsv
│   │   │       └── starting_loadout.tsv
│   │   ├── items/
│   │   │   ├── item_prefixes.tsv
│   │   │   ├── item_suffixes.tsv
│   │   │   ├── itemdat.tsv
│   │   │   └── unique_itemdat.tsv
│   │   ├── missiles/
│   │   │   ├── misdat.tsv
│   │   │   └── missile_sprites.tsv
│   │   ├── monsters/
│   │   │   ├── monstdat.tsv
│   │   │   └── unique_monstdat.tsv
│   │   ├── objects/
│   │   │   └── objdat.tsv
│   │   ├── quests/
│   │   │   └── questdat.tsv
│   │   ├── sound/
│   │   │   ├── effects-unused.tsv
│   │   │   └── effects.tsv
│   │   ├── spells/
│   │   │   └── spelldat.tsv
│   │   ├── text/
│   │   │   ├── textdat-unused.tsv
│   │   │   └── textdat.tsv
│   │   └── towners/
│   │       ├── quest_dialog.tsv
│   │       └── towners.tsv
│   └── ui_art/
│       ├── creditsw.clx
│       ├── diablo.pal
│       ├── dvl_but_sml.clx
│       ├── dvl_lrpopup.clx
│       ├── hellfire.pal
│       └── mainmenuw.clx
├── codecov.yml
├── docs/
│   ├── BACKGROUND.md
│   ├── CHANGELOG.md
│   ├── CONTRIBUTING.md
│   ├── TODO.md
│   ├── benchmarking.md
│   ├── building.md
│   ├── debug.md
│   ├── github-codespaces.md
│   ├── installing.md
│   ├── manual/
│   │   └── platforms/
│   │       ├── 3ds.md
│   │       ├── gkd350h.md
│   │       ├── retrofw.md
│   │       ├── rg350.md
│   │       ├── rg99.md
│   │       ├── switch.md
│   │       ├── vita.md
│   │       ├── xbox-one.md
│   │       └── xbox.md
│   ├── privacy.md
│   └── profiling-linux.md
├── doxygen.config
├── mods/
│   └── Hellfire/
│       ├── data/
│       │   └── inv/
│       │       └── objcurs2-widths.txt
│       ├── lua/
│       │   └── mods/
│       │       └── Hellfire/
│       │           └── init.lua
│       ├── nlevels/
│       │   ├── cutl5w.clx
│       │   ├── cutl6w.clx
│       │   └── l5data/
│       │       ├── cornerstone.dun
│       │       └── uberroom.dun
│       ├── txtdata/
│       │   ├── classes/
│       │   │   ├── classdat.tsv
│       │   │   └── sorcerer/
│       │   │       └── starting_loadout.tsv
│       │   ├── items/
│       │   │   ├── item_prefixes.tsv
│       │   │   ├── item_suffixes.tsv
│       │   │   └── unique_itemdat.tsv
│       │   ├── missiles/
│       │   │   ├── misdat.tsv
│       │   │   └── missile_sprites.tsv
│       │   ├── monsters/
│       │   │   └── monstdat.tsv
│       │   ├── sound/
│       │   │   ├── effects-unused.tsv
│       │   │   └── effects.tsv
│       │   ├── spells/
│       │   │   └── spelldat.tsv
│       │   └── towners/
│       │       ├── quest_dialog.tsv
│       │       └── towners.tsv
│       └── ui_art/
│           ├── diablo.pal
│           ├── hf_titlew.clx
│           ├── mainmenuw.clx
│           └── supportw.clx
├── test/
│   ├── .clang-format
│   ├── Fixtures.cmake
│   ├── animationinfo_test.cpp
│   ├── app_fatal_for_testing.cpp
│   ├── appfat_test.cpp
│   ├── automap_test.cpp
│   ├── clx_render_benchmark.cpp
│   ├── codec_test.cpp
│   ├── crawl_benchmark.cpp
│   ├── crawl_test.cpp
│   ├── cursor_test.cpp
│   ├── data_file_test.cpp
│   ├── dead_test.cpp
│   ├── diablo_test.cpp
│   ├── drlg_common_test.cpp
│   ├── drlg_l1_test.cpp
│   ├── drlg_l2_test.cpp
│   ├── drlg_l3_test.cpp
│   ├── drlg_l4_test.cpp
│   ├── drlg_test.hpp
│   ├── dun_render_benchmark.cpp
│   ├── effects_test.cpp
│   ├── file_util_test.cpp
│   ├── fixtures/
│   │   ├── diablo/
│   │   │   ├── 1-2588.dun
│   │   │   ├── 1-743271966.dun
│   │   │   ├── 10-1630062353.dun
│   │   │   ├── 10-879635115.dun
│   │   │   ├── 11-384626536.dun
│   │   │   ├── 12-2104541047.dun
│   │   │   ├── 13-428074402.dun
│   │   │   ├── 13-594689775.dun
│   │   │   ├── 14-717625719.dun
│   │   │   ├── 14-815743776.dun
│   │   │   ├── 15-1256511996.dun
│   │   │   ├── 15-1583642716-changed.dun
│   │   │   ├── 15-1583642716.dun
│   │   │   ├── 16-741281013.dun
│   │   │   ├── 2-1383137027.dun
│   │   │   ├── 3-844660068.dun
│   │   │   ├── 4-609325643.dun
│   │   │   ├── 4-902156014.dun
│   │   │   ├── 5-1677631846.dun
│   │   │   ├── 5-68685319.dun
│   │   │   ├── 6-1824554527.dun
│   │   │   ├── 6-2033265779.dun
│   │   │   ├── 6-2034738122.dun
│   │   │   ├── 7-1607627156.dun
│   │   │   ├── 7-680552750.dun
│   │   │   ├── 8-1999936419.dun
│   │   │   └── 9-262005438.dun
│   │   ├── hellfire/
│   │   │   ├── 1-401921334.dun
│   │   │   ├── 1-536340718.dun
│   │   │   ├── 17-19770182.dun
│   │   │   ├── 18-1522546307.dun
│   │   │   ├── 19-125121312.dun
│   │   │   ├── 2-1180526547.dun
│   │   │   ├── 2-128964898.dun
│   │   │   ├── 20-1511478689.dun
│   │   │   ├── 21-2122696790.dun
│   │   │   ├── 22-1191662129.dun
│   │   │   ├── 23-97055268.dun
│   │   │   ├── 24-1324803725.dun
│   │   │   ├── 3-1369955278.dun
│   │   │   ├── 3-1512491184.dun
│   │   │   ├── 3-1799396623.dun
│   │   │   ├── 4-1190318991.dun
│   │   │   └── 4-1924296259.dun
│   │   ├── levels/
│   │   │   ├── l1data/
│   │   │   │   ├── banner1.dun
│   │   │   │   ├── banner2.dun
│   │   │   │   ├── rnd6.dun
│   │   │   │   └── skngdo.dun
│   │   │   ├── l2data/
│   │   │   │   ├── blind1.dun
│   │   │   │   ├── blood1.dun
│   │   │   │   ├── blood2.dun
│   │   │   │   ├── bonestr1.dun
│   │   │   │   └── bonestr2.dun
│   │   │   ├── l3data/
│   │   │   │   └── anvil.dun
│   │   │   └── l4data/
│   │   │       ├── diab1.dun
│   │   │       ├── diab2a.dun
│   │   │       ├── diab2b.dun
│   │   │       ├── diab3a.dun
│   │   │       ├── diab3b.dun
│   │   │       ├── diab4a.dun
│   │   │       ├── diab4b.dun
│   │   │       ├── vile1.dun
│   │   │       ├── warlord.dun
│   │   │       └── warlord2.dun
│   │   ├── light_render_benchmark/
│   │   │   └── dLight.dmp
│   │   ├── memory_map/
│   │   │   ├── additionalMissiles.txt
│   │   │   ├── game.txt
│   │   │   ├── hero.txt
│   │   │   ├── item.txt
│   │   │   ├── itemPack.txt
│   │   │   ├── level.txt
│   │   │   ├── levelSeed.txt
│   │   │   ├── lightning.txt
│   │   │   ├── missile.txt
│   │   │   ├── monster.txt
│   │   │   ├── object.txt
│   │   │   ├── player.txt
│   │   │   ├── portal.txt
│   │   │   └── quest.txt
│   │   ├── timedemo/
│   │   │   └── WarriorLevel1to2/
│   │   │       ├── demo_0.dmo
│   │   │       ├── demo_0_reference_spawn_0.sv
│   │   │       └── spawn_0.sv
│   │   └── txtdata/
│   │       ├── cr.tsv
│   │       ├── crlf.tsv
│   │       ├── empty.tsv
│   │       ├── empty_with_utf8_bom.tsv
│   │       ├── lf.tsv
│   │       ├── lf_no_trail.tsv
│   │       ├── sample.tsv
│   │       └── utf8_bom.tsv
│   ├── format_int_test.cpp
│   ├── ini_test.cpp
│   ├── inv_test.cpp
│   ├── items_test.cpp
│   ├── language_for_testing.cpp
│   ├── light_render_benchmark.cpp
│   ├── main.cpp
│   ├── math_test.cpp
│   ├── missiles_test.cpp
│   ├── multi_logging_test.cpp
│   ├── pack_test.cpp
│   ├── palette_blending_benchmark.cpp
│   ├── palette_blending_test.cpp
│   ├── parse_int_test.cpp
│   ├── path_benchmark.cpp
│   ├── path_test.cpp
│   ├── player_test.cpp
│   ├── player_test.h
│   ├── quests_test.cpp
│   ├── random_test.cpp
│   ├── rectangle_test.cpp
│   ├── scrollrt_test.cpp
│   ├── static_vector_test.cpp
│   ├── stores_test.cpp
│   ├── str_cat_test.cpp
│   ├── text_render_integration_test.cpp
│   ├── tile_properties_test.cpp
│   ├── timedemo_test.cpp
│   ├── townerdat_test.cpp
│   ├── utf8_test.cpp
│   ├── vendor_test.cpp
│   ├── vision_test.cpp
│   └── writehero_test.cpp
├── tools/
│   ├── Dockerfile.s390x
│   ├── build_and_install_smpq.ps1
│   ├── build_and_install_smpq.sh
│   ├── build_and_run_benchmark.py
│   ├── build_pgo.sh
│   ├── extract_translation_data.py
│   ├── gdb/
│   │   ├── README.md
│   │   └── devilution_gdb/
│   │       ├── __init__.py
│   │       └── pretty_printers/
│   │           └── utils/
│   │               └── static_vector_pp.py
│   ├── linux_reduced_cpu_variance_run.sh
│   ├── lldb/
│   │   ├── README.md
│   │   └── devilution_lldb/
│   │       ├── __init__.py
│   │       └── pretty_printers/
│   │           └── utils/
│   │               └── static_vector_pp.py
│   ├── make_src_dist.py
│   ├── measure_timedemo_performance.py
│   ├── run_big_endian_tests.sh
│   ├── segmenter/
│   │   ├── README.md
│   │   ├── requirements.txt
│   │   ├── segment_all.py
│   │   ├── segment_ja.py
│   │   ├── segment_zh.py
│   │   └── segmenter_lib.py
│   ├── update_bundled_assets.sh
│   ├── update_sdl_android_project.sh
│   ├── update_translations_pot.py
│   └── validate_translations.py
├── uwp-project/
│   ├── Package.appxmanifest
│   ├── Package.appxmanifest.template
│   ├── devilutionX_TemporaryKey.pfx
│   ├── devilutionx.sln
│   ├── devilutionx.vcxproj
│   └── src/
│       └── SDL_winrt_main_NonXAML.cpp
└── vcpkg.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/Dockerfile
================================================
ARG VARIANT=debian-12
FROM mcr.microsoft.com/devcontainers/base:${VARIANT}
USER root

# Install APT packages
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install tar curl zip unzip bash-completion build-essential ripgrep htop \
    ninja-build ccache g++ mold gdb clang-format clang-tidy \
    rpm pkg-config cmake git gettext libsdl2-dev libsdl2-image-dev libsodium-dev \
    libpng-dev libbz2-dev libfmt-dev libgtest-dev libgmock-dev libbenchmark-dev zsh \
    qtbase5-dev qt6-base-dev ristretto \
    && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*

RUN --mount=type=bind,source=tools/build_and_install_smpq.sh,target=/tmp/build_and_install_smpq.sh sh /tmp/build_and_install_smpq.sh

# Install devilutionx-graphics-tools
RUN git clone https://github.com/diasurgical/devilutionx-graphics-tools.git /tmp/devilutionx-graphics-tools && \
    cd /tmp/devilutionx-graphics-tools && \
    cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \
    cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
    cmake --install build-rel --component Binaries && \
    rm -rf /tmp/devilutionx-graphics-tools

# Install devilutionx-mpq-tools
RUN git clone https://github.com/diasurgical/devilutionx-mpq-tools.git /tmp/devilutionx-mpq-tools && \
    cd /tmp/devilutionx-mpq-tools && \
    cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \
    cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
    cmake --install build-rel && \
    rm -rf /tmp/devilutionx-mpq-tools

# Install d1-graphics-tool
RUN git clone https://github.com/diasurgical/d1-graphics-tool.git /tmp/d1-graphics-tool && \
    cd /tmp/d1-graphics-tool && \
    cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release && \
    cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
    cmake --install build-rel && \
    rm -rf /tmp/d1-graphics-tool

# Download spawn.mpq and fonts.mpq
RUN curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \
    https://github.com/diasurgical/devilutionx-assets/releases/latest/download/spawn.mpq && \
    curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \
    https://github.com/diasurgical/devilutionx-assets/releases/latest/download/fonts.mpq && \
    chown -R vscode: /usr/local/share/diasurgical/

# Desktop environment configuration
COPY .devcontainer/fluxbox /home/vscode/.fluxbox/


================================================
FILE: .devcontainer/devcontainer.json
================================================
{
	"build": {
		"dockerfile": "Dockerfile",
		"context": ".."
	},
	"customizations": {
		"vscode": {
			"extensions": [
				"github.vscode-github-actions",
				"ms-vscode.cmake-tools"
			]
		}
	},
	"features": {
		// https://github.com/devcontainers/features/tree/main/src/desktop-lite
		"ghcr.io/devcontainers/features/desktop-lite:1": {
			"webPort": 6080,
			"password": "vscode"
		},
		"ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {},
		"ghcr.io/stuartleeks/dev-container-features/shell-history:0": {}
	},
	"forwardPorts": [
		6080
	],
	"portsAttributes": {
		"6080": {
			"label": "desktop"
		}
	}
}


================================================
FILE: .devcontainer/fluxbox/apps
================================================
[transient] (role=GtkFileChooserDialog)
  [Dimensions]  {70% 70%}
  [Position]    (CENTER)        {0 0}
[end]
[app] (name=AppRun) (class=tiled)
  [Fullscreen]  {yes}
[end]


================================================
FILE: .devcontainer/fluxbox/menu
================================================
[begin] (  Application Menu  )
    [exec] (File Manager) { nautilus /workspaces/devilutionX } </usr/share/icons/gnome/32x32/apps/file-manager.png>
    [exec] (D1 Graphics Tool) { D1GraphicsTool } <>
    [exec] (Text Editor) { mousepad } <>
    [exec] (Terminal) { tilix -w ~ -e $(readlink -f /proc/$$/exe) -il } <>
    [exec] (Web Browser) { x-www-browser --disable-dev-shm-usage } <>
    [submenu] (System) {}
        [exec] (Set Resolution) { tilix -t "Set Resolution" -e bash /usr/local/bin/set-resolution } <>
        [exec] (Edit Application Menu) { mousepad ~/.fluxbox/menu } <>
        [exec] (Passwords and Keys) { seahorse } <>
        [exec] (Top Processes) { tilix -t "Top" -e htop } <>
        [exec] (Disk Utilization) { tilix -t "Disk Utilization" -e ncdu / } <>
        [exec] (Editres) {editres} <>
        [exec] (Xfontsel) {xfontsel} <>
        [exec] (Xkill) {xkill} <>
        [exec] (Xrefresh) {xrefresh} <>
    [end]
    [config] (Configuration)
    [workspaces] (Workspaces)
[end]


================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = tab
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}]
# Visual C++ Code Style settings
cpp_generate_documentation_comments = doxygen_slash_star

[*.java]
end_of_line = lf

[*.pot]
end_of_line = lf

[*.po]
end_of_line = lf

[*.lua]
indent_style = space
indent_size = 2
end_of_line = lf

[*.py]
indent_style = space
indent_size = 4
end_of_line = lf

[*.rb]
end_of_line = lf

[*.yml]
indent_style = space
end_of_line = lf

[*.sh]
end_of_line = lf

[*.xml]
end_of_line = lf

[.clang-format]
end_of_line = lf

[.gitignore]
end_of_line = lf

[*.cmake]
indent_style = space
indent_size = 2

[*.desktop]
end_of_line = lf

[*.md]
indent_style = space
indent_size = 2
end_of_line = lf

[*.txt]
end_of_line = crlf

[*.tsv]
trim_trailing_whitespace = false

[*.plist]
end_of_line = lf

[AppRun]
end_of_line = lf

[{CMakeLists.txt,CMakeSettings.json}]
indent_style = space
indent_size = 2
end_of_line = crlf

[control]
end_of_line = lf

[devilutionx.spec]
end_of_line = lf

[Dockerfile]
end_of_line = lf

[ASSETS_VERSION]
end_of_line = lf


================================================
FILE: .gdbinit
================================================
source tools/gdb/devilution_gdb/__init__.py


================================================
FILE: .gitattributes
================================================
# Do not let git change line endings.
* -text


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Create a report to help us improve
title: "[Issue Report]: "
labels: ["issue report"]
body:
  - type: dropdown
    id: operating-system
    attributes:
      label: Operating System
      options:
        - Windows x64
        - Windows x86
        - Linux x64
        - Linux x86
        - Mac
        - Android
        - iOS
        - Xbox One
        - PlayStation 4
        - Nintendo Switch
        - PlayStation Vita
        - Nintendo 3DS
        - Other (please specify)
    validations:
      required: true
  - type: dropdown
    id: version
    attributes:
      label: DevilutionX version
      options:
        - 1.5.5
        - 1.5.4
        - 1.5.3
        - 1.5.2
        - 1.5.1
        - 1.5.0
        - 1.4.1
        - 1.4.0
        - 1.3.0
        - 1.2.1
        - 1.1.0
        - Custom build (please specify commit ID)
        - Other (please specify version number)
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Describe
      placeholder: A clear and concise description of what the bug is.
    validations:
      required: true
  - type: textarea
    id: steps-to-reproduce
    attributes:
      label: To Reproduce
      description: Steps to reproduce the behavior
      placeholder: |
        1. Go to '...'
        2. Click on '...'
        3. Scroll down to '...'
        4. See error
    validations:
      required: true
  - type: input
    id: expected-behavior
    attributes:
      label: Expected Behavior
      placeholder: A clear and concise description of what you expected to happen.
  - type: textarea
    id: additional-context
    attributes:
      label: Additional context
      placeholder: Any other context about the problem here (screenshots, videos, code blocks, etc.).


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Request a feature or improvement.
title: "[Feature Request]: "
labels: ["enhancement"]
body:
  - type: dropdown
    id: feature-type
    attributes:
      label: Feature Type
      options:
        - Quality of Life
        - Touch Controls
        - Gamepad Controls
        - Other (please specify)
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Describe
      placeholder: A clear and concise description of the desired feature/change.
    validations:
      required: true


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: github-actions
    directory: '/'
    schedule:
      interval: weekly


================================================
FILE: .github/workflows/3ds.yml
================================================
---
name: Nintendo 3DS

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    container: devkitpro/devkitarm:latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install dependencies
        run: |
          apt-get update && apt-get install -y --no-install-recommends --no-install-suggests \
            ffmpeg

      - name: Get external dependencies
        run: |
          wget https://github.com/diasurgical/bannertool/releases/download/1.2.0/bannertool.zip
          unzip -j "bannertool.zip" "linux-x86_64/bannertool" -d "/opt/devkitpro/tools/bin"
          wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18/makerom-v0.18-ubuntu_x86_64.zip
          unzip "makerom-v0.18-ubuntu_x86_64.zip" "makerom" -d "/opt/devkitpro/tools/bin"
          chmod a+x /opt/devkitpro/tools/bin/makerom

      - name: Configure CMake
        run: |
          cmake \
            -S . \
            -B build \
            -G Ninja \
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
            -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake

      - name: Build DevilutionX
        run: cmake --build build

      - name: Upload 3dsx Package
        if: ${{ !env.ACT }}
        uses: actions/upload-artifact@v7
        with:
          name: devilutionx.3dsx
          path: ./build/devilutionx.3dsx

      - name: Upload cia Package
        if: ${{ !env.ACT }}
        uses: actions/upload-artifact@v7
        with:
          name: devilutionx.cia
          path: ./build/devilutionx.cia

      - name: Update Release 3dsx
        if: ${{ github.event_name == 'release' && !env.ACT }}
        uses: svenstaro/upload-release-action@v2
        with:
          asset_name: devilutionx-3ds.3dsx
          file: ./build/devilutionx.3dsx
          overwrite: true

      - name: Update Release cia
        if: ${{ github.event_name == 'release' && !env.ACT }}
        uses: svenstaro/upload-release-action@v2
        with:
          asset_name: devilutionx-3ds.cia
          file: ./build/devilutionx.cia
          overwrite: true


================================================
FILE: .github/workflows/Android.yml
================================================
name: Android

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Install gettext
      run: sudo apt-get update && sudo apt-get install -y gettext

    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: set up JDK 17
      uses: actions/setup-java@v5
      with:
        java-version: '17'
        distribution: 'adopt'
        cache: gradle

    - name: Install CMake
      run: |
        $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "cmake;3.31.0"

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: android-project/app/.cxx
        key: ${{ github.workflow }}-v5-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v5-

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: cd android-project && ./gradlew assembleDebug

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-debug.apk
        path: android-project/app/build/outputs/apk/debug/app-debug.apk

    - name: Clean up artifacts
      run: rm -rf android-project/app/build/outputs


================================================
FILE: .github/workflows/Linux_aarch64.yml
================================================
name: Linux AArch64 (aarch64-linux-gnu)

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    # Installs dependencies, including arm64 libraries (runs `sudo apt-get update` as part of it)
    - name: Install dependencies
      run: Packaging/nix/debian-cross-aarch64-prep.sh

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v8-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v8-

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      # We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
      run: |
        cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/aarch64-linux-gnu.toolchain.cmake \
          -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON -DDEVILUTIONX_SYSTEM_LIBFMT=OFF \
          -DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF -DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
        cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package

    - name: Package
      run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-aarch64-linux-gnu.tar.xz

    # AppImage cross-packaging is not implemented yet.
    # - name: Package AppImage
    #   run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-aarch64-linux-gnu.appimage

    - name: Upload Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-aarch64-linux-gnu.tar.xz
        path: devilutionx-aarch64-linux-gnu.tar.xz

    # AppImage cross-packaging is not implemented yet.
    # - name: Upload AppImage
    #   if: ${{ !env.ACT }}
    #   uses: actions/upload-artifact@v7
    #   with:
    #     name: devilutionx-aarch64-linux-gnu.appimage
    #     path: devilutionx-aarch64-linux-gnu.appimage

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-aarch64-linux-gnu.*
        file_glob: true
        overwrite: true

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz


================================================
FILE: .github/workflows/Linux_x86.yml
================================================
name: Linux x86 (i386-linux-gnu)

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    # Installs dependencies, including x86 libraries (runs `sudo apt-get update` as part of it)
    - name: Install dependencies
      run: Packaging/nix/debian-cross-i386-prep.sh

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v7-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v7-

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      # We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
      run: |
        cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/linux_i386.toolchain.cmake \
          -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
          -DBUILD_TESTING=OFF -DDEVILUTIONX_SYSTEM_LIBFMT=OFF -DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF \
          -DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
        cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package

    - name: Package
      run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-i386-linux-gnu.tar.xz

    # AppImage cross-packaging is not implemented yet.
    # - name: Package AppImage
    #   run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-i386-linux-gnu.appimage

    - name: Upload Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-i386-linux-gnu.tar.xz
        path: devilutionx-i386-linux-gnu.tar.xz

    # AppImage cross-packaging is not implemented yet.
    # - name: Upload AppImage
    #   if: ${{ !env.ACT }}
    #   uses: actions/upload-artifact@v7
    #   with:
    #     name: devilutionx-i386-linux-gnu.appimage
    #     path: devilutionx-i386-linux-gnu.appimage

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-i386-linux-gnu.*
        file_glob: true
        overwrite: true

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz


================================================
FILE: .github/workflows/Linux_x86_64.yml
================================================
name: Linux x86_64 (x86_64-linux-gnu)

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    # Installs dependencies and runs `sudo apt-get update` as part of it.
    - name: Install dependencies
      run: Packaging/nix/debian-host-prep.sh

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v7-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v7-

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      # We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
      # We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
      run: |
        cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
          -DDISCORD_INTEGRATION=ON -DBUILD_TESTING=OFF -DDEVILUTIONX_SYSTEM_LIBFMT=OFF \
          -DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF -DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
        cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package

    - name: Package
      run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-x86_64-linux-gnu.tar.xz

    - name: Package AppImage
      run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-x86_64-linux-gnu.appimage

    - name: Upload Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-x86_64-linux-gnu.tar.xz
        path: devilutionx-x86_64-linux-gnu.tar.xz

    - name: Upload AppImage
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-x86_64-linux-gnu.appimage
        path: devilutionx-x86_64-linux-gnu.appimage

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-x86_64-linux-gnu.*
        file_glob: true
        overwrite: true

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz


================================================
FILE: .github/workflows/Linux_x86_64_SDL1.yml
================================================
name: Linux x64 SDL1

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y cmake file g++ git libfmt-dev libsdl1.2-dev libsodium-dev libpng-dev libbz2-dev rpm smpq

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v3-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v3-

    - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}
      # Disable LTO to work around an ICE in gcc11
      run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DUSE_SDL1=ON -DDISCORD_INTEGRATION=ON -DDISABLE_LTO=ON

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: cmake --build build -j $(nproc) --target package

    - name: Package
      run: Packaging/nix/LinuxReleasePackaging.sh

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx_linux_x86_64_SDL1.tar.xz
        path: devilutionx.tar.xz

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz


================================================
FILE: .github/workflows/Linux_x86_64_SDL3_test.yml
================================================
name: Linux x64 SDL3 Tests

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Install dependencies
      run: |
        sudo apt-get update -y
        sudo apt-get install -y cmake curl g++ git libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsodium-dev libpng-dev libbz2-dev libasound2-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libxtst-dev libxkbcommon-dev wget

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v4-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v4-

    # We specify `-DDEVILUTIONX_SYSTEM_BENCHMARK=OFF` to work around the following error:
    # lto1: fatal error: bytecode stream in file ‘/usr/lib/x86_64-linux-gnu/libbenchmark_main.a’ generated with LTO version 11.2 instead of the expected 11.3
    - name: Build tests
      run: |
        cmake -S. -Bbuild -G Ninja -DUSE_SDL3=ON -DDEVILUTIONX_SYSTEM_SDL3=OFF -DDEVILUTIONX_STATIC_SDL3=ON -DDEVILUTIONX_SYSTEM_SDL_IMAGE=OFF -DDEVILUTIONX_SYSTEM_BENCHMARK=OFF
        wget -qnc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build
        cmake --build build -j $(nproc)

    - name: Run tests
      run: cd build && ctest --output-on-failure


================================================
FILE: .github/workflows/Linux_x86_64_test.yml
================================================
name: Linux x64 Tests

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Install dependencies
      run: |
        sudo apt-get update -y
        sudo apt-get install -y cmake curl g++ git lcov libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsdl2-dev libsodium-dev libpng-dev libbz2-dev wget

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v3-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v3-

    # We specify `-DDEVILUTIONX_SYSTEM_BENCHMARK=OFF` to work around the following error:
    # lto1: fatal error: bytecode stream in file ‘/usr/lib/x86_64-linux-gnu/libbenchmark_main.a’ generated with LTO version 11.2 instead of the expected 11.3
    - name: Build tests
      run: |
        cmake -S. -Bbuild -G Ninja -DENABLE_CODECOVERAGE=ON -DDEVILUTIONX_SYSTEM_BENCHMARK=OFF
        wget -qnc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build
        cmake --build build -j $(nproc)

    - name: Run tests
      run: cd build && ctest --output-on-failure

    - name: Upload results
      uses: codecov/codecov-action@v5
      with:
        token: ${{ secrets.CODECOV_TOKEN }}


================================================
FILE: .github/workflows/PS4.yml
================================================
name: PS4

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  ps4:
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: |
        sudo apt-get update && \
        sudo apt-get install -y pacman-package-manager wget cmake git gettext smpq && \
        sudo tee -a /etc/pacman.conf > /dev/null <<TEXT
        [pacbrew]
        SigLevel = Optional TrustAll
        Server = https://pacman.mydedibox.fr/pacbrew/packages/
        TEXT
    - name: Setup pacman packages
      run: |
        sudo pacman --noconfirm -Sy && \
        sudo pacman --noconfirm -S ps4-openorbis ps4-openorbis-portlibs && \
        echo "#include <endian.h>" | sudo tee /opt/pacbrew/ps4/openorbis/include/sys/endian.h

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: Packaging/ps4/build.sh

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-ps4.pkg
        path: build-ps4/devilutionx.pkg

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        asset_name: devilutionx-ps4.pkg
        file: build-ps4/devilutionx.pkg
        overwrite: true


================================================
FILE: .github/workflows/PS5.yml
================================================
name: PS5 (ps5-payload-dev)

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


jobs:
  ps5:
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: |
        sudo apt update
        sudo apt install cmake pkg-config clang-15 lld-15
        sudo apt install build-essential autoconf libtool yasm nasm
        sudo apt install smpq gperf pkgconf libarchive-tools autopoint po4a git curl doxygen wget
        wget https://github.com/ps5-payload-dev/pacbrew-repo/releases/download/v0.27/ps5-payload-dev.tar.gz
        sudo tar -xf ps5-payload-dev.tar.gz -C /

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: Packaging/ps5/build.sh

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-ps5.zip
        path: build-ps5/devilutionx-ps5.zip

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        asset_name: devilutionx-ps5.zip
        file: build-ps5/devilutionx-ps5.zip
        overwrite: true


================================================
FILE: .github/workflows/Windows9x_MinGW.yml
================================================
name: Windows 9x MinGW

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
        sudo rm /usr/i686-w64-mingw32/lib/libz.dll.a &&
        sudo Packaging/windows/mingw9x-prep.sh

    - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}
      run: cmake -S. -Bbuild-windows9x -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingw9x.toolchain.cmake -DTARGET_PLATFORM=windows9x

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: |
        cmake --build build-windows9x -j $(nproc) --target package
        mv build-windows9x/devilutionx.zip devilutionx-win9x.zip

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        path: devilutionx-win9x.zip

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-win9x.zip
        overwrite: true



================================================
FILE: .github/workflows/Windows_MSVC_x64.yml
================================================
name: Windows MSVC x64

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

permissions:
  contents: write

env:
  VCPKG_FEATURE_FLAGS: dependencygraph
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: windows-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: ccache
      uses: hendrikmuhs/ccache-action@v1.2

    - name: Install latest CMake
      uses: lukka/get-cmake@latest

    - name: Restore or setup vcpkg
      uses: lukka/run-vcpkg@v11.5
      with:
        vcpkgGitCommitId: 'a62ce77d56ee07513b4b67de1ec2daeaebfae51a'

    - name: Fetch test data
      run: |
          mkdir build-ninja-vcpkg-relwithdebinfo
          Invoke-WebRequest -Uri "https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq" -OutFile "build-ninja-vcpkg-relwithdebinfo/spawn.mpq" -Resume

    - name: Get CMakePresets.json
      run: cp Packaging/windows/CMakePresets.json .

    - name: Run CMake consuming CMakePresets.json and vcpkg.json by mean of vcpkg.
      uses: lukka/run-cmake@v10
      with:
        configurePreset: 'ninja-vcpkg-relwithdebinfo'
        buildPreset: 'ninja-vcpkg-relwithdebinfo'
        testPreset: 'ninja-vcpkg-relwithdebinfo'

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx.exe
        path: |
            build-ninja-vcpkg-relwithdebinfo/devilutionx.exe
            build-ninja-vcpkg-relwithdebinfo/bz2.dll
            build-ninja-vcpkg-relwithdebinfo/fmt.dll
            build-ninja-vcpkg-relwithdebinfo/libpng16.dll
            build-ninja-vcpkg-relwithdebinfo/libsodium.dll
            build-ninja-vcpkg-relwithdebinfo/SDL2.dll
            build-ninja-vcpkg-relwithdebinfo/SDL2_image.dll
            build-ninja-vcpkg-relwithdebinfo/zlib1.dll


================================================
FILE: .github/workflows/Windows_MinGW_x64.yml
================================================
name: Windows MinGW x64

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y cmake gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 pkg-config-mingw-w64-x86-64 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
        sudo Packaging/windows/mingw-prep64.sh

    - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}
      run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc64.toolchain.cmake -DDEVILUTIONX_SYSTEM_BZIP2=OFF -DDEVILUTIONX_STATIC_LIBSODIUM=ON -DDISCORD_INTEGRATION=ON -DSCREEN_READER_INTEGRATION=ON

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: cmake --build build -j $(nproc) --target package

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx_x64.zip
        path: build/devilutionx.zip

    - name: Move artifacts to new folder and split exe and other data into two folders
      if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX'}}
      working-directory: ${{github.workspace}}
      shell: bash
      run: mkdir artifacts_dir && unzip build/devilutionx.zip -d artifacts_dir && mkdir artifacts_dir/exe_dir && mv artifacts_dir/devilutionx/devilutionx.exe artifacts_dir/exe_dir && zip -m artifacts_dir/exe_dir/build.zip artifacts_dir/exe_dir/devilutionx.exe && rm artifacts_dir/devilutionx/libTolk.dll

    - name: Pushes DLLs and devilutionx.mpq to another repository
      if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX' }}
      uses: cpina/github-action-push-to-another-repository@main
      env:
        SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
      with:
        source-directory: artifacts_dir/devilutionx/
        destination-github-username: 'artifacts-storage'
        destination-repository-name: 'devilutionx-artifacts'
        target-directory: data
        commit-message: "[DATA] ${{ github.event.head_commit.message }}"
        target-branch: master

    - name: Pushes exe to another repository
      if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX' }}
      uses: cpina/github-action-push-to-another-repository@main
      env:
        SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
      with:
        source-directory: artifacts_dir/exe_dir
        destination-github-username: 'artifacts-storage'
        destination-repository-name: 'devilutionx-artifacts'
        target-directory: ${{ github.sha }}
        commit-message: "[EXE] ${{ github.event.head_commit.message }}"
        target-branch: master


================================================
FILE: .github/workflows/Windows_MinGW_x86.yml
================================================
name: Windows MinGW x86

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt update &&
        sudo apt install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 pkg-config-mingw-w64-i686 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
        sudo Packaging/windows/mingw-prep.sh

    - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}
      run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc.toolchain.cmake -DDEVILUTIONX_SYSTEM_BZIP2=OFF -DDEVILUTIONX_STATIC_LIBSODIUM=ON -DDISCORD_INTEGRATION=ON -DSCREEN_READER_INTEGRATION=ON

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: cmake --build build -j $(nproc) --target package

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx_x86.zip
        path: build/devilutionx.zip


================================================
FILE: .github/workflows/Windows_XP_32bit.yml
================================================
name: Windows XP MinGW

on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt update &&
        sudo apt install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 pkg-config-mingw-w64-i686 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
        sudo rm /usr/i686-w64-mingw32/lib/libz.dll.a &&
        sudo Packaging/windows/mingw-prep.sh

    - name: Configure CMake
      shell: bash
      working-directory: ${{github.workspace}}
      run: cmake -S. -Bbuild-windowsxp -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc.toolchain.cmake  -DTARGET_PLATFORM=windowsXP

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: |
        cmake --build build-windowsxp -j $(nproc) --target package
        mv build-windowsxp/devilutionx.zip devilutionx-windows-xp-32bit.zip

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        path: devilutionx-windows-xp-32bit.zip

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-windows-xp-32bit.zip
        overwrite: true

================================================
FILE: .github/workflows/amiga-m68k.yml
================================================
---
name: Amiga M68K

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    container: amigadev/crosstools:m68k-amigaos-gcc10@sha256:e0ee27eb4174ba8f95143273dd2ecb0ffa23ca6a195e013030a681ab541b4a37
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Run prep.sh script
        run: ./Packaging/amiga/prep.sh

      - name: Configure CMake
        run: |
          cmake \
            -S . \
            -B build \
            -G Ninja \
            -DCMAKE_BUILD_TYPE=Release \
            -DM68K_COMMON="-s -fbbb=- -ffast-math" \
            -DM68K_CPU=68040 \
            -DM68K_FPU=hard

      - name: Build DevilutionX
        run: cmake --build build

      - name: Upload Package
        if: ${{ !env.ACT }}
        uses: actions/upload-artifact@v7
        with:
          name: devilutionx_m68k
          path: ./build/devilutionx

      - name: Update Release
        if: ${{ github.event_name == 'release' && !env.ACT }}
        uses: svenstaro/upload-release-action@v2
        with:
          asset_name: devilutionx-amiga-m68k
          file: ./build/devilutionx
          overwrite: true


================================================
FILE: .github/workflows/cache-cleanup.yml
================================================
name: Delete cache for a closed Pull Request
on:
  pull_request:
    types:
      - closed

jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v6

      # https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
      - name: Cleanup
        run: |
          gh extension install actions/gh-actions-cache

          REPO=${{ github.repository }}
          BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"

          echo "Fetching list of cache key"
          cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )

          ## Setting this to not fail the workflow while deleting cache keys.
          set +e
          echo "Deleting caches..."
          for cacheKey in $cacheKeysForPR; do
            gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
          done
          echo "Done"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/clang-format-check.yml
================================================
name: clang-format check

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  formatting-check:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Formatting Check (Source)
      uses: jidicula/clang-format-action@v4.17.0
      with:
        clang-format-version: '18'
        check-path: 'Source'

    - name: Formatting Check (test)
      uses: jidicula/clang-format-action@v4.17.0
      with:
        clang-format-version: '18'
        check-path: 'test'


================================================
FILE: .github/workflows/clang-tidy-check.yml
================================================
name: clang-tidy check

on:
  push:
    branches:
      - master
    paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx', '**.hxx', '**.cc', '**.hh', '**CMakeLists.txt', 'meson.build', '**.cmake', '.github/workflows/clang-tidy-check.yml']
  pull_request:
    types: [ opened, synchronize ]
    paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx', '**.hxx', '**.cc', '**.hh', '**CMakeLists.txt', 'meson.build', '**.cmake', '.github/workflows/clang-tidy-check.yml']

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  tidy-check:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Install dependencies
      run: |
        sudo apt-get update -y
        sudo apt-get install -y cmake curl g++ git libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsdl2-dev libsodium-dev libpng-dev libbz2-dev wget

    - name: CMake Configure
      run: cmake -S. -Bbuild

    - name: clang-tidy Check
      uses: cpp-linter/cpp-linter-action@v2
      id: linter
      with:
        database: build # directory containing compile_commands.json
        style: '' # using an empty string here disables clang-format checks. We leave the existing clang-format-check workflow to run clang-format instead
        tidy-checks: '' # using an empty string here instructs the action to use only checks from the .clang-tidy file
        ignore-tidy: '3rdParty'


================================================
FILE: .github/workflows/iOS.yml
================================================
name: iOS

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: macos-14

    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v5-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v5-

    - name: Configure CMake
      # Use a bash shell so we can use the same syntax for environment variable
      # access regardless of the host operating system
      shell: bash
      working-directory: ${{github.workspace}}
      run: cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/ios.toolchain.cmake  -DENABLE_BITCODE=0 -DPLATFORM=OS64

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: >
        cmake --build build -j $(sysctl -n hw.physicalcpu) --config Release &&
        cd build &&
        mkdir Payload &&
        mv devilutionx.app Payload &&
        zip -r devilutionx-iOS.ipa Payload

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-iOS.ipa
        path: build/devilutionx-iOS.ipa

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: build/devilutionx-iOS.ipa
        overwrite: true

    - name: Clean up artifacts
      run: rm -rf build/Payload build/*.ipa


================================================
FILE: .github/workflows/macOS_arm64.yml
================================================
name: macOS arm64

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: macos-14
    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: brew bundle install

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v2-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v2-

    - name: Clean previous DMG
      working-directory: ${{github.workspace}}
      run: rm -f build/*.dmg

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      run: |
        cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DBUILD_TESTING=OFF \
          -DMACOSX_STANDALONE_APP_BUNDLE=ON && \
        cmake --build build -j $(sysctl -n hw.physicalcpu) --target package && \
        mv build/devilutionx.dmg build/devilutionx-arm64-macOS.dmg

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-arm64-macOS.dmg
        path: build/devilutionx-arm64-macOS.dmg

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/*.dmg


================================================
FILE: .github/workflows/macOS_x86_64.yml
================================================
name: macOS x86_64

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: macos-15-intel
    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: brew bundle install

    - name: Cache CMake build folder
      uses: actions/cache@v5
      with:
        path: build
        key: ${{ github.workflow }}-v4-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v4-

    - name: Clean previous DMG
      working-directory: ${{github.workspace}}
      run: rm -f build/*.dmg

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      run: |
        cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DBUILD_TESTING=OFF \
          -DMACOSX_STANDALONE_APP_BUNDLE=ON -DDISCORD_INTEGRATION=ON && \
        cmake --build build -j $(sysctl -n hw.physicalcpu) --target package && \
        mv build/devilutionx.dmg build/devilutionx-x86_64-macOS.dmg

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-x86_64-macOS.dmg
        path: build/devilutionx-x86_64-macOS.dmg

    - name: Clean up artifacts
      run: rm -rf build/_CPack_Packages build/*.dmg


================================================
FILE: .github/workflows/miyoo_mini_release.yml
================================================
name: Miyoo Mini Release Build

on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  miyoo-mini:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name:  Install toolchain
      working-directory: ${{github.workspace}}
      run: sudo Packaging/miyoo_mini/setup_toolchain.sh

    - name:  Build
      working-directory: ${{github.workspace}}
      run: Packaging/miyoo_mini/build.sh

    - name: Upload-OnionOS-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-miyoo-mini-onion-os.zip
        path: build-miyoo-mini/devilutionx-miyoo-mini-onion-os.zip

    - name: Upload-miniUI-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-miyoo-mini-miniui.zip
        path: build-miyoo-mini/devilutionx-miyoo-mini-miniui.zip

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "build-miyoo-mini/devilutionx-*.zip"
        file_glob: true
        overwrite: true


================================================
FILE: .github/workflows/opendingux_release.yml
================================================
name: OpenDingux Release Build

on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  gcw0:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y curl cmake git squashfs-tools &&
        curl -L https://github.com/OpenDingux/buildroot/releases/download/od-2022.09.22/opendingux-gcw0-toolchain.2022-09-22.tar.xz -o gcw0-toolchain.tar.xz &&
        sudo mkdir -p /opt/gcw0-toolchain && sudo chown -R "${USER}:" /opt/gcw0-toolchain &&
        tar -C /opt -xf gcw0-toolchain.tar.xz &&
        cd /opt/gcw0-toolchain && ./relocate-sdk.sh

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: Packaging/OpenDingux/build.sh rg350
      env:
        TOOLCHAIN: /opt/gcw0-toolchain

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-rg350.opk.zip
        path: build-rg350/devilutionx-rg350.opk

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "build-rg350/devilutionx-rg350.opk"
        overwrite: true

  lepus:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt update &&
        sudo apt install -y curl cmake git squashfs-tools &&
        curl -L https://github.com/OpenDingux/buildroot/releases/download/od-2022.09.22/opendingux-lepus-toolchain.2022-09-22.tar.xz -o lepus-toolchain.tar.xz &&
        sudo mkdir -p /opt/lepus-toolchain && sudo chown -R "${USER}:" /opt/lepus-toolchain &&
        tar -C /opt -xf lepus-toolchain.tar.xz &&
        cd /opt/lepus-toolchain && ./relocate-sdk.sh

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: Packaging/OpenDingux/build.sh lepus
      env:
        TOOLCHAIN: /opt/lepus-toolchain

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-lepus.opk.zip
        path: build-lepus/devilutionx-lepus.opk

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "build-lepus/devilutionx-lepus.opk"
        overwrite: true


================================================
FILE: .github/workflows/retrofw_release.yml
================================================
name: RetroFW Release Build

on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  retrofw:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y curl cmake git squashfs-tools gettext &&
        curl -L https://github.com/retrofw/retrofw.github.io/releases/download/v2.3/mipsel-RetroFW-linux-uclibc_sdk-buildroot.tar.gz -o retrofw-toolchain.tar.gz &&
        sudo mkdir -p /opt/retrofw-toolchain && sudo chown -R "${USER}:" /opt/retrofw-toolchain &&
        tar -C /opt/retrofw-toolchain --strip-components=1 -xf retrofw-toolchain.tar.gz &&
        cd /opt/retrofw-toolchain && ./relocate-sdk.sh

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: Packaging/OpenDingux/build.sh retrofw
      env:
        TOOLCHAIN: /opt/retrofw-toolchain

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-retrofw.opk.zip
        path: build-retrofw/devilutionx-retrofw.opk

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "build-retrofw/devilutionx-retrofw.opk"
        overwrite: true


================================================
FILE: .github/workflows/s390x_qemu_big_endian_tests.yml
================================================
name: s390x qemu tests (big-endian)

# The test suite takes ~50m to run so we only trigger it manually
on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  big-endian-qemu:
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Cache .ccache
      uses: actions/cache@v5
      with:
        path: .ccache
        key: ${{ github.workflow }}-v1-${{ github.sha }}
        restore-keys: ${{ github.workflow }}-v1-

    - name: Get the qemu container
      run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

    - name: Run tests
      run: >
        docker run --platform linux/s390x --rm --interactive --mount type=bind,source=$(pwd),target=/host s390x/alpine sh -c
        "
        apk add --update-cache g++ ninja cmake ccache sdl2-dev sdl2_image-dev fmt-dev libpng-dev jpeg-dev bzip2-dev gtest-dev wget &&
        cd /host &&
        export CCACHE_DIR=/host/.ccache &&
        cmake -S. -Bbuild -G Ninja -DNONET=ON -DNOSOUND=ON &&
        wget -nv -nc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build &&
        cmake --build build -j $(nproc) &&
        ctest --test-dir build --output-on-failure -j $(nproc)
        "


================================================
FILE: .github/workflows/src_dist_release.yml
================================================
name: Build source tarball

on:
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  make_src_dist:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y cmake curl libsdl2-dev libsdl2-image-dev libfmt-dev libsodium-dev libbz2-dev libgtest-dev libgmock-dev libbenchmark-dev git smpq gettext python-is-python3

    - name: Build
      working-directory: ${{github.workspace}}
      run: tools/make_src_dist.py && mv build-src-dist/devilutionx-*.tar.xz devilutionx-src.tar.xz

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-src.tar.xz
        path: devilutionx-src.tar.xz

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "devilutionx-src.tar.xz"
        overwrite: true

  make_src_dist_fully_vendored:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Create Build Environment
      run: >
        sudo apt-get update &&
        sudo apt-get install -y cmake curl libsdl2-dev libsdl2-image-dev libfmt-dev libsodium-dev libbz2-dev libgtest-dev libgmock-dev libbenchmark-dev git smpq gettext python-is-python3

    - name: Build
      working-directory: ${{github.workspace}}
      run: tools/make_src_dist.py --fully_vendored && mv build-src-dist/devilutionx-*.tar.xz devilutionx-src-fully-vendored.tar.xz

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-src-fully-vendored.tar.xz
        path: devilutionx-src-fully-vendored.tar.xz

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: "devilutionx-src-fully-vendored.tar.xz"
        overwrite: true


================================================
FILE: .github/workflows/switch.yml
================================================
---
name: Nintendo Switch

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    container: devkitpro/devkita64:latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Configure CMake
        run: |
          cmake \
            -S . \
            -B build \
            -D CMAKE_BUILD_TYPE=RelWithDebInfo \
            -D CMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake

      - name: Build DevilutionX
        run: cmake --build build -j$(nproc)

      - name: Upload Package
        if: ${{ !env.ACT }}
        uses: actions/upload-artifact@v7
        with:
          name: devilutionx.nro
          path: ./build/devilutionx.nro

      - name: Update Release
        if: ${{ github.event_name == 'release' && !env.ACT }}
        uses: svenstaro/upload-release-action@v2
        with:
          asset_name: devilutionx-switch.nro
          file: ./build/devilutionx.nro
          overwrite: true
...


================================================
FILE: .github/workflows/translations.yml
================================================
name: Validate translations

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [ opened, synchronize ]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  fmt-check:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Install polib
      run: sudo apt-get update && sudo apt-get install -y python3-polib

    - name: Check
      working-directory: ${{github.workspace}}
      shell: bash
      run: python3 tools/validate_translations.py


================================================
FILE: .github/workflows/vita.yml
================================================
---
name: Sony PlayStation Vita

on:  # yamllint disable-line rule:truthy
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    container: vitasdk/vitasdk:latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install dependencies
        run: |
          apk add \
            gettext \
            git \
            samurai \
            patch

      - name: Configure CMake
        run: |
          cmake \
            -S . \
            -B build \
            -G Ninja \
            -DCMAKE_BUILD_TYPE=RelWithDebInfo \
            -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake

      - name: Build DevilutionX
        run: cmake --build build

      - name: Upload Package
        if: ${{ !env.ACT }}
        uses: actions/upload-artifact@v7
        with:
          name: devilutionx.vpk
          path: ./build/devilutionx.vpk

      - name: Update Release
        if: ${{ github.event_name == 'release' && !env.ACT }}
        uses: svenstaro/upload-release-action@v2
        with:
          asset_name: devilutionx-vita.vpk
          file: ./build/devilutionx.vpk
          overwrite: true
...


================================================
FILE: .github/workflows/xbox_nxdk.yml
================================================
name: Xbox

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  xbox:
    runs-on: ubuntu-22.04
    env:
      NXDK_DIR: /opt/nxdk
    steps:
    - name: Install APT packages
      run: sudo apt-get update && sudo apt-get install -y clang llvm lld bison flex cmake git gettext

    - name: Clone nxdk Repo
      shell: bash
      run: git clone --recursive --depth 1 https://github.com/XboxDev/nxdk.git "$NXDK_DIR"

    - name: Build nxdk
      shell: bash
      run: PATH="${NXDK_DIR}/bin:$PATH" make -j $(nproc) -C "$NXDK_DIR" NXDK_ONLY=1 CFLAGS=-O2 CXXFLAGS=-O2 all cxbe

    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: Configure CMake
      working-directory: ${{github.workspace}}
      env:
        CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
      run: cmake -S. -Bbuild-xbox -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=/opt/nxdk/share/toolchain-nxdk.cmake

    - name: Build
      working-directory: ${{github.workspace}}
      shell: bash
      run: cmake --build build-xbox -j $(nproc) --target nxdk_xbe

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-xbox
        path: build-xbox/pkg/

    - name: Package Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      working-directory: ${{github.workspace}}/build-xbox/pkg
      run: zip -r ../../devilutionx-xbox.zip .

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-xbox.zip
        overwrite: true


================================================
FILE: .github/workflows/xbox_one.yml
================================================
name: Xbox One / Series

on:
  push:
    branches:
      - master
    paths-ignore:
      - '*.md'
      - 'docs/**'
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '*.md'
      - 'docs/**'
  release:
    types: [published]
    paths-ignore:
      - '*.md'
      - 'docs/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: windows-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
      with:
        fetch-depth: 0

    - name: ccache
      uses: hendrikmuhs/ccache-action@v1.2

    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v2
      with:
        msbuild-architecture: x64

    - name: Configure git
      shell: cmd
      run: |
        git config --global core.filemode false
        git config --global core.autocrlf false

    - name: Install gettext
      run: >
        New-Item -Path . -Name tools-gettext -ItemType Directory -Force &&
        Invoke-WebRequest -Uri "https://github.com/vslavik/gettext-tools-windows/releases/download/v0.22.5/gettext-tools-windows-0.22.5.zip" -OutFile tools-gettext.zip -Resume &&
        Expand-Archive tools-gettext.zip &&
        Remove-Item tools-gettext.zip &&
        Add-Content $env:GITHUB_PATH "$((Get-Item tools-gettext).FullName)\bin"

    - name: Build
      shell: cmd
      run: |
        cd ${{ github.workspace }}\Packaging\xbox-one
        build.bat

    - name: Copy artifacts to package directory
      run: >
        New-Item -Path build\uwp-project -Name pkg -ItemType Directory -Force &&
        Get-Childitem -Path build\uwp-project\AppxPackages, build\uwp-project\Release
        -Include Microsoft.VCLibs.x64.*.appx, devilutionX_*_x64.appx -File -Recurse |
        Copy-Item -Destination build\uwp-project\pkg\

    - name: Upload-Package
      if: ${{ !env.ACT }}
      uses: actions/upload-artifact@v7
      with:
        name: devilutionx-xbox-one-series
        if-no-files-found: error
        path: |
          build/uwp-project/pkg/

    - name: Package Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      working-directory: ${{github.workspace}}/build/uwp-project/pkg/
      run: 7z a -r ../../../devilutionx-xbox-one-series.zip .

    - name: Update Release
      if: ${{ github.event_name == 'release' && !env.ACT }}
      uses: svenstaro/upload-release-action@v2
      with:
        file: devilutionx-xbox-one-series.zip
        overwrite: true


================================================
FILE: .gitignore
================================================
# Generated by VC++ 6 builds
/vc60.idb
*.asm
*.idb

# macOS
.DS_Store

# CodeLite
.CodeLite
*.project
*.workspace

# Devilution Comparer
devilution-comparer
comparer-config.toml

#ignore cmake cache
/build-*/
.vscode/tasks.json

# Extra files in the source distribution (see make_src_dist.py)
/dist/

*.appimage
*.AppImage

# ELF object file, shared library and object archive.
*.o
*.so
*.a

# PE shared library and associated files.
*.lib
*.exp
*.dll

# PE executable.
*.exe

# GCC dependency file.
*.d

# Resource file.
*.res

# Created by https://www.gitignore.io/api/visualstudio

### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
WinDebug/
WinRel/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Vim swap files
*.swp

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# Visual Studio Edit & Continue
enc_temp_folder

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# except for a top-level .cache directory (clangd uses /.cache/clangd for temporary files)
/.cache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# macOS
.DS_Store

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

### VisualStudio Patch ###
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
*.pubxml.user

# End of https://www.gitignore.io/api/visualstudio

# Created by https://www.gitignore.io/api/xcode
# Edit at https://www.gitignore.io/?templates=xcode

### Visual Code
/.vscode

### Xcode ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## User settings
xcuserdata/

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout

## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3

### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings

/libs

# End of https://www.gitignore.io/api/xcode

# Don't accidently commit the diabdat.mpq or any other MPQ files
*.mpq

### Nintendo Switch ###
exefs/main
/out/isenseconfig/CPI-Debug

/docs/html/

# ddraw wrapper configuration file
ddraw_settings.ini
Brewfile.lock.json
.vscode/settings.json

# GPerf heap profile dumps
*.heap
*.mo

# UWP copied assets
uwp-project/Assets/data
uwp-project/Assets/fonts
uwp-project/Assets/gendata
uwp-project/Assets/ui_art
!uwp-project/devilutionX_TemporaryKey.pfx
/.s390x-ccache/

# Temporary directory for prep scripts and other purposes.
/tmp/
/compile_commands.json
/tools/tmp


================================================
FILE: .lldbinit
================================================
script topsrcdir = topsrcdir if "topsrcdir" in locals() else os.getcwd()
script sys.path.append(os.path.join(topsrcdir, "tools/lldb"))
script import devilution_lldb
script devilution_lldb.init()


================================================
FILE: 3rdParty/Lua/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)

# Workaround for deprecation of older CMake versions
set(CMAKE_POLICY_VERSION_MINIMUM 3.22)

set(LUA_ENABLE_TESTING OFF)
set(LUA_BUILD_COMPILER OFF)
if(DEVILUTIONX_STATIC_LUA)
  set(LUA_ENABLE_SHARED OFF)
else()
  set(LUA_ENABLE_SHARED ON)
endif()

include(FetchContent)
FetchContent_Declare_ExcludeFromAll(Lua
    URL https://github.com/walterschell/Lua/archive/3ed55a56eaa05c9221f40b3c07d0e908eb1067b0.tar.gz
    URL_HASH MD5=77907b8209f77c65cb681a5012f2d804
)
FetchContent_MakeAvailable_ExcludeFromAll(Lua)

# Needed for sol2
set(LUA_VERSION_STRING "5.4.7" PARENT_SCOPE)

if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND DARWIN_MAJOR_VERSION VERSION_EQUAL 8)
  # We need legacy-support from MacPorts for:
  # localtime_r gmtime_r
  find_package(MacportsLegacySupport REQUIRED)
  target_link_libraries(lua_static PRIVATE MacportsLegacySupport::MacportsLegacySupport)
elseif(TARGET_PLATFORM STREQUAL "dos")
  target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(ANDROID AND ("${ANDROID_ABI}" STREQUAL "armeabi-v7a" OR "${ANDROID_ABI}" STREQUAL "x86"))
  target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(NINTENDO_3DS OR VITA OR NINTENDO_SWITCH OR NXDK)
  target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(IOS)
  target_compile_definitions(lua_static PUBLIC -DLUA_USE_IOS)
endif()


================================================
FILE: 3rdParty/PKWare/CMakeLists.txt
================================================
add_library(PKWare STATIC
  explode.cpp
  implode.cpp)
target_include_directories(PKWare PUBLIC .)


================================================
FILE: 3rdParty/PKWare/Makefile
================================================
VC5_DIR ?= $(HOME)/DevStudio_5.10/VC

# The $(VS6_DIR) directory is a copy of the "Microsoft Visual Studio" directory.
#
# To get a working setup on Linux or other "portable" copies of VS,
# the following DLLs have to be copied to the
# $(VS6_DIR)/VC98/Bin directory.
#
#     - $(VS6_DIR)/Common/MSDev98/Bin/MSPDB60.DLL
#
# And to the $(VC5_DIR)/bin directory.
#
#     - $(VC5_DIR)/SharedIDE/bin/MSDIS100.DLL
#     - $(VC5_DIR)/SharedIDE/bin/MSPDB50.DLL
VS6_DIR ?= $(HOME)/VS6

VC6_DIR     = $(VS6_DIR)/VC98

VC6_BIN_DIR = $(VC6_DIR)/Bin
VC6_INC_DIR = $(VC6_DIR)/Include
VC6_LIB_DIR = $(VC6_DIR)/Lib

VC5_LIB_DIR = $(VC5_DIR)/lib

IDE_DIR ?= $(VS6_DIR)/Common/MSDev98
IDE_BIN_DIR = $(IDE_DIR)/bin
ifeq ($(OS),Windows_NT)
	CL = $(VC6_BIN_DIR)/CL.EXE
	RC = $(IDE_BIN_DIR)/RC.EXE
	VC5_LINK = $(VC5_DIR)/bin/link.exe
	VC6_LINK = $(VC6_BIN_DIR)/link.exe
else
	CL = wine $(VC6_BIN_DIR)/CL.EXE
	RC = wine $(IDE_BIN_DIR)/RC.EXE
	VC5_LINK = wine $(VC5_DIR)/bin/link.exe
	VC6_LINK = wine $(VC6_BIN_DIR)/link.exe
endif

CFLAGS=/nologo /c /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /Gm /Zi
LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no

VC_LINK=$(VC5_LINK)
LINKFLAGS+= /LIBPATH:$(VC5_LIB_DIR)

all: pkware.lib

PKWARE_SRC=$(sort $(wildcard *.cpp))
PKWARE_OBJS=$(PKWARE_SRC:.cpp=.obj)

pkware.lib: $(PKWARE_OBJS)
	$(VC_LINK) -lib /OUT:$@ $^ /nologo

%.obj: %.cpp
	$(CL) $(CFLAGS) /Fo$@ $<

clean:
	@$(RM) -v $(PKWARE_OBJS) pkware.lib vc60.{idb,pch,pdb}

.PHONY: clean all


================================================
FILE: 3rdParty/PKWare/PKWare.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="explode.cpp" />
    <ClCompile Include="implode.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="pkware.h" />
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>15.0</VCProjectVersion>
    <ProjectGuid>{C7F9F3B4-2F7C-4672-9586-94D8BA0950B6}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>PKWare</RootNamespace>
    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v141</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v141</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <OutDir>.\WinDebug\</OutDir>
    <IntDir>.\WinDebug\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>.\WinRel</OutDir>
    <IntDir>.\WinRel</IntDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: 3rdParty/PKWare/PKWare.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="explode.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="implode.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="pkware.h">
      <Filter>Header Files</Filter>
    </ClInclude>
  </ItemGroup>
</Project>

================================================
FILE: 3rdParty/PKWare/Pkware.dsp
================================================
# Microsoft Developer Studio Project File - Name="Pkware" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Static Library" 0x0104

CFG=Pkware - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Pkware.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Pkware.mak" CFG="Pkware - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Pkware - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "Pkware - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE

# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe

!IF  "$(CFG)" == "Pkware - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "WinRel"
# PROP BASE Intermediate_Dir "WinRel"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "WinRel"
# PROP Intermediate_Dir "WinRel"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo

!ELSEIF  "$(CFG)" == "Pkware - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "WinDebug"
# PROP BASE Intermediate_Dir "WinDebug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "WinDebug"
# PROP Intermediate_Dir "WinDebug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo

!ENDIF

# Begin Target

# Name "Pkware - Win32 Release"
# Name "Pkware - Win32 Debug"
# Begin Group "Source Files"

# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File

SOURCE=.\explode.cpp
# End Source File
# Begin Source File

SOURCE=.\implode.cpp
# End Source File
# End Group
# Begin Group "Header Files"

# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project


================================================
FILE: 3rdParty/PKWare/explode.cpp
================================================
/*****************************************************************************/
/* explode.cpp                            Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implode function of PKWARE Data Compression library                       */
/*---------------------------------------------------------------------------*/
/*   Date    Ver   Who  Comment                                              */
/* --------  ----  ---  -------                                              */
/* 11.03.03  1.00  Lad  Splitted from Pkware.cpp                             */
/* 08.04.03  1.01  Lad  Renamed to explode.cpp to be compatible with pkware  */
/* 02.05.03  1.01  Lad  Stress test done                                     */
/* 22.04.10  1.01  Lad  Documented                                           */
/*****************************************************************************/

#include <assert.h>
#include <string.h>

#include "pkware.h"

#define PKDCL_OK                    0       
#define PKDCL_STREAM_END            1   // All data from the input stream is read
#define PKDCL_NEED_DICT             2   // Need more data (dictionary)
#define PKDCL_CONTINUE             10   // Internal flag, not returned to user
#define PKDCL_GET_INPUT            11   // Internal flag, not returned to user

static char CopyrightPkware[] = "PKWARE Data Compression Library for Win32\r\n"
                                "Copyright 1989-1995 PKWARE Inc.  All Rights Reserved\r\n"
                                "Patent No. 5,051,745\r\n"
                                "PKWARE Data Compression Library Reg. U.S. Pat. and Tm. Off.\r\n"
                                "Version 1.11\r\n";

//-----------------------------------------------------------------------------
// Tables

static unsigned char DistBits[] = 
{
    0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
    0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
};

static unsigned char DistCode[] = 
{
    0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,
    0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,
    0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,
    0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00
};

static unsigned char ExLenBits[] =
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
};

static unsigned short LenBase[] =
{
    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
    0x0008, 0x000A, 0x000E, 0x0016, 0x0026, 0x0046, 0x0086, 0x0106
};

static unsigned char LenBits[] =
{
    0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07
};

static unsigned char LenCode[] =
{
    0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00
};

static unsigned char ChBitsAsc[] =
{
    0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,
    0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,
    0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,
    0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,
    0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,
    0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,
    0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D
};

static unsigned short ChCodeAsc[] = 
{
    0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,
    0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,
    0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,
    0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,
    0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,
    0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,
    0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,
    0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,
    0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,
    0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,
    0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,
    0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,
    0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,
    0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,
    0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,
    0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,
    0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,
    0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,
    0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,
    0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,
    0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,
    0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,
    0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,
    0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,
    0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,
    0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,
    0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,
    0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,
    0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,
    0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,
    0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,
    0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000  
};

//-----------------------------------------------------------------------------
// Local functions

static void PKWAREAPI GenDecodeTabs(
    unsigned char * positions,          // [out] Table of positions
    unsigned char * start_indexes,      // [in] Table of start indexes
    unsigned char * length_bits,        // [in] Table of lengths. Each length is stored as number of bits
    size_t elements)                    // [in] Number of elements in start_indexes and length_bits
{
    unsigned int index;
    unsigned int length;
    size_t i;

    for(i = 0; i < elements; i++)
    {
        length = 1 << length_bits[i];   // Get the length in bytes

        for(index = start_indexes[i]; index < 0x100; index += length)
        {
            positions[index] = (unsigned char)i;
        }
    }
}

static void PKWAREAPI GenAscTabs(TDcmpStruct * pWork)
{
    unsigned short * pChCodeAsc = &ChCodeAsc[0xFF];
    unsigned int  acc, add;
    unsigned short count;

    for(count = 0x00FF; pChCodeAsc >= ChCodeAsc; pChCodeAsc--, count--)
    {
        unsigned char * pChBitsAsc = pWork->ChBitsAsc + count;
        unsigned char bits_asc = *pChBitsAsc;

        if(bits_asc <= 8)
        {
            add = (1 << bits_asc);
            acc = *pChCodeAsc;

            do
            {
                pWork->offs2C34[acc] = (unsigned char)count;
                acc += add;
            }
            while(acc < 0x100);
        }
        else if((acc = (*pChCodeAsc & 0xFF)) != 0)
        {
            pWork->offs2C34[acc] = 0xFF;

            if(*pChCodeAsc & 0x3F)
            {
                bits_asc -= 4;
                *pChBitsAsc = bits_asc;

                add = (1 << bits_asc);
                acc = *pChCodeAsc >> 4;
                do
                {
                    pWork->offs2D34[acc] = (unsigned char)count;
                    acc += add;
                }
                while(acc < 0x100);
            }
            else
            {
                bits_asc -= 6;
                *pChBitsAsc = bits_asc;

                add = (1 << bits_asc);
                acc = *pChCodeAsc >> 6;
                do
                {
                    pWork->offs2E34[acc] = (unsigned char)count;
                    acc += add;
                }
                while(acc < 0x80);
            }
        }
        else
        {
            bits_asc -= 8;
            *pChBitsAsc = bits_asc;

            add = (1 << bits_asc);
            acc = *pChCodeAsc >> 8;
            do
            {
                pWork->offs2EB4[acc] = (unsigned char)count;
                acc += add;
            }
            while(acc < 0x100);
        }
    }
}

//-----------------------------------------------------------------------------
// Removes given number of bits in the bit buffer. New bits are reloaded from
// the input buffer, if needed.
// Returns: PKDCL_OK:         Operation was successful
//          PKDCL_STREAM_END: There are no more bits in the input buffer

static int PKWAREAPI WasteBits(TDcmpStruct * pWork, unsigned int nBits)
{
    // If number of bits required is less than number of (bits in the buffer) ?
    if(nBits <= pWork->extra_bits)
    {
        pWork->extra_bits -= nBits;
        pWork->bit_buff  >>= nBits;
        return PKDCL_OK;
    }

    // Load input buffer if necessary
    pWork->bit_buff >>= pWork->extra_bits;
    if(pWork->in_pos == pWork->in_bytes)
    {
        pWork->in_pos = sizeof(pWork->in_buff);
        if((pWork->in_bytes = pWork->read_buf((char *)pWork->in_buff, &pWork->in_pos, pWork->param)) == 0)
            return PKDCL_STREAM_END;
        pWork->in_pos = 0;
    }

    // Update bit buffer
    pWork->bit_buff  |= (pWork->in_buff[pWork->in_pos++] << 8);
    pWork->bit_buff >>= (nBits - pWork->extra_bits);
    pWork->extra_bits = (pWork->extra_bits - nBits) + 8;
    return PKDCL_OK;
}

//-----------------------------------------------------------------------------
// Decodes next literal from the input (compressed) data.
// Returns : 0x000: One byte 0x00
//           0x001: One byte 0x01
//           ...
//           0x0FF: One byte 0xFF
//           0x100: Repetition, length of 0x02 bytes
//           0x101: Repetition, length of 0x03 bytes
//           ...
//           0x304: Repetition, length of 0x206 bytes
//           0x305: End of stream
//           0x306: Error

static unsigned int PKWAREAPI DecodeLit(TDcmpStruct * pWork)
{
    unsigned int extra_length_bits;    // Number of bits of extra literal length
    unsigned int length_code;          // Length code
    unsigned int value;

    // Test the current bit in byte buffer. If is not set, simply return the next 8 bits.
    if(pWork->bit_buff & 1)
    {
        // Remove one bit from the input data
        if(WasteBits(pWork, 1))
            return 0x306;   
                      
        // The next 8 bits hold the index to the length code table
        length_code = pWork->LengthCodes[pWork->bit_buff & 0xFF];
        
        // Remove the apropriate number of bits
        if(WasteBits(pWork, pWork->LenBits[length_code]))
            return 0x306;

        // Are there some extra bits for the obtained length code ?
        if((extra_length_bits = pWork->ExLenBits[length_code]) != 0)
        {
            unsigned int extra_length = pWork->bit_buff & ((1 << extra_length_bits) - 1);

            if(WasteBits(pWork, extra_length_bits))
            {
                if((length_code + extra_length) != 0x10E)
                    return 0x306;
            }
            length_code = pWork->LenBase[length_code] + extra_length;
        }

        // In order to distinguish uncompressed byte from repetition length,
        // we have to add 0x100 to the length.
        return length_code + 0x100;
    }

    // Remove one bit from the input data
    if(WasteBits(pWork, 1))
        return 0x306;

    // If the binary compression type, read 8 bits and return them as one byte.
    if(pWork->ctype == CMP_BINARY)
    {
        unsigned int uncompressed_byte = pWork->bit_buff & 0xFF;

        if(WasteBits(pWork, 8))
            return 0x306;
        return uncompressed_byte;
    }

    // When ASCII compression ...
    if(pWork->bit_buff & 0xFF)
    {
        value = pWork->offs2C34[pWork->bit_buff & 0xFF];

        if(value == 0xFF)
        {
            if(pWork->bit_buff & 0x3F)
            {
                if(WasteBits(pWork, 4))
                    return 0x306;

                value = pWork->offs2D34[pWork->bit_buff & 0xFF];
            }
            else
            {
                if(WasteBits(pWork, 6))
                    return 0x306;

                value = pWork->offs2E34[pWork->bit_buff & 0x7F];
            }
        }
    }
    else
    {
        if(WasteBits(pWork, 8))
            return 0x306;

        value = pWork->offs2EB4[pWork->bit_buff & 0xFF];
    }

    return WasteBits(pWork, pWork->ChBitsAsc[value]) ? 0x306 : value;
}

//-----------------------------------------------------------------------------
// Decodes the distance of the repetition, backwards relative to the
// current output buffer position

static unsigned int PKWAREAPI DecodeDist(TDcmpStruct * pWork, unsigned int rep_length)
{
    unsigned int dist_pos_code;            // Distance position code
    unsigned int dist_pos_bits;            // Number of bits of distance position
    unsigned int distance;                 // Distance position

    // Next 2-8 bits in the input buffer is the distance position code
    dist_pos_code = pWork->DistPosCodes[pWork->bit_buff & 0xFF];
    dist_pos_bits = pWork->DistBits[dist_pos_code];
    if(WasteBits(pWork, dist_pos_bits))
        return 0;

    if(rep_length == 2)
    {
        // If the repetition is only 2 bytes length,
        // then take 2 bits from the stream in order to get the distance
        distance = (dist_pos_code << 2) | (pWork->bit_buff & 0x03);
        if(WasteBits(pWork, 2))
            return 0;
    }
    else
    {
        // If the repetition is more than 2 bytes length,
        // then take "dsize_bits" bits in order to get the distance
        distance = (dist_pos_code << pWork->dsize_bits) | (pWork->bit_buff & pWork->dsize_mask);
        if(WasteBits(pWork, pWork->dsize_bits))
            return 0;
    }
    return distance + 1;
}

static unsigned int PKWAREAPI Expand(TDcmpStruct * pWork)
{
    unsigned int next_literal;         // Literal decoded from the compressed data
    unsigned int result;               // Value to be returned
    unsigned int copyBytes;             // Number of bytes to copy to the output buffer

    pWork->outputPos = 0x1000;          // Initialize output buffer position

    // Decode the next literal from the input data.
    // The returned literal can either be an uncompressed byte (next_literal < 0x100)
    // or an encoded length of the repeating byte sequence that
    // is to be copied to the current buffer position
    while((result = next_literal = DecodeLit(pWork)) < 0x305)
    {
        // If the literal is greater than 0x100, it holds length
        // of repeating byte sequence
        // literal of 0x100 means repeating sequence of 0x2 bytes
        // literal of 0x101 means repeating sequence of 0x3 bytes
        // ...
        // literal of 0x305 means repeating sequence of 0x207 bytes
        if(next_literal >= 0x100)
        {
            unsigned char * source;
            unsigned char * target;
            unsigned int rep_length;       // Length of the repetition, in bytes
            unsigned int minus_dist;       // Backward distance to the repetition, relative to the current buffer position

            // Get the length of the repeating sequence.
            // Note that the repeating block may overlap the current output position,
            // for example if there was a sequence of equal bytes
            rep_length = next_literal - 0xFE;

            // Get backward distance to the repetition
            if((minus_dist = DecodeDist(pWork, rep_length)) == 0)
            {
                result = 0x306;
                break;
            }

            // Target and source pointer
            target = &pWork->out_buff[pWork->outputPos];
            source = target - minus_dist;

            // Update buffer output position
            pWork->outputPos += rep_length;

            // Copy the repeating sequence
            while(rep_length-- > 0)
                *target++ = *source++;
        }
        else
        {
            pWork->out_buff[pWork->outputPos++] = (unsigned char)next_literal;
        }
    
        // Flush the output buffer, if number of extracted bytes has reached the end
        if(pWork->outputPos >= 0x2000)
        {
            // Copy decompressed data into user buffer
            copyBytes = 0x1000;
            pWork->write_buf((char *)&pWork->out_buff[0x1000], &copyBytes, pWork->param);

            // Now copy the decompressed data to the first half of the buffer.
            // This is needed because the decompression might reuse them as repetitions.
            // Note that if the output buffer overflowed previously, the extra decompressed bytes
            // are stored in "out_buff_overflow", and they will now be
            // within decompressed part of the output buffer.
            memmove(pWork->out_buff, &pWork->out_buff[0x1000], pWork->outputPos - 0x1000);
            pWork->outputPos -= 0x1000;
        }
    }

    // Flush any remaining decompressed bytes
    copyBytes = pWork->outputPos - 0x1000;
    pWork->write_buf((char *)&pWork->out_buff[0x1000], &copyBytes, pWork->param);
    return result;
}


//-----------------------------------------------------------------------------
// Main exploding function.

unsigned int PKWAREAPI explode(
        unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned  int *size, void *param),
        void         (PKWAREAPI *write_buf)(char *buf, unsigned  int *size, void *param),
        char         *work_buf,
        void         *param)
{
    TDcmpStruct * pWork = (TDcmpStruct *)work_buf;

    // Initialize work struct and load compressed data
    // Note: The caller must zero the "work_buff" before passing it to explode
    pWork->read_buf   = read_buf;
    pWork->write_buf  = write_buf;
    pWork->param      = param;
    pWork->in_pos     = sizeof(pWork->in_buff);
    pWork->in_bytes   = pWork->read_buf((char *)pWork->in_buff, &pWork->in_pos, pWork->param);
    if(pWork->in_bytes <= 4)
        return CMP_BAD_DATA;

    pWork->ctype      = pWork->in_buff[0]; // Get the compression type (CMP_BINARY or CMP_ASCII)
    pWork->dsize_bits = pWork->in_buff[1]; // Get the dictionary size
    pWork->bit_buff   = pWork->in_buff[2]; // Initialize 16-bit bit buffer
    pWork->extra_bits = 0;                 // Extra (over 8) bits
    pWork->in_pos     = 3;                 // Position in input buffer

    // Test for the valid dictionary size
    if(4 > pWork->dsize_bits || pWork->dsize_bits > 6) 
        return CMP_INVALID_DICTSIZE;

    pWork->dsize_mask = 0xFFFF >> (0x10 - pWork->dsize_bits); // Shifted by 'sar' instruction

    if(pWork->ctype != CMP_BINARY)
    {
        if(pWork->ctype != CMP_ASCII)
            return CMP_INVALID_MODE;

        memcpy(pWork->ChBitsAsc, ChBitsAsc, sizeof(pWork->ChBitsAsc));
        GenAscTabs(pWork);
    }

    memcpy(pWork->LenBits, LenBits, sizeof(pWork->LenBits));
    GenDecodeTabs(pWork->LengthCodes, LenCode, pWork->LenBits, sizeof(pWork->LenBits));
    memcpy(pWork->ExLenBits, ExLenBits, sizeof(pWork->ExLenBits));
    memcpy(pWork->LenBase, LenBase, sizeof(pWork->LenBase));
    memcpy(pWork->DistBits, DistBits, sizeof(pWork->DistBits));
    GenDecodeTabs(pWork->DistPosCodes, DistCode, pWork->DistBits, sizeof(pWork->DistBits));
    if(Expand(pWork) != 0x306)
        return CMP_NO_ERROR;
        
    return CMP_ABORT;
}


================================================
FILE: 3rdParty/PKWare/implode.cpp
================================================
/*****************************************************************************/
/* implode.cpp                            Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implode function of PKWARE Data Compression library                       */
/*---------------------------------------------------------------------------*/
/*   Date    Ver   Who  Comment                                              */
/* --------  ----  ---  -------                                              */
/* 11.04.03  1.00  Lad  First version of implode.cpp                         */
/* 02.05.03  1.00  Lad  Stress test done                                     */
/* 22.04.10  1.01  Lad  Documented                                           */
/*****************************************************************************/

#include <assert.h>
#include <string.h>

#include "pkware.h"

#if ((1200 < _MSC_VER) && (_MSC_VER < 1400))
#pragma optimize("", off)
#endif

//-----------------------------------------------------------------------------
// Defines

#define MAX_REP_LENGTH 0x204            // The longest allowed repetition

static char CopyrightPkware[] = "PKWARE Data Compression Library for Win32\r\n"
                                "Copyright 1989-1995 PKWARE Inc.  All Rights Reserved\r\n"
                                "Patent No. 5,051,745\r\n"
                                "PKWARE Data Compression Library Reg. U.S. Pat. and Tm. Off.\r\n"
                                "Version 1.11\r\n";

//-----------------------------------------------------------------------------
// Tables

static unsigned char DistBits[] = 
{
    0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
    0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
};

static unsigned char DistCode[] = 
{
    0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,
    0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,
    0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,
    0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00
};

static unsigned char ExLenBits[] =
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
};

static unsigned char LenBits[] =
{
    0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07
};

static unsigned char LenCode[] =
{
    0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00
};

static unsigned char ChBitsAsc[] =
{
    0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,
    0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,
    0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,
    0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,
    0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,
    0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,
    0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D
};

static unsigned short ChCodeAsc[] = 
{
    0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,
    0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,
    0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,
    0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,
    0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,
    0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,
    0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,
    0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,
    0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,
    0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,
    0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,
    0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,
    0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,
    0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,
    0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,
    0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,
    0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,
    0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,
    0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,
    0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,
    0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,
    0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,
    0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,
    0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,
    0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,
    0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,
    0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,
    0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,
    0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,
    0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,
    0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,
    0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000  
};

//-----------------------------------------------------------------------------
// Macros

// Macro for calculating hash of the current byte pair.
// Note that most exact byte pair hash would be buffer[0] + buffer[1] << 0x08,
// but even this way gives nice indication of equal byte pairs, with significantly
// smaller size of the array that holds numbers of those hashes
#define BYTE_PAIR_HASH(buffer)   ((buffer[0] * 4) + (buffer[1] * 5))

//-----------------------------------------------------------------------------
// Local functions

// Builds the "hash_to_index" table and "pair_hash_offsets" table.
// Every element of "hash_to_index" will contain lowest index to the
// "pair_hash_offsets" table, effectively giving offset of the first
// occurence of the given PAIR_HASH in the input data.
static void PKWAREAPI SortBuffer(TCmpStruct * pWork, unsigned char * buffer_begin, unsigned char * buffer_end)
{
    unsigned short * phash_to_index;
    unsigned char  * buffer_ptr;
    unsigned short total_sum = 0;
    unsigned long byte_pair_hash;           // Hash value of the byte pair
    unsigned short byte_pair_offs;          // Offset of the byte pair, relative to "work_buff"

    // Zero the entire "phash_to_index" table
    memset(pWork->phash_to_index, 0, sizeof(pWork->phash_to_index));
    
    // Step 1: Count amount of each PAIR_HASH in the input buffer
    // The table will look like this:
    //  offs 0x000: Number of occurences of PAIR_HASH 0
    //  offs 0x001: Number of occurences of PAIR_HASH 1
    //  ...
    //  offs 0x8F7: Number of occurences of PAIR_HASH 0x8F7 (the highest hash value)
    for(buffer_ptr = buffer_begin; buffer_ptr < buffer_end; buffer_ptr++)
        pWork->phash_to_index[BYTE_PAIR_HASH(buffer_ptr)]++;

    // Step 2: Convert the table to the array of PAIR_HASH amounts. 
    // Each element contains count of PAIR_HASHes that is less or equal
    // to element index
    // The table will look like this:
    //  offs 0x000: Number of occurences of PAIR_HASH 0 or lower
    //  offs 0x001: Number of occurences of PAIR_HASH 1 or lower
    //  ...
    //  offs 0x8F7: Number of occurences of PAIR_HASH 0x8F7 or lower
    for(phash_to_index = pWork->phash_to_index; phash_to_index < &pWork->phash_to_index_end; phash_to_index++)
    {
        total_sum = total_sum + phash_to_index[0];
        phash_to_index[0] = total_sum;
    }

    // Step 3: Convert the table to the array of indexes.
    // Now, each element contains index to the first occurence of given PAIR_HASH
    for(buffer_end--; buffer_end >= buffer_begin; buffer_end--)
    {
        byte_pair_hash = BYTE_PAIR_HASH(buffer_end);
        byte_pair_offs = (unsigned short)(buffer_end - pWork->work_buff);

        pWork->phash_to_index[byte_pair_hash]--;
        pWork->phash_offs[pWork->phash_to_index[byte_pair_hash]] = byte_pair_offs;
    }
}

static void PKWAREAPI FlushBuf(TCmpStruct * pWork)
{
    unsigned char save_ch1;
    unsigned char save_ch2;
    unsigned int size = 0x800;

    pWork->write_buf(pWork->out_buff, &size, pWork->param);

    save_ch1 = pWork->out_buff[0x800];
    save_ch2 = pWork->out_buff[pWork->out_bytes];
    pWork->out_bytes -= 0x800;

    memset(pWork->out_buff, 0, sizeof(pWork->out_buff));

    if(pWork->out_bytes != 0)
        pWork->out_buff[0] = save_ch1;
    if(pWork->out_bits != 0)
        pWork->out_buff[pWork->out_bytes] = save_ch2;
}

static void PKWAREAPI OutputBits(TCmpStruct * pWork, unsigned int nbits, unsigned long bit_buff)
{
    unsigned int out_bits;

    // If more than 8 bits to output, do recursion
    if(nbits > 8)
    {
        OutputBits(pWork, 8, bit_buff);
        bit_buff >>= 8;
        nbits -= 8;
    }

    // Add bits to the last out byte in out_buff;
    out_bits = pWork->out_bits;
    pWork->out_buff[pWork->out_bytes] |= (unsigned char)(bit_buff << out_bits);
    pWork->out_bits += nbits;

    // If 8 or more bits, increment number of bytes
    if(pWork->out_bits > 8)
    {
        pWork->out_bytes++;
        bit_buff >>= (8 - out_bits);
        
        pWork->out_buff[pWork->out_bytes] = (unsigned char)bit_buff;
        pWork->out_bits &= 7;
    }
    else
    {
        pWork->out_bits &= 7;
        if(pWork->out_bits == 0)
            pWork->out_bytes++;
    }

    // If there is enough compressed bytes, flush them
    if(pWork->out_bytes >= 0x800)
        FlushBuf(pWork);
}

// This function searches for a repetition
// (a previous occurence of the current byte sequence)
// Returns length of the repetition, and stores the backward distance 
// to pWork structure.
static unsigned int PKWAREAPI FindRep(TCmpStruct * pWork, unsigned char * input_data)
{
    unsigned short * phash_to_index;            // Pointer into pWork->phash_to_index table
    unsigned short * phash_offs;                // Pointer to the table containing offsets of each PAIR_HASH
    unsigned char * repetition_limit;           // An eventual repetition must be at position below this pointer
    unsigned char * prev_repetition;            // Pointer to the previous occurence of the current PAIR_HASH
    unsigned char * prev_rep_end;               // End of the previous repetition
    unsigned char * input_data_ptr;
    unsigned short phash_offs_index;            // Index to the table with PAIR_HASH positions
    unsigned short min_phash_offs;              // The lowest allowed hash offset
    unsigned short offs_in_rep;                 // Offset within found repetition
    unsigned int equal_byte_count;              // Number of bytes that are equal to the previous occurence
    unsigned int rep_length = 1;                // Length of the found repetition
    unsigned int rep_length2;                   // Secondary repetition
    unsigned char pre_last_byte;                // Last but one byte from a repetion
    unsigned short di_val;

    // Calculate the previous position of the PAIR_HASH
    phash_to_index   = pWork->phash_to_index + BYTE_PAIR_HASH(input_data);
    min_phash_offs   = (unsigned short)((input_data - pWork->work_buff) - pWork->dsize_bytes + 1);
    phash_offs_index = phash_to_index[0];

    // If the PAIR_HASH offset is below the limit, find a next one
    phash_offs = pWork->phash_offs + phash_offs_index;
    if(*phash_offs < min_phash_offs)
    {
        while(*phash_offs < min_phash_offs)
        {
            phash_offs_index++;
            phash_offs++;
        }
        *phash_to_index = phash_offs_index;
    }

    // Get the first location of the PAIR_HASH,
    // and thus the first eventual location of byte repetition
    phash_offs = pWork->phash_offs + phash_offs_index;
    prev_repetition = pWork->work_buff + phash_offs[0];
    repetition_limit = input_data - 1;
    
    // If the current PAIR_HASH was not encountered before,
    // we haven't found a repetition.
    if(prev_repetition >= repetition_limit)
        return 0;

    // We have found a match of a PAIR_HASH. Now we have to make sure
    // that it is also a byte match, because PAIR_HASH is not unique.
    // We compare the bytes and count the length of the repetition
    input_data_ptr = input_data;
    for(;;)
    {
        // If the first byte of the repetition and the so-far-last byte
        // of the repetition are equal, we will compare the blocks.
        if(*input_data_ptr == *prev_repetition && input_data_ptr[rep_length-1] == prev_repetition[rep_length-1])
        {
            // Skip the current byte
            prev_repetition++;
            input_data_ptr++;
            equal_byte_count = 2;

            // Now count how many more bytes are equal
            while(equal_byte_count < MAX_REP_LENGTH)
            {
                prev_repetition++;
                input_data_ptr++;
                
                // Are the bytes different ?
                if(*prev_repetition != *input_data_ptr)
                    break;

                equal_byte_count++;
            }

            // If we found a repetition of at least the same length, take it.
            // If there are multiple repetitions in the input buffer, this will
            // make sure that we find the most recent one, which in turn allows
            // us to store backward length in less amount of bits
            input_data_ptr = input_data;
            if(equal_byte_count >= rep_length)
            {
                // Calculate the backward distance of the repetition.
                // Note that the distance is stored as decremented by 1
                pWork->distance = (unsigned int)(input_data - prev_repetition + equal_byte_count - 1);

                // Repetitions longer than 10 bytes will be stored in more bits,
                // so they need a bit different handling
                if((rep_length = equal_byte_count) > 10)
                    break;
            }
        }

        // Move forward in the table of PAIR_HASH repetitions.
        // There might be a more recent occurence of the same repetition.
        phash_offs_index++;
        phash_offs++;
        prev_repetition = pWork->work_buff + phash_offs[0];

        // If the next repetition is beyond the minimum allowed repetition, we are done.
        if(prev_repetition >= repetition_limit)
        {
            // A repetition must have at least 2 bytes, otherwise it's not worth it
            return (rep_length >= 2) ? rep_length : 0;
        }
    }

    // If the repetition has max length of 0x204 bytes, we can't go any fuhrter
    if(equal_byte_count == MAX_REP_LENGTH)
    {
        pWork->distance--;
        return equal_byte_count;
    }

    // Check for possibility of a repetition that occurs at more recent position
    phash_offs = pWork->phash_offs + phash_offs_index;
    if(pWork->work_buff + phash_offs[1] >= repetition_limit)
        return rep_length;

    //
    // The following part checks if there isn't a longer repetition at
    // a latter offset, that would lead to better compression.
    //
    // Example of data that can trigger this optimization:
    //
    //   "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQQQQQQQQQQQQ"
    //   "XYZ"
    //   "EEEEEEEEEEEEEEEEQQQQQQQQQQQQ";
    //
    // Description of data in this buffer
    //   [0x00] Single byte "E"
    //   [0x01] Single byte "E"
    //   [0x02] Repeat 0x1E bytes from [0x00]
    //   [0x20] Single byte "X"
    //   [0x21] Single byte "Y"
    //   [0x22] Single byte "Z"
    //   [0x23] 17 possible previous repetitions of length at least 0x10 bytes:
    //          - Repetition of 0x10 bytes from [0x00] "EEEEEEEEEEEEEEEE"
    //          - Repetition of 0x10 bytes from [0x01] "EEEEEEEEEEEEEEEE"
    //          - Repetition of 0x10 bytes from [0x02] "EEEEEEEEEEEEEEEE"
    //          ...
    //          - Repetition of 0x10 bytes from [0x0F] "EEEEEEEEEEEEEEEE"
    //          - Repetition of 0x1C bytes from [0x10] "EEEEEEEEEEEEEEEEQQQQQQQQQQQQ"
    //          The last repetition is the best one.
    //

    pWork->offs09BC[0] = 0xFFFF;
    pWork->offs09BC[1] = 0x0000;
    di_val = 0;

    // Note: I failed to figure out what does the table "offs09BC" mean.
    // If anyone has an idea, let me know to zezula_at_volny_dot_cz
    for(offs_in_rep = 1; offs_in_rep < rep_length; )
    {
        if(input_data[offs_in_rep] != input_data[di_val])
        {
            di_val = pWork->offs09BC[di_val];
            if(di_val != 0xFFFF)
                continue;
        }
        pWork->offs09BC[++offs_in_rep] = ++di_val;
    }

    // 
    // Now go through all the repetitions from the first found one
    // to the current input data, and check if any of them migh be
    // a start of a greater sequence match.
    //

    prev_repetition = pWork->work_buff + phash_offs[0];
    prev_rep_end = prev_repetition + rep_length;
    rep_length2 = rep_length;
    
    for(;;)
    {
        rep_length2 = pWork->offs09BC[rep_length2];
        if(rep_length2 == 0xFFFF)
            rep_length2 = 0;

        // Get the pointer to the previous repetition
        phash_offs = pWork->phash_offs + phash_offs_index;

        // Skip those repetitions that don't reach the end
        // of the first found repetition
        do
        {
            phash_offs++;
            phash_offs_index++;
            prev_repetition = pWork->work_buff + *phash_offs;
            if(prev_repetition >= repetition_limit)
                return rep_length;
        }
        while(prev_repetition + rep_length2 < prev_rep_end);

        // Verify if the last but one byte from the repetition matches
        // the last but one byte from the input data.
        // If not, find a next repetition
        pre_last_byte = input_data[rep_length - 2];
        if(pre_last_byte == prev_repetition[rep_length - 2])
        {
            // If the new repetition reaches beyond the end
            // of previously found repetition, reset the repetition length to zero.
            if(prev_repetition + rep_length2 != prev_rep_end)
            {
                prev_rep_end = prev_repetition;
                rep_length2 = 0;
            }
        }
        else
        {
            phash_offs = pWork->phash_offs + phash_offs_index;
            do
            {
                phash_offs++;
                phash_offs_index++;
                prev_repetition = pWork->work_buff + *phash_offs;
                if(prev_repetition >= repetition_limit)
                    return rep_length;
            }
            while(prev_repetition[rep_length - 2] != pre_last_byte || prev_repetition[0] != input_data[0]);

            // Reset the length of the repetition to 2 bytes only
            prev_rep_end = prev_repetition + 2;
            rep_length2 = 2;
        }

        // Find out how many more characters are equal to the first repetition.
        while(*prev_rep_end == input_data[rep_length2])
        {
            if(++rep_length2 >= 0x204)
                break;
            prev_rep_end++;
        }

        // Is the newly found repetion at least as long as the previous one ?
        if(rep_length2 >= rep_length)
        {
            // Calculate the distance of the new repetition
            pWork->distance = (unsigned int)(input_data - prev_repetition - 1);
            if((rep_length = rep_length2) == 0x204)
                return rep_length;

            // Update the additional elements in the "offs09BC" table
            // to reflect new rep length
            while(offs_in_rep < rep_length2)
            {
                if(input_data[offs_in_rep] != input_data[di_val])
                {
                    di_val = pWork->offs09BC[di_val];
                    if(di_val != 0xFFFF)
                        continue;
                }
                pWork->offs09BC[++offs_in_rep] = ++di_val;
            }
        }
    }
}

static void PKWAREAPI WriteCmpData(TCmpStruct * pWork)
{
    unsigned char * input_data_end;         // Pointer to the end of the input data
    unsigned char * input_data = pWork->work_buff + pWork->dsize_bytes + 0x204;
    unsigned int input_data_ended = 0;      // If 1, then all data from the input stream have been already loaded
    unsigned int save_rep_length;           // Saved length of current repetition
    unsigned int save_distance = 0;         // Saved distance of current repetition
    unsigned int rep_length;                // Length of the found repetition
    unsigned int phase = 0;                 // 

    // Store the compression type and dictionary size
    pWork->out_buff[0] = (char)pWork->ctype;
    pWork->out_buff[1] = (char)pWork->dsize_bits;
    pWork->out_bytes = 2;

    // Reset output buffer to zero
    memset(&pWork->out_buff[2], 0, sizeof(pWork->out_buff) - 2);
    pWork->out_bits = 0;

    while(input_data_ended == 0)
    {
        unsigned int bytes_to_load = 0x1000;
        int total_loaded = 0;
        int bytes_loaded;

        // Load the bytes from the input stream, up to 0x1000 bytes
        while(bytes_to_load != 0)
        {
            bytes_loaded = pWork->read_buf((char *)pWork->work_buff + pWork->dsize_bytes + 0x204 + total_loaded,
                                                  &bytes_to_load,
                                                   pWork->param);
            if(bytes_loaded == 0)
            {
                if(total_loaded == 0 && phase == 0)
                    goto __Exit;
                input_data_ended = 1;
                break;
            }
            else
            {
                bytes_to_load -= bytes_loaded;
                total_loaded += bytes_loaded;
            }
        }

        input_data_end = pWork->work_buff + pWork->dsize_bytes + total_loaded;
        if(input_data_ended)
            input_data_end += 0x204;
        
        //
        // Warning: The end of the buffer passed to "SortBuffer" is actually 2 bytes beyond
        // valid data. It is questionable if this is actually a bug or not,
        // but it might cause the compressed data output to be dependent on random bytes
        // that are in the buffer. 
        // To prevent that, the calling application must always zero the compression
        // buffer before passing it to "implode"
        //

        // Search the PAIR_HASHes of the loaded blocks. Also, include
        // previously compressed data, if any.
        switch(phase)
        {
            case 0: 
                SortBuffer(pWork, input_data, input_data_end + 1);
                phase++;
                if(pWork->dsize_bytes != 0x1000)
                    phase++;
                break;

            case 1:
                SortBuffer(pWork, input_data - pWork->dsize_bytes + 0x204, input_data_end + 1);
                phase++;
                break;

            default:
                SortBuffer(pWork, input_data - pWork->dsize_bytes, input_data_end + 1);
                break;
        }

        // Perform the compression of the current block
        while(input_data < input_data_end)
        {
            // Find if the current byte sequence wasn't there before.
            rep_length = FindRep(pWork, input_data);
            while(rep_length != 0)
            {
                // If we found repetition of 2 bytes, that is 0x100 or fuhrter back,
                // don't bother. Storing the distance of 0x100 bytes would actually
                // take more space than storing the 2 bytes as-is.
                if(rep_length == 2 && pWork->distance >= 0x100)
                    break;

                // When we are at the end of the input data, we cannot allow
                // the repetition to go past the end of the input data.
                if(input_data_ended && input_data + rep_length > input_data_end)
                {
                    // Shorten the repetition length so that it only covers valid data
                    rep_length = (unsigned long)(input_data_end - input_data);
                    if(rep_length < 2)
                        break;

                    // If we got repetition of 2 bytes, that is 0x100 or more backward, don't bother
                    if(rep_length == 2 && pWork->distance >= 0x100)
                        break;
                    goto __FlushRepetition;
                }

                if(rep_length >= 8 || input_data + 1 >= input_data_end)
                    goto __FlushRepetition;

                // Try to find better repetition 1 byte later.
                // Example: "ARROCKFORT" "AROCKFORT"
                // When "input_data" points to the second string, FindRep
                // returns the occurence of "AR". But there is longer repetition "ROCKFORT",
                // beginning 1 byte after.
                save_rep_length = rep_length;
                save_distance = pWork->distance;
                rep_length = FindRep(pWork, input_data + 1);

                // Only use the new repetition if it's length is greater than the previous one
                if(rep_length > save_rep_length)
                {
                    // If the new repetition if only 1 byte better
                    // and the previous distance is less than 0x80 bytes, use the previous repetition
                    if(rep_length > save_rep_length + 1 || save_distance > 0x80)
                    {
                        // Flush one byte, so that input_data will point to the secondary repetition
                        OutputBits(pWork, pWork->nChBits[*input_data], pWork->nChCodes[*input_data]);
                        input_data++;
                        continue;
                    }
                }

                // Revert to the previous repetition
                rep_length = save_rep_length;
                pWork->distance = save_distance;

                __FlushRepetition:

                OutputBits(pWork, pWork->nChBits[rep_length + 0xFE], pWork->nChCodes[rep_length + 0xFE]);
                if(rep_length == 2)
                {
                    OutputBits(pWork, pWork->dist_bits[pWork->distance >> 2],
                                      pWork->dist_codes[pWork->distance >> 2]);
                    OutputBits(pWork, 2, pWork->distance & 3);
                }
                else
                {
                    OutputBits(pWork, pWork->dist_bits[pWork->distance >> pWork->dsize_bits],
                                      pWork->dist_codes[pWork->distance >> pWork->dsize_bits]);
                    OutputBits(pWork, pWork->dsize_bits, pWork->dsize_mask & pWork->distance);
                }

                // Move the begin of the input data by the length of the repetition
                input_data += rep_length;
                goto _00402252;
            }

            // If there was no previous repetition for the current position in the input data,
            // just output the 9-bit literal for the one character
            OutputBits(pWork, pWork->nChBits[*input_data], pWork->nChCodes[*input_data]);
            input_data++;
_00402252:;
        }

        if(input_data_ended == 0)
        {
            input_data -= 0x1000;
            memmove(pWork->work_buff, pWork->work_buff + 0x1000, pWork->dsize_bytes + 0x204);
        }
    }

__Exit:

    // Write the termination literal
    OutputBits(pWork, pWork->nChBits[0x305], pWork->nChCodes[0x305]);
    if(pWork->out_bits != 0)
        pWork->out_bytes++;
    pWork->write_buf(pWork->out_buff, &pWork->out_bytes, pWork->param);
    return;
}

//-----------------------------------------------------------------------------
// Main imploding function

unsigned int PKWAREAPI implode(
    unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
    void         (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
    char         *work_buf,
    void         *param,
    unsigned int *type,
    unsigned int *dsize)
{
    TCmpStruct * pWork = (TCmpStruct *)work_buf;
    unsigned int nChCode;
    unsigned int nCount;
    unsigned int i;
    int nCount2;

    // Fill the work buffer information
    // Note: The caller must zero the "work_buff" before passing it to implode
    pWork->read_buf    = read_buf;
    pWork->write_buf   = write_buf;
    pWork->dsize_bytes = *dsize;
    pWork->ctype       = *type;
    pWork->param       = param;
    pWork->dsize_bits  = 4;
    pWork->dsize_mask  = 0x0F;

    // Test dictionary size
    switch(*dsize)
    {
        case CMP_IMPLODE_DICT_SIZE3:    // 0x1000 bytes
            pWork->dsize_bits++;
            pWork->dsize_mask |= 0x20;
            // No break here !!!

        case CMP_IMPLODE_DICT_SIZE2:    // 0x800 bytes
            pWork->dsize_bits++;
            pWork->dsize_mask |= 0x10;
            // No break here !!!

        case CMP_IMPLODE_DICT_SIZE1:    // 0x400
            break;

        default:
            return CMP_INVALID_DICTSIZE;
    }

    // Test the compression type
    switch(*type)
    {
        case CMP_BINARY: // We will compress data with binary compression type
            for(nChCode = 0, nCount = 0; nCount < 0x100; nCount++)
            {
                pWork->nChBits[nCount]  = 9;
                pWork->nChCodes[nCount] = (unsigned short)nChCode;
                nChCode = (nChCode & 0x0000FFFF) + 2;
            }
            break;


        case CMP_ASCII: // We will compress data with ASCII compression type
            for(nCount = 0; nCount < 0x100; nCount++)
            {
                pWork->nChBits[nCount]  = (unsigned char )(ChBitsAsc[nCount] + 1);
                pWork->nChCodes[nCount] = (unsigned short)(ChCodeAsc[nCount] * 2);
            }
            break;

        default:
            return CMP_INVALID_MODE;
    }

    for(i = 0; i < 0x10; i++)
    {
        if(1 << ExLenBits[i])
        {
            for(nCount2 = 0; nCount2 < (1 << ExLenBits[i]); nCount2++)
            {
                pWork->nChBits[nCount]  = (unsigned char)(ExLenBits[i] + LenBits[i] + 1);
                pWork->nChCodes[nCount] = (unsigned short)((nCount2 << (LenBits[i] + 1)) | ((LenCode[i] & 0xFFFF00FF) * 2) | 1);
                nCount++;
            }
        }
    }

    // Copy the distance codes and distance bits and perform the compression
    memcpy(&pWork->dist_codes, DistCode, sizeof(DistCode));
    memcpy(&pWork->dist_bits, DistBits, sizeof(DistBits));
    WriteCmpData(pWork);
    return CMP_NO_ERROR;
}


================================================
FILE: 3rdParty/PKWare/pkware.h
================================================
/*****************************************************************************/
/* pkware.h                               Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Header file for PKWARE Data Compression Library                           */
/*---------------------------------------------------------------------------*/
/*   Date    Ver   Who  Comment                                              */
/* --------  ----  ---  -------                                              */
/* 31.03.03  1.00  Lad  The first version of pkware.h                        */
/*****************************************************************************/

#ifndef __PKWARE_H__
#define __PKWARE_H__

//-----------------------------------------------------------------------------
// Defines

#define CMP_BINARY             0            // Binary compression
#define CMP_ASCII              1            // Ascii compression

#define CMP_NO_ERROR           0
#define CMP_INVALID_DICTSIZE   1
#define CMP_INVALID_MODE       2
#define CMP_BAD_DATA           3
#define CMP_ABORT              4

#define CMP_IMPLODE_DICT_SIZE1   1024       // Dictionary size of 1024
#define CMP_IMPLODE_DICT_SIZE2   2048       // Dictionary size of 2048
#define CMP_IMPLODE_DICT_SIZE3   4096       // Dictionary size of 4096

//-----------------------------------------------------------------------------
// Define calling convention

#ifndef PKWAREAPI
#ifdef WIN32
#define PKWAREAPI  __cdecl                   // Use for normal __cdecl calling 
#else
#define PKWAREAPI
#endif
#endif

//-----------------------------------------------------------------------------
// Internal structures

// Compression structure
typedef struct
{
    unsigned int   distance;                // 0000: Backward distance of the currently found repetition, decreased by 1
    unsigned int   out_bytes;               // 0004: # bytes available in out_buff            
    unsigned int   out_bits;                // 0008: # of bits available in the last out byte
    unsigned int   dsize_bits;              // 000C: Number of bits needed for dictionary size. 4 = 0x400, 5 = 0x800, 6 = 0x1000
    unsigned int   dsize_mask;              // 0010: Bit mask for dictionary. 0x0F = 0x400, 0x1F = 0x800, 0x3F = 0x1000
    unsigned int   ctype;                   // 0014: Compression type (CMP_ASCII or CMP_BINARY)
    unsigned int   dsize_bytes;             // 0018: Dictionary size in bytes
    unsigned char  dist_bits[0x40];         // 001C: Distance bits
    unsigned char  dist_codes[0x40];        // 005C: Distance codes
    unsigned char  nChBits[0x306];          // 009C: Table of literal bit lengths to be put to the output stream
    unsigned short nChCodes[0x306];         // 03A2: Table of literal codes to be put to the output stream
    unsigned short offs09AE;                // 09AE: 

    void         * param;                   // 09B0: User parameter
    unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param);  // 9B4
    void         (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param); // 9B8

    unsigned short offs09BC[0x204];         // 09BC:
    unsigned long  offs0DC4;                // 0DC4: 
    unsigned short phash_to_index[0x900];   // 0DC8: Array of indexes (one for each PAIR_HASH) to the "pair_hash_offsets" table
    unsigned short phash_to_index_end;      // 1FC8: End marker for "phash_to_index" table
    char           out_buff[0x802];         // 1FCA: Compressed data
    unsigned char  work_buff[0x2204];       // 27CC: Work buffer
                                            //  + DICT_OFFSET  => Dictionary
                                            //  + UNCMP_OFFSET => Uncompressed data
    unsigned short phash_offs[0x2204];      // 49D0: Table of offsets for each PAIR_HASH
} TCmpStruct;

#define CMP_BUFFER_SIZE  sizeof(TCmpStruct) // Size of compression structure.
                                            // Defined as 36312 in pkware header file


// Decompression structure
typedef struct
{
    unsigned long offs0000;                 // 0000
    unsigned long ctype;                    // 0004: Compression type (CMP_BINARY or CMP_ASCII)
    unsigned long outputPos;                // 0008: Position in output buffer
    unsigned long dsize_bits;               // 000C: Dict size (4, 5, 6 for 0x400, 0x800, 0x1000)
    unsigned long dsize_mask;               // 0010: Dict size bitmask (0x0F, 0x1F, 0x3F for 0x400, 0x800, 0x1000)
    unsigned long bit_buff;                 // 0014: 16-bit buffer for processing input data
    unsigned long extra_bits;               // 0018: Number of extra (above 8) bits in bit buffer
    unsigned int  in_pos;                   // 001C: Position in in_buff
    unsigned long in_bytes;                 // 0020: Number of bytes in input buffer
    void        * param;                    // 0024: Custom parameter
    unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param); // Pointer to function that reads data from the input stream
    void         (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param);// Pointer to function that writes data to the output stream

    unsigned char out_buff[0x2204];         // 0030: Output circle buffer.
                                            //       0x0000 - 0x0FFF: Previous uncompressed data, kept for repetitions
                                            //       0x1000 - 0x1FFF: Currently decompressed data
                                            //       0x2000 - 0x2203: Reserve space for the longest possible repetition
    unsigned char in_buff[0x800];           // 2234: Buffer for data to be decompressed
    unsigned char DistPosCodes[0x100];      // 2A34: Table of distance position codes
    unsigned char LengthCodes[0x100];       // 2B34: Table of length codes
    unsigned char offs2C34[0x100];          // 2C34: Buffer for 
    unsigned char offs2D34[0x100];          // 2D34: Buffer for 
    unsigned char offs2E34[0x80];           // 2EB4: Buffer for 
    unsigned char offs2EB4[0x100];          // 2EB4: Buffer for 
    unsigned char ChBitsAsc[0x100];         // 2FB4: Buffer for 
    unsigned char DistBits[0x40];           // 30B4: Numbers of bytes to skip copied block length
    unsigned char LenBits[0x10];            // 30F4: Numbers of bits for skip copied block length
    unsigned char ExLenBits[0x10];          // 3104: Number of valid bits for copied block
    unsigned short LenBase[0x10];           // 3114: Buffer for 
} TDcmpStruct;

#define EXP_BUFFER_SIZE sizeof(TDcmpStruct) // Size of decompression structure
                                            // Defined as 12596 in pkware headers

//-----------------------------------------------------------------------------
// Public functions

#ifdef __cplusplus
   extern "C" {
#endif

unsigned int PKWAREAPI implode(
   unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
   void         (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
   char         *work_buf,
   void         *param,
   unsigned int *type,
   unsigned int *dsize);


unsigned int PKWAREAPI explode(
   unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned  int *size, void *param),
   void         (PKWAREAPI *write_buf)(char *buf, unsigned  int *size, void *param),
   char         *work_buf,
   void         *param);

#ifdef __cplusplus
   }                         // End of 'extern "C"' declaration
#endif

#endif // __PKWARE_H__


================================================
FILE: 3rdParty/PicoSHA2/picosha2.h
================================================
/*
The MIT License (MIT)

Copyright (C) 2017 okdshin

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef PICOSHA2_H
#define PICOSHA2_H
// picosha2:20140213

#ifndef PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR
#define PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR \
    1048576  //=1024*1024: default is 1MB memory
#endif

#include <algorithm>
#include <cassert>
#include <iterator>
#include <sstream>
#include <vector>
#include <fstream>
namespace picosha2 {
typedef unsigned long word_t;
typedef unsigned char byte_t;

static const size_t k_digest_size = 32;

namespace detail {
inline byte_t mask_8bit(byte_t x) { return x & 0xff; }

inline word_t mask_32bit(word_t x) { return x & 0xffffffff; }

const word_t add_constant[64] = {
    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
    0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
    0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
    0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
    0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
    0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
    0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
    0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
    0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};

const word_t initial_message_digest[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372,
                                          0xa54ff53a, 0x510e527f, 0x9b05688c,
                                          0x1f83d9ab, 0x5be0cd19};

inline word_t ch(word_t x, word_t y, word_t z) { return (x & y) ^ ((~x) & z); }

inline word_t maj(word_t x, word_t y, word_t z) {
    return (x & y) ^ (x & z) ^ (y & z);
}

inline word_t rotr(word_t x, std::size_t n) {
    assert(n < 32);
    return mask_32bit((x >> n) | (x << (32 - n)));
}

inline word_t bsig0(word_t x) { return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); }

inline word_t bsig1(word_t x) { return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); }

inline word_t shr(word_t x, std::size_t n) {
    assert(n < 32);
    return x >> n;
}

inline word_t ssig0(word_t x) { return rotr(x, 7) ^ rotr(x, 18) ^ shr(x, 3); }

inline word_t ssig1(word_t x) { return rotr(x, 17) ^ rotr(x, 19) ^ shr(x, 10); }

template <typename RaIter1, typename RaIter2>
void hash256_block(RaIter1 message_digest, RaIter2 first, RaIter2 last) {
    assert(first + 64 == last);
    static_cast<void>(last);  // for avoiding unused-variable warning
    word_t w[64];
    std::fill(w, w + 64, 0);
    for (std::size_t i = 0; i < 16; ++i) {
        w[i] = (static_cast<word_t>(mask_8bit(*(first + i * 4))) << 24) |
               (static_cast<word_t>(mask_8bit(*(first + i * 4 + 1))) << 16) |
               (static_cast<word_t>(mask_8bit(*(first + i * 4 + 2))) << 8) |
               (static_cast<word_t>(mask_8bit(*(first + i * 4 + 3))));
    }
    for (std::size_t i = 16; i < 64; ++i) {
        w[i] = mask_32bit(ssig1(w[i - 2]) + w[i - 7] + ssig0(w[i - 15]) +
                          w[i - 16]);
    }

    word_t a = *message_digest;
    word_t b = *(message_digest + 1);
    word_t c = *(message_digest + 2);
    word_t d = *(message_digest + 3);
    word_t e = *(message_digest + 4);
    word_t f = *(message_digest + 5);
    word_t g = *(message_digest + 6);
    word_t h = *(message_digest + 7);

    for (std::size_t i = 0; i < 64; ++i) {
        word_t temp1 = h + bsig1(e) + ch(e, f, g) + add_constant[i] + w[i];
        word_t temp2 = bsig0(a) + maj(a, b, c);
        h = g;
        g = f;
        f = e;
        e = mask_32bit(d + temp1);
        d = c;
        c = b;
        b = a;
        a = mask_32bit(temp1 + temp2);
    }
    *message_digest += a;
    *(message_digest + 1) += b;
    *(message_digest + 2) += c;
    *(message_digest + 3) += d;
    *(message_digest + 4) += e;
    *(message_digest + 5) += f;
    *(message_digest + 6) += g;
    *(message_digest + 7) += h;
    for (std::size_t i = 0; i < 8; ++i) {
        *(message_digest + i) = mask_32bit(*(message_digest + i));
    }
}

}  // namespace detail

template <typename InIter>
void output_hex(InIter first, InIter last, std::ostream& os) {
    os.setf(std::ios::hex, std::ios::basefield);
    while (first != last) {
        os.width(2);
        os.fill('0');
        os << static_cast<unsigned int>(*first);
        ++first;
    }
    os.setf(std::ios::dec, std::ios::basefield);
}

template <typename InIter>
void bytes_to_hex_string(InIter first, InIter last, std::string& hex_str) {
    std::ostringstream oss;
    output_hex(first, last, oss);
    hex_str.assign(oss.str());
}

template <typename InContainer>
void bytes_to_hex_string(const InContainer& bytes, std::string& hex_str) {
    bytes_to_hex_string(bytes.begin(), bytes.end(), hex_str);
}

template <typename InIter>
std::string bytes_to_hex_string(InIter first, InIter last) {
    std::string hex_str;
    bytes_to_hex_string(first, last, hex_str);
    return hex_str;
}

template <typename InContainer>
std::string bytes_to_hex_string(const InContainer& bytes) {
    std::string hex_str;
    bytes_to_hex_string(bytes, hex_str);
    return hex_str;
}

class hash256_one_by_one {
   public:
    hash256_one_by_one() { init(); }

    void init() {
        buffer_.clear();
        std::fill(data_length_digits_, data_length_digits_ + 4, 0);
        std::copy(detail::initial_message_digest,
                  detail::initial_message_digest + 8, h_);
    }

    template <typename RaIter>
    void process(RaIter first, RaIter last) {
        add_to_data_length(static_cast<word_t>(std::distance(first, last)));
        std::copy(first, last, std::back_inserter(buffer_));
        std::size_t i = 0;
        for (; i + 64 <= buffer_.size(); i += 64) {
            detail::hash256_block(h_, buffer_.begin() + i,
                                  buffer_.begin() + i + 64);
        }
        buffer_.erase(buffer_.begin(), buffer_.begin() + i);
    }

    void finish() {
        byte_t temp[64];
        std::fill(temp, temp + 64, 0);
        std::size_t remains = buffer_.size();
        std::copy(buffer_.begin(), buffer_.end(), temp);
        temp[remains] = 0x80;

        if (remains > 55) {
            std::fill(temp + remains + 1, temp + 64, 0);
            detail::hash256_block(h_, temp, temp + 64);
            std::fill(temp, temp + 64 - 4, 0);
        } else {
            std::fill(temp + remains + 1, temp + 64 - 4, 0);
        }

        write_data_bit_length(&(temp[56]));
        detail::hash256_block(h_, temp, temp + 64);
    }

    template <typename OutIter>
    void get_hash_bytes(OutIter first, OutIter last) const {
        for (const word_t* iter = h_; iter != h_ + 8; ++iter) {
            for (std::size_t i = 0; i < 4 && first != last; ++i) {
                *(first++) = detail::mask_8bit(
                    static_cast<byte_t>((*iter >> (24 - 8 * i))));
            }
        }
    }

   private:
    void add_to_data_length(word_t n) {
        word_t carry = 0;
        data_length_digits_[0] += n;
        for (std::size_t i = 0; i < 4; ++i) {
            data_length_digits_[i] += carry;
            if (data_length_digits_[i] >= 65536u) {
                carry = data_length_digits_[i] >> 16;
                data_length_digits_[i] &= 65535u;
            } else {
                break;
            }
        }
    }
    void write_data_bit_length(byte_t* begin) {
        word_t data_bit_length_digits[4];
        std::copy(data_length_digits_, data_length_digits_ + 4,
                  data_bit_length_digits);

        // convert byte length to bit length (multiply 8 or shift 3 times left)
        word_t carry = 0;
        for (std::size_t i = 0; i < 4; ++i) {
            word_t before_val = data_bit_length_digits[i];
            data_bit_length_digits[i] <<= 3;
            data_bit_length_digits[i] |= carry;
            data_bit_length_digits[i] &= 65535u;
            carry = (before_val >> (16 - 3)) & 65535u;
        }

        // write data_bit_length
        for (int i = 3; i >= 0; --i) {
            (*begin++) = static_cast<byte_t>(data_bit_length_digits[i] >> 8);
            (*begin++) = static_cast<byte_t>(data_bit_length_digits[i]);
        }
    }
    std::vector<byte_t> buffer_;
    word_t data_length_digits_[4];  // as 64bit integer (16bit x 4 integer)
    word_t h_[8];
};

inline void get_hash_hex_string(const hash256_one_by_one& hasher,
                                std::string& hex_str) {
    byte_t hash[k_digest_size];
    hasher.get_hash_bytes(hash, hash + k_digest_size);
    return bytes_to_hex_string(hash, hash + k_digest_size, hex_str);
}

inline std::string get_hash_hex_string(const hash256_one_by_one& hasher) {
    std::string hex_str;
    get_hash_hex_string(hasher, hex_str);
    return hex_str;
}

namespace impl {
template <typename RaIter, typename OutIter>
void hash256_impl(RaIter first, RaIter last, OutIter first2, OutIter last2, int,
                  std::random_access_iterator_tag) {
    hash256_one_by_one hasher;
    // hasher.init();
    hasher.process(first, last);
    hasher.finish();
    hasher.get_hash_bytes(first2, last2);
}

template <typename InputIter, typename OutIter>
void hash256_impl(InputIter first, InputIter last, OutIter first2,
                  OutIter last2, int buffer_size, std::input_iterator_tag) {
    std::vector<byte_t> buffer(buffer_size);
    hash256_one_by_one hasher;
    // hasher.init();
    while (first != last) {
        int size = buffer_size;
        for (int i = 0; i != buffer_size; ++i, ++first) {
            if (first == last) {
                size = i;
                break;
            }
            buffer[i] = *first;
        }
        hasher.process(buffer.begin(), buffer.begin() + size);
    }
    hasher.finish();
    hasher.get_hash_bytes(first2, last2);
}
}

template <typename InIter, typename OutIter>
void hash256(InIter first, InIter last, OutIter first2, OutIter last2,
             int buffer_size = PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR) {
    picosha2::impl::hash256_impl(
        first, last, first2, last2, buffer_size,
        typename std::iterator_traits<InIter>::iterator_category());
}

template <typename InIter, typename OutContainer>
void hash256(InIter first, InIter last, OutContainer& dst) {
    hash256(first, last, dst.begin(), dst.end());
}

template <typename InContainer, typename OutIter>
void hash256(const InContainer& src, OutIter first, OutIter last) {
    hash256(src.begin(), src.end(), first, last);
}

template <typename InContainer, typename OutContainer>
void hash256(const InContainer& src, OutContainer& dst) {
    hash256(src.begin(), src.end(), dst.begin(), dst.end());
}

template <typename InIter>
void hash256_hex_string(InIter first, InIter last, std::string& hex_str) {
    byte_t hashed[k_digest_size];
    hash256(first, last, hashed, hashed + k_digest_size);
    std::ostringstream oss;
    output_hex(hashed, hashed + k_digest_size, oss);
    hex_str.assign(oss.str());
}

template <typename InIter>
std::string hash256_hex_string(InIter first, InIter last) {
    std::string hex_str;
    hash256_hex_string(first, last, hex_str);
    return hex_str;
}

inline void hash256_hex_string(const std::string& src, std::string& hex_str) {
    hash256_hex_string(src.begin(), src.end(), hex_str);
}

template <typename InContainer>
void hash256_hex_string(const InContainer& src, std::string& hex_str) {
    hash256_hex_string(src.begin(), src.end(), hex_str);
}

template <typename InContainer>
std::string hash256_hex_string(const InContainer& src) {
    return hash256_hex_string(src.begin(), src.end());
}
template<typename OutIter>void hash256(std::ifstream& f, OutIter first, OutIter last){
    hash256(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>(), first,last);

}
}// namespace picosha2
#endif  // PICOSHA2_H


================================================
FILE: 3rdParty/SDL2/CMake/FindSDL2.cmake
================================================
if(UWP_LIB AND NOT TARGET SDL2::SDL2-static)
  set(SDL_BUILD_TYPE "Release")

  if(CMAKE_BUILD_TYPE MATCHES "Debug")
    set(SDL_BUILD_TYPE "Debug")
  endif()

  set(SDL2_LIBRARY "${UWP_SDL2_DIR}/VisualC-WinRT/x64/${SDL_BUILD_TYPE}/SDL-UWP")
  set(SDL2_INCLUDE_DIR "${UWP_SDL2_DIR}/include")
  add_library(SDL2_lib STATIC IMPORTED)
  set_property(TARGET SDL2_lib PROPERTY IMPORTED_LOCATION "${SDL2_LIBRARY}/SDL2.lib")
  set_property(TARGET SDL2_lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR})
  add_library(SDL2::SDL2-static ALIAS SDL2_lib)
  mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY)
  set(SDL2_LIBRARIES ${SDL2_LIBRARY})
  set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
endif()


================================================
FILE: 3rdParty/SDL2/CMakeLists.txt
================================================
if(DEVILUTIONX_STATIC_SDL2)
  set(BUILD_SHARED_LIBS OFF)
  set(SDL_SHARED OFF)
  set(SDL_STATIC ON)
  if(PIE)
    set(SDL_STATIC_PIC ON)
  endif()
else()
  set(BUILD_SHARED_LIBS ON)
  set(SDL_SHARED ON)
  set(SDL_STATIC OFF)
endif()
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)

include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

if(TARGET_PLATFORM STREQUAL "dos")
  set(DOS ON)
  FetchContent_Declare(SDL2
    # branch: dos-vbe-rebase
    URL https://github.com/diasurgical/SDL/archive/20b47a62a12f0c7be4052fb5b32eb21d709d6f06.tar.gz
    URL_HASH MD5=6e77a1d1a79d7f0dd6231b39515a341f
  )
else()
  FetchContent_Declare(SDL2
    URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-2.32.8.tar.gz
    URL_HASH SHA256=0ca83e9c9b31e18288c7ec811108e58bac1f1bb5ec6577ad386830eac51c787e
  )
endif()
FetchContent_MakeAvailable_ExcludeFromAll(SDL2)


================================================
FILE: 3rdParty/SDL3/CMakeLists.txt
================================================
if(DEVILUTIONX_STATIC_SDL3)
  set(BUILD_SHARED_LIBS OFF)
  set(SDL_SHARED OFF)
  set(SDL_STATIC ON)
  if(PIE)
    set(SDL_STATIC_PIC ON)
  endif()
else()
  set(BUILD_SHARED_LIBS ON)
  set(SDL_SHARED ON)
  set(SDL_STATIC OFF)
endif()
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)

include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

FetchContent_Declare(SDL3
  URL https://github.com/libsdl-org/SDL/archive/f173fd28f04cb64ae054d6a97edb5d33925f539b.tar.gz
  URL_HASH SHA256=f7501d84c1a7f168567c002f4e1db4f220c4a34c51f7fa7d199962d0ed5fb42c
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL3)


================================================
FILE: 3rdParty/SDL3_image/CMakeLists.txt
================================================
include(functions/dependency_options)

if(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)
  find_package(PNG QUIET)
  if(PNG_FOUND)
    message("-- Found png ${PNG_VERSION_STRING}")
  else()
    message("-- Suitable system png package not found, will use png from source")
    set(DEVILUTIONX_SYSTEM_LIBPNG OFF)
  endif()
endif()
dependency_options("libpng" DEVILUTIONX_SYSTEM_LIBPNG ON DEVILUTIONX_STATIC_LIBPNG)
if(DEVILUTIONX_SYSTEM_LIBPNG)
  find_package(PNG REQUIRED)
else()
  add_subdirectory(../libpng libpng)
endif()

include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

if(DEVILUTIONX_STATIC_SDL_IMAGE)
  set(BUILD_SHARED_LIBS OFF)
else()
  set(BUILD_SHARED_LIBS ON)
endif()

set(SDLIMAGE_BACKEND_STB OFF)
set(SDLIMAGE_AVIF OFF)
set(SDLIMAGE_BMP OFF)
set(SDLIMAGE_GIF OFF)
set(SDLIMAGE_JPG OFF)
set(SDLIMAGE_JXL OFF)
set(SDLIMAGE_LBM OFF)
set(SDLIMAGE_PCX OFF)
set(SDLIMAGE_PNG ON)
set(SDLIMAGE_PNM OFF)
set(SDLIMAGE_QOI OFF)
set(SDLIMAGE_SVG OFF)
set(SDLIMAGE_TGA OFF)
set(SDLIMAGE_TIF OFF)
set(SDLIMAGE_WEBP OFF)
set(SDLIMAGE_XCF OFF)
set(SDLIMAGE_XPM OFF)
set(SDLIMAGE_XV OFF)
set(SDLIMAGE_AVIF_SAVE OFF)
set(SDLIMAGE_JPG_SAVE OFF)
set(SDLIMAGE_PNG_SAVE ON)

FetchContent_Declare_ExcludeFromAll(SDL_image
  URL https://github.com/libsdl-org/SDL_image/releases/download/release-3.2.4/SDL3_image-3.2.4.tar.gz
  URL_HASH SHA256=a725bd6d04261fdda0dd8d950659e1dc15a8065d025275ef460d32ae7dcfc182
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_image)


================================================
FILE: 3rdParty/SDL3_mixer/CMakeLists.txt
================================================
include(functions/dependency_options)
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

if(DEVILUTIONX_STATIC_SDL_MIXER)
  set(BUILD_SHARED_LIBS OFF)
else()
  set(BUILD_SHARED_LIBS ON)
endif()

set(SDLMIXER_AIFF OFF)
set(SDLMIXER_WAVE ON)
set(SDLMIXER_VOC OFF)
set(SDLMIXER_AU OFF)
set(SDLMIXER_FLAC_LIBFLAC OFF)
set(SDLMIXER_FLAC_DRFLAC OFF)
set(SDLMIXER_GME OFF)
set(SDLMIXER_MOD_XMP OFF)
set(SDLMIXER_MP3_DRMP3 ON)
set(SDLMIXER_MP3_MPG123 OFF)
set(SDLMIXER_MIDI_FLUIDSYNTH OFF)
set(SDLMIXER_MIDI_TIMIDITY OFF)
set(SDLMIXER_OPUS OFF)
set(SDLMIXER_VORBIS_STB OFF)
set(SDLMIXER_VORBIS_VORBISFILE OFF)
set(SDLMIXER_VORBIS_TREMOR OFF)
set(SDLMIXER_WAVPACK OFF)

FetchContent_Declare_ExcludeFromAll(SDL_mixer
  URL https://github.com/libsdl-org/SDL_mixer/archive/7d37755016f0952c32c9483c556d8608da7ee82f.tar.gz
  URL_HASH SHA256=2fa63f1eb623e3acd0012a461771eb93332e2026205f9487da3a3a75bc790111
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_mixer)


================================================
FILE: 3rdParty/SDL_audiolib/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)

if(DEVILUTIONX_STATIC_SDL_AUDIOLIB)
  set(BUILD_SHARED_LIBS OFF)
else()
  set(BUILD_SHARED_LIBS ON)
endif()

# Will use our `fmt::fmt` target if it exists.
set(WITH_SYSTEM_FMTLIB ON)

# No need for the libsamplerate resampler:
set(USE_RESAMP_SRC OFF)

# No need for the SOX resampler:
set(USE_RESAMP_SOXR OFF)

# Exceptions are only used for fatal errors which we can't handle anyway:
set(DISABLE_EXCEPTIONS ON)

# We do not need any of the audio formats except WAV and mp3:
set(USE_DEC_DRWAV ON)
set(USE_DEC_DRFLAC OFF)
set(USE_DEC_OPENMPT OFF)
set(USE_DEC_XMP OFF)
set(USE_DEC_MODPLUG OFF)
set(USE_DEC_MPG123 OFF)
set(USE_DEC_SNDFILE OFF)
set(USE_DEC_LIBVORBIS OFF)
set(USE_DEC_LIBOPUSFILE OFF)
set(USE_DEC_FLAC OFF)
set(USE_DEC_MUSEPACK OFF)
set(USE_DEC_FLUIDSYNTH OFF)
set(USE_DEC_BASSMIDI OFF)
set(USE_DEC_WILDMIDI OFF)
set(USE_DEC_ADLMIDI OFF)
set(USE_DEC_DRMP3 ON)

include(FetchContent)
FetchContent_Declare_ExcludeFromAll(SDL_audiolib
  URL https://github.com/realnc/SDL_audiolib/archive/cc1bb6af8d4cf5e200259072bde1edd1c8c5137e.tar.gz
  URL_HASH MD5=0e8174264ac9c6b314c6b2d9a5f72efd)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_audiolib)

add_library(SDL_audiolib::SDL_audiolib ALIAS SDL_audiolib)

# External library, disable warnings.
target_compile_options(SDL_audiolib PRIVATE -w)


================================================
FILE: 3rdParty/SDL_image/CMakeLists.txt
================================================
include(functions/dependency_options)

if(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)
  find_package(PNG QUIET)
  if(PNG_FOUND)
    message("-- Found png ${PNG_VERSION_STRING}")
  else()
    message("-- Suitable system png package not found, will use png from source")
    set(DEVILUTIONX_SYSTEM_LIBPNG OFF)
  endif()
endif()
dependency_options("libpng" DEVILUTIONX_SYSTEM_LIBPNG ON DEVILUTIONX_STATIC_LIBPNG)
if(DEVILUTIONX_SYSTEM_LIBPNG)
  find_package(PNG REQUIRED)
else()
  add_subdirectory(../libpng libpng)
endif()

include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

FetchContent_Declare_ExcludeFromAll(SDL_image
  URL https://github.com/libsdl-org/SDL_image/archive/refs/tags/release-2.0.5.tar.gz
  URL_HASH MD5=3446ed7ee3c700065dcb33426a9b0c6e
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_image)

if(DEVILUTIONX_STATIC_SDL_IMAGE)
  add_library(SDL_image STATIC ${CMAKE_CURRENT_LIST_DIR}/IMG.c ${sdl_image_SOURCE_DIR}/IMG_png.c)
else()
  add_library(SDL_image SHARED ${CMAKE_CURRENT_LIST_DIR}/IMG.c ${sdl_image_SOURCE_DIR}/IMG_png.c)
endif()

target_include_directories(SDL_image PRIVATE ${sdl_image_SOURCE_DIR})
target_compile_definitions(SDL_image PRIVATE LOAD_PNG SDL_IMAGE_USE_COMMON_BACKEND)
target_link_libraries(SDL_image PNG::PNG)

if(TARGET SDL2::SDL2 AND NOT (DEVILUTIONX_STATIC_SDL2 AND TARGET SDL2::SDL2-static))
  target_link_libraries(SDL_image SDL2::SDL2)
  add_library(SDL2::SDL2_image ALIAS SDL_image)
elseif(TARGET SDL2::SDL2-static)
  target_link_libraries(SDL_image SDL2::SDL2-static)
  add_library(SDL2::SDL2_image ALIAS SDL_image)
endif()


================================================
FILE: 3rdParty/SDL_image/IMG.c
================================================
/*
  SDL_image:  An example image loading library for use with SDL
  Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>
  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.
  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:
  1. The origin of this software must not be misrepresented; you must not
         claim that you wrote the original software. If you use this software
         in a product, an acknowledgment in the product documentation would be
         appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
         misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.
*/

/* This is a heavily reduced version of IMG.c including only PNG support */

#include "SDL_image.h"

extern int IMG_InitPNG(void);
extern void IMG_QuitPNG(void);

static int initialized = 0;

int IMG_Init(int flags) {
  int result = 0;

  /* Passing 0 returns the currently initialized loaders */
  if (!flags) {
    return initialized;
  }

  if (flags & IMG_INIT_PNG) {
    if ((initialized & IMG_INIT_PNG) || IMG_InitPNG() == 0) {
      result |= IMG_INIT_PNG;
    }
  }
  initialized |= result;

  return result;
}

void IMG_Quit() {
  if (initialized & IMG_INIT_PNG) {
    IMG_QuitPNG();
  }
  initialized = 0;
}


================================================
FILE: 3rdParty/SheenBidi/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

set(BUILD_TESTING OFF)
set(ASAN OFF)
set(UBSAN OFF)

FetchContent_Declare_ExcludeFromAll(SheenBidi
  URL https://github.com/Tehreer/SheenBidi/archive/refs/tags/v2.9.0.tar.gz
  URL_HASH MD5=2c22cfad93a52afa7bd25ad56a3a4089
)
FetchContent_MakeAvailable_ExcludeFromAll(SheenBidi)


================================================
FILE: 3rdParty/asio/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)

include(FetchContent)
FetchContent_Declare_ExcludeFromAll(asio
    URL https://github.com/diasurgical/asio/archive/4bcf552fcea3e1ae555dde2ab33bc9fa6770da4d.tar.gz
    URL_HASH MD5=7ffee993fc21b1115abf485958d03ac8
)
FetchContent_MakeAvailable_ExcludeFromAll(asio)

add_library(asio STATIC ${CMAKE_CURRENT_LIST_DIR}/asio_handle_exception.cpp)
target_compile_definitions(asio PUBLIC ASIO_NO_EXCEPTIONS)
target_include_directories(asio PUBLIC ${asio_SOURCE_DIR}/asio/include ${CMAKE_CURRENT_LIST_DIR})

if(NINTENDO_3DS OR NINTENDO_SWITCH)
  include(asio_defs REQUIRED)
endif()


================================================
FILE: 3rdParty/asio/asio_handle_exception.cpp
================================================
#include <string_view>

#define ErrAsio(message) devilution::ErrDlg("ASIO Error", message, __FILE__, __LINE__)

namespace devilution {

extern void ErrDlg(const char* title, std::string_view error, std::string_view logFilePath, int logLineNr);

} // namespace devilution

namespace asio::detail {

void fatal_exception(const char* message)
{
	ErrAsio(message);
}

} // namespace asio::detail


================================================
FILE: 3rdParty/asio/asio_handle_exception.hpp
================================================
#pragma once

#include <asio/detail/throw_exception.hpp>

namespace asio::detail {

void fatal_exception(const char *message);

template <typename Exception>
void throw_exception(
	const Exception &e
	ASIO_SOURCE_LOCATION_PARAM)
{
  fatal_exception(e.what());
}

} // namespace asio::detail


================================================
FILE: 3rdParty/benchmark/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)

FetchContent_Declare_ExcludeFromAll(
  benchmark
  URL https://github.com/google/benchmark/archive/refs/tags/v1.8.5.tar.gz
  URL_HASH MD5=708d91ce255e8af4c1d7dfec50dff178
)

set(INSTALL_GTEST OFF)

set(BENCHMARK_ENABLE_TESTING OFF)
set(BENCHMARK_ENABLE_EXCEPTIONS OFF)
set(BENCHMARK_ENABLE_WERROR OFF)
set(BENCHMARK_ENABLE_INSTALL OFF)

FetchContent_MakeAvailable_ExcludeFromAll(benchmark)


================================================
FILE: 3rdParty/bzip2/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)

include(FetchContent)

FetchContent_Declare_ExcludeFromAll(bzip2
    GIT_REPOSITORY https://gitlab.com/bzip2/bzip2
    GIT_TAG bzip2-1.0.8
)
FetchContent_MakeAvailable_ExcludeFromAll(bzip2)

if(DEVILUTIONX_STATIC_BZIP2)
  set(_lib_type STATIC)
else()
  set(_lib_type SHARED)
endif()
add_library(BZip2 ${_lib_type}
  ${bzip2_SOURCE_DIR}/blocksort.c
  ${bzip2_SOURCE_DIR}/bzlib.c
  ${bzip2_SOURCE_DIR}/compress.c
  ${bzip2_SOURCE_DIR}/crctable.c
  ${bzip2_SOURCE_DIR}/decompress.c
  ${bzip2_SOURCE_DIR}/huffman.c
  ${bzip2_SOURCE_DIR}/randtable.c
  ${bzip2_SOURCE_DIR}/bzlib.h
  ${bzip2_SOURCE_DIR}/bzlib_private.h
  ${CMAKE_CURRENT_LIST_DIR}/bz_internal_error.c
)
target_compile_definitions(BZip2 PRIVATE -DBZ_NO_STDIO)
target_include_directories(BZip2 PUBLIC ${bzip2_SOURCE_DIR})

add_library(BZip2::BZip2 ALIAS BZip2)


================================================
FILE: 3rdParty/bzip2/bz_internal_error.c
================================================
#include <stdio.h>

void bz_internal_error(int errcode) {
  fprintf(stderr, "BZip2 fatal error %d\n", errcode);
}


================================================
FILE: 3rdParty/discord/.editorconfig
================================================
[*.patch]
end_of_line = lf


================================================
FILE: 3rdParty/discord/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

find_package(Patch REQUIRED)

set(Discord_SDK_URL "https://dl-game-sdk.discordapp.net/3.2.1/discord_game_sdk.zip")
set(Discord_SDK_HASH "73e5e1b3f8413a2c7184ef17476822f2")

if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  FetchContent_Declare_ExcludeFromAll(discordsrc
    URL ${Discord_SDK_URL}
    URL_HASH MD5=${Discord_SDK_HASH}
  )
else()
  FetchContent_Declare_ExcludeFromAll(discordsrc
    URL ${Discord_SDK_URL}
    URL_HASH MD5=${Discord_SDK_HASH}
    PATCH_COMMAND "${Patch_EXECUTABLE}" -p1 -N < "${CMAKE_CURRENT_LIST_DIR}/fixes.patch" || true
  )
endif()
FetchContent_MakeAvailable_ExcludeFromAll(discordsrc)

file(GLOB discord_SRCS ${discordsrc_SOURCE_DIR}/cpp/*.cpp)
add_library(discord STATIC ${discord_SRCS})
target_include_directories(discord INTERFACE "${discordsrc_SOURCE_DIR}/..")

if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/aarch64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86")
else()
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86_64")
endif()
set(DISCORD_SHARED_LIB_FILENAME "discord_game_sdk${CMAKE_SHARED_LIBRARY_SUFFIX}")

set(DISCORD_SHARED_LIB "${DISCORD_LIB_DIR}/${DISCORD_SHARED_LIB_FILENAME}")
set(DISCORD_SHARED_LIB "${DISCORD_SHARED_LIB}" PARENT_SCOPE)

find_library(
  DISCORD_LIB
  NAMES "${DISCORD_SHARED_LIB_FILENAME}"
  PATHS "${DISCORD_LIB_DIR}"
  REQUIRED
  NO_DEFAULT_PATH
  NO_CMAKE_FIND_ROOT_PATH
)

message("-- 📚 discord_game_sdk: ${DISCORD_LIB}")

# Copy the dll so that tests and Debug builds can find it on Windows.
# We also need it at this location to link to `discord_game_sdk.so` rather
# than `_deps/discordsrc-src/lib/x86_64/discord_game_sdk.so` on Linux.
file(COPY "${DISCORD_SHARED_LIB}" DESTINATION "${CMAKE_BINARY_DIR}")

add_library(discord_game_sdk SHARED IMPORTED GLOBAL)
set_target_properties(discord_game_sdk PROPERTIES
  IMPORTED_IMPLIB "${DISCORD_LIB}"
  IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/${DISCORD_SHARED_LIB_FILENAME}"
)


================================================
FILE: 3rdParty/discord/fixes.patch
================================================
From 767aff84177e8805933ac4f980d9fc36a8b02af6 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy <glex.spb@gmail.com>
Date: Sat, 21 Jan 2023 13:09:38 +0000
Subject: [PATCH] Various fixes

1. Replaces `#include <Windows.h>` with `#include <windows.h>`
   for compatibility with case-sensitive file systems (e.g. MinGW
   cross-compilation on a Linux host).

2. Adds missing `#include <cstdint>` to `cpp/types.h`.

3. Fixes calling convention for callback lambdas.

Signed-off-by: Gleb Mazovetskiy <glex.spb@gmail.com>
---
 c/discord_game_sdk.h         |  2 +-
 cpp/achievement_manager.cpp  |  4 ++--
 cpp/activity_manager.cpp     | 10 +++++-----
 cpp/application_manager.cpp  |  6 +++---
 cpp/core.cpp                 |  2 +-
 cpp/ffi.h                    |  2 +-
 cpp/image_manager.cpp        |  2 +-
 cpp/lobby_manager.cpp        | 22 +++++++++++-----------
 cpp/overlay_manager.cpp      | 12 ++++++------
 cpp/relationship_manager.cpp |  2 +-
 cpp/storage_manager.cpp      |  6 +++---
 cpp/store_manager.cpp        |  6 +++---
 cpp/types.h                  |  4 +++-
 cpp/user_manager.cpp         |  2 +-
 cpp/voice_manager.cpp        |  2 +-
 examples/c/main.c            |  2 +-
 16 files changed, 44 insertions(+), 42 deletions(-)

diff --git a/c/discord_game_sdk.h b/c/discord_game_sdk.h
index 4618756..f4c209a 100644
--- a/c/discord_game_sdk.h
+++ b/c/discord_game_sdk.h
@@ -2,7 +2,7 @@
 #define _DISCORD_GAME_SDK_H_
 
 #ifdef _WIN32
-#include <Windows.h>
+#include <windows.h>
 #include <dxgi.h>
 #endif
 
diff --git a/cpp/achievement_manager.cpp b/cpp/achievement_manager.cpp
index 43a6d4c..9e92ad6 100644
--- a/cpp/achievement_manager.cpp
+++ b/cpp/achievement_manager.cpp
@@ -34,7 +34,7 @@ void AchievementManager::SetUserAchievement(Snowflake achievementId,
                                             std::uint8_t percentComplete,
                                             std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -50,7 +50,7 @@ void AchievementManager::SetUserAchievement(Snowflake achievementId,
 
 void AchievementManager::FetchUserAchievements(std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
diff --git a/cpp/activity_manager.cpp b/cpp/activity_manager.cpp
index 3c20074..074f784 100644
--- a/cpp/activity_manager.cpp
+++ b/cpp/activity_manager.cpp
@@ -84,7 +84,7 @@ Result ActivityManager::RegisterSteam(std::uint32_t steamId)
 
 void ActivityManager::UpdateActivity(Activity const& activity, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -102,7 +102,7 @@ void ActivityManager::UpdateActivity(Activity const& activity, std::function<voi
 
 void ActivityManager::ClearActivity(std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -119,7 +119,7 @@ void ActivityManager::SendRequestReply(UserId userId,
                                        ActivityJoinRequestReply reply,
                                        std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -141,7 +141,7 @@ void ActivityManager::SendInvite(UserId userId,
                                  char const* content,
                                  std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -161,7 +161,7 @@ void ActivityManager::SendInvite(UserId userId,
 
 void ActivityManager::AcceptInvite(UserId userId, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
diff --git a/cpp/application_manager.cpp b/cpp/application_manager.cpp
index 0e05f3f..98dac16 100644
--- a/cpp/application_manager.cpp
+++ b/cpp/application_manager.cpp
@@ -13,7 +13,7 @@ namespace discord {
 
 void ApplicationManager::ValidateOrExit(std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -47,7 +47,7 @@ void ApplicationManager::GetCurrentBranch(char branch[4096])
 void ApplicationManager::GetOAuth2Token(std::function<void(Result, OAuth2Token const&)> callback)
 {
     static auto wrapper =
-      [](void* callbackData, EDiscordResult result, DiscordOAuth2Token* oauth2Token) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordOAuth2Token* oauth2Token) -> void {
         std::unique_ptr<std::function<void(Result, OAuth2Token const&)>> cb(
           reinterpret_cast<std::function<void(Result, OAuth2Token const&)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -62,7 +62,7 @@ void ApplicationManager::GetOAuth2Token(std::function<void(Result, OAuth2Token c
 
 void ApplicationManager::GetTicket(std::function<void(Result, char const*)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result, char const* data) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, char const* data) -> void {
         std::unique_ptr<std::function<void(Result, char const*)>> cb(
           reinterpret_cast<std::function<void(Result, char const*)>*>(callbackData));
         if (!cb || !(*cb)) {
diff --git a/cpp/core.cpp b/cpp/core.cpp
index 110c9ef..56b2801 100644
--- a/cpp/core.cpp
+++ b/cpp/core.cpp
@@ -59,7 +59,7 @@ void Core::SetLogHook(LogLevel minLevel, std::function<void(LogLevel, char const
     setLogHook_.DisconnectAll();
     setLogHook_.Connect(std::move(hook));
     static auto wrapper =
-      [](void* callbackData, EDiscordLogLevel level, char const* message) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordLogLevel level, char const* message) -> void {
         auto cb(reinterpret_cast<decltype(setLogHook_)*>(callbackData));
         if (!cb) {
             return;
diff --git a/cpp/ffi.h b/cpp/ffi.h
index 4a21057..3d2dd9d 100644
--- a/cpp/ffi.h
+++ b/cpp/ffi.h
@@ -2,7 +2,7 @@
 #define _DISCORD_GAME_SDK_H_
 
 #ifdef _WIN32
-#include <Windows.h>
+#include <windows.h>
 #include <dxgi.h>
 #endif
 
diff --git a/cpp/image_manager.cpp b/cpp/image_manager.cpp
index 03b1db4..c90f337 100644
--- a/cpp/image_manager.cpp
+++ b/cpp/image_manager.cpp
@@ -16,7 +16,7 @@ void ImageManager::Fetch(ImageHandle handle,
                          std::function<void(Result, ImageHandle)> callback)
 {
     static auto wrapper =
-      [](void* callbackData, EDiscordResult result, DiscordImageHandle handleResult) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordImageHandle handleResult) -> void {
         std::unique_ptr<std::function<void(Result, ImageHandle)>> cb(
           reinterpret_cast<std::function<void(Result, ImageHandle)>*>(callbackData));
         if (!cb || !(*cb)) {
diff --git a/cpp/lobby_manager.cpp b/cpp/lobby_manager.cpp
index 3a95b1a..4000032 100644
--- a/cpp/lobby_manager.cpp
+++ b/cpp/lobby_manager.cpp
@@ -167,7 +167,7 @@ void LobbyManager::CreateLobby(LobbyTransaction const& transaction,
                                std::function<void(Result, Lobby const&)> callback)
 {
     static auto wrapper =
-      [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
         std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
           reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -185,7 +185,7 @@ void LobbyManager::UpdateLobby(LobbyId lobbyId,
                                LobbyTransaction const& transaction,
                                std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -204,7 +204,7 @@ void LobbyManager::UpdateLobby(LobbyId lobbyId,
 
 void LobbyManager::DeleteLobby(LobbyId lobbyId, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -222,7 +222,7 @@ void LobbyManager::ConnectLobby(LobbyId lobbyId,
                                 std::function<void(Result, Lobby const&)> callback)
 {
     static auto wrapper =
-      [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
         std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
           reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -240,7 +240,7 @@ void LobbyManager::ConnectLobbyWithActivitySecret(
   std::function<void(Result, Lobby const&)> callback)
 {
     static auto wrapper =
-      [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+      [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
         std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
           reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -256,7 +256,7 @@ void LobbyManager::ConnectLobbyWithActivitySecret(
 
 void LobbyManager::DisconnectLobby(LobbyId lobbyId, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -403,7 +403,7 @@ void LobbyManager::UpdateMember(LobbyId lobbyId,
                                 LobbyMemberTransaction const& transaction,
                                 std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -426,7 +426,7 @@ void LobbyManager::SendLobbyMessage(LobbyId lobbyId,
                                     std::uint32_t dataLength,
                                     std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -452,7 +452,7 @@ Result LobbyManager::GetSearchQuery(LobbySearchQuery* query)
 
 void LobbyManager::Search(LobbySearchQuery const& query, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
         std::unique_ptr<std::function<void(Result)>> cb(
           reinterpret_cast<std::function<void(Result)>*>(callbackData));
         if (!cb || !(*cb)) {
@@ -487,7 +487,7 @@ Result LobbyManager::GetLobbyId(std::int32_t index, LobbyId* lobbyId)
 
 void LobbyManager::ConnectVoice(LobbyId lobbyId, std::function<void(Result)> callback)
 {
-    static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+    static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result)
Download .txt
gitextract_h4wrmfpe/

├── .devcontainer/
│   ├── Dockerfile
│   ├── devcontainer.json
│   └── fluxbox/
│       ├── apps
│       └── menu
├── .editorconfig
├── .gdbinit
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── 3ds.yml
│       ├── Android.yml
│       ├── Linux_aarch64.yml
│       ├── Linux_x86.yml
│       ├── Linux_x86_64.yml
│       ├── Linux_x86_64_SDL1.yml
│       ├── Linux_x86_64_SDL3_test.yml
│       ├── Linux_x86_64_test.yml
│       ├── PS4.yml
│       ├── PS5.yml
│       ├── Windows9x_MinGW.yml
│       ├── Windows_MSVC_x64.yml
│       ├── Windows_MinGW_x64.yml
│       ├── Windows_MinGW_x86.yml
│       ├── Windows_XP_32bit.yml
│       ├── amiga-m68k.yml
│       ├── cache-cleanup.yml
│       ├── clang-format-check.yml
│       ├── clang-tidy-check.yml
│       ├── iOS.yml
│       ├── macOS_arm64.yml
│       ├── macOS_x86_64.yml
│       ├── miyoo_mini_release.yml
│       ├── opendingux_release.yml
│       ├── retrofw_release.yml
│       ├── s390x_qemu_big_endian_tests.yml
│       ├── src_dist_release.yml
│       ├── switch.yml
│       ├── translations.yml
│       ├── vita.yml
│       ├── xbox_nxdk.yml
│       └── xbox_one.yml
├── .gitignore
├── .lldbinit
├── 3rdParty/
│   ├── Lua/
│   │   └── CMakeLists.txt
│   ├── PKWare/
│   │   ├── CMakeLists.txt
│   │   ├── Makefile
│   │   ├── PKWare.vcxproj
│   │   ├── PKWare.vcxproj.filters
│   │   ├── Pkware.dsp
│   │   ├── explode.cpp
│   │   ├── implode.cpp
│   │   └── pkware.h
│   ├── PicoSHA2/
│   │   └── picosha2.h
│   ├── SDL2/
│   │   ├── CMake/
│   │   │   └── FindSDL2.cmake
│   │   └── CMakeLists.txt
│   ├── SDL3/
│   │   └── CMakeLists.txt
│   ├── SDL3_image/
│   │   └── CMakeLists.txt
│   ├── SDL3_mixer/
│   │   └── CMakeLists.txt
│   ├── SDL_audiolib/
│   │   └── CMakeLists.txt
│   ├── SDL_image/
│   │   ├── CMakeLists.txt
│   │   └── IMG.c
│   ├── SheenBidi/
│   │   └── CMakeLists.txt
│   ├── asio/
│   │   ├── CMakeLists.txt
│   │   ├── asio_handle_exception.cpp
│   │   └── asio_handle_exception.hpp
│   ├── benchmark/
│   │   └── CMakeLists.txt
│   ├── bzip2/
│   │   ├── CMakeLists.txt
│   │   └── bz_internal_error.c
│   ├── discord/
│   │   ├── .editorconfig
│   │   ├── CMakeLists.txt
│   │   └── fixes.patch
│   ├── find_steam_game/
│   │   └── CMakeLists.txt
│   ├── googletest/
│   │   └── CMakeLists.txt
│   ├── libfmt/
│   │   └── CMakeLists.txt
│   ├── libmpq/
│   │   ├── CMakeLists.txt
│   │   └── config.h
│   ├── libpng/
│   │   └── CMakeLists.txt
│   ├── libsmackerdec/
│   │   └── CMakeLists.txt
│   ├── libsodium/
│   │   └── CMakeLists.txt
│   ├── libzt/
│   │   └── CMakeLists.txt
│   ├── magic_enum/
│   │   └── CMakeLists.txt
│   ├── sol2/
│   │   ├── CMakeLists.txt
│   │   └── sol_config/
│   │       └── sol/
│   │           ├── config.hpp
│   │           └── debug.hpp
│   ├── tl/
│   │   ├── CMakeLists.txt
│   │   ├── expected.hpp
│   │   └── function_ref.hpp
│   ├── tolk/
│   │   └── CMakeLists.txt
│   ├── unordered_dense/
│   │   ├── 0001-Disable-PMR-support-for-mingw-std-threads-compat.patch
│   │   └── CMakeLists.txt
│   └── zlib/
│       ├── CMake/
│       │   └── FindZLIB.cmake
│       └── CMakeLists.txt
├── Brewfile
├── CMake/
│   ├── Assets.cmake
│   ├── Definitions.cmake
│   ├── Dependencies.cmake
│   ├── Mods.cmake
│   ├── MoldLinker.cmake
│   ├── Platforms.cmake
│   ├── Tests.cmake
│   ├── VcPkgManifestFeatures.cmake
│   ├── finders/
│   │   ├── FindGperftools.cmake
│   │   ├── FindSDL2_image.cmake
│   │   ├── FindSDL_audiolib.cmake
│   │   ├── FindSpeechd.cmake
│   │   ├── Findsimpleini.cmake
│   │   └── Findsodium.cmake
│   ├── functions/
│   │   ├── FetchContent_ExcludeFromAll_backport.cmake
│   │   ├── copy_files.cmake
│   │   ├── dependency_options.cmake
│   │   ├── devilutionx_library.cmake
│   │   ├── emscripten_system_library.cmake
│   │   ├── genex.cmake
│   │   ├── git.cmake
│   │   ├── object_libraries.cmake
│   │   ├── set_relative_file_macro.cmake
│   │   └── trim_retired_files.cmake
│   └── platforms/
│       ├── .editorconfig
│       ├── aarch64-linux-gnu-clang-static-libc++.toolchain.cmake
│       ├── aarch64-linux-gnu.toolchain.cmake
│       ├── amiga.cmake
│       ├── android.cmake
│       ├── cpigamesh.cmake
│       ├── ctr/
│       │   ├── Tools3DS.cmake
│       │   ├── asio_defs.cmake
│       │   ├── bin2s_header.h.in
│       │   └── modules/
│       │       ├── FindCITRO3D.cmake
│       │       ├── FindCTRULIB.cmake
│       │       ├── FindPNG.cmake
│       │       ├── FindZLIB.cmake
│       │       ├── LibFindMacros.cmake
│       │       └── try_add_imported_target.cmake
│       ├── debian-cross-pkg-config.sh
│       ├── djcpp.toolchain.cmake
│       ├── dos.cmake
│       ├── emscripten.cmake
│       ├── gkd350h.cmake
│       ├── haiku.cmake
│       ├── ios.cmake
│       ├── ios.toolchain.cmake
│       ├── lepus.cmake
│       ├── linux_i386.toolchain.cmake
│       ├── macos_tiger.cmake
│       ├── macports/
│       │   └── finders/
│       │       └── FindMacportsLegacySupport.cmake
│       ├── mingw/
│       │   └── zt_defs.cmake
│       ├── mingw9x/
│       │   └── include/
│       │       └── windef.h
│       ├── mingw9x.toolchain.cmake
│       ├── mingwcc.toolchain.cmake
│       ├── mingwcc64.toolchain.cmake
│       ├── miyoo_mini.cmake
│       ├── n3ds.cmake
│       ├── ps4.cmake
│       ├── retrofw.cmake
│       ├── rg350.cmake
│       ├── rg99.cmake
│       ├── switch/
│       │   └── asio_defs.cmake
│       ├── switch.cmake
│       ├── threads-stub/
│       │   └── FindThreads.cmake
│       ├── uwp_lib.cmake
│       ├── vita.cmake
│       ├── windows.cmake
│       ├── windows9x.cmake
│       ├── windowsXP.cmake
│       ├── xbox_nxdk/
│       │   └── finders/
│       │       ├── FindPNG.cmake
│       │       ├── FindSDL2.cmake
│       │       └── FindZLIB.cmake
│       └── xbox_nxdk.cmake
├── CMakeLists.txt
├── CMakeSettings.json
├── CODE_OF_CONDUCT.md
├── LICENSE.md
├── Packaging/
│   ├── OpenDingux/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── build-all.sh
│   │   ├── build.sh
│   │   ├── devilutionx-from-disk.sh
│   │   ├── devilutionx-umount-opk-and-run.sh
│   │   ├── gkd350h-manual.txt
│   │   ├── gkd350h.desktop
│   │   ├── lepus-manual.txt
│   │   ├── lepus.desktop
│   │   ├── package-opk.sh
│   │   ├── profile-generate.sh
│   │   ├── retrofw-manual.txt
│   │   ├── retrofw.desktop
│   │   ├── rg350-manual.txt
│   │   ├── rg350.desktop
│   │   ├── rg99-manual.txt
│   │   ├── rg99-pgo.md
│   │   ├── rg99.desktop
│   │   └── targets.sh
│   ├── amiga/
│   │   ├── Dockerfile
│   │   ├── devilutionx.info
│   │   └── prep.sh
│   ├── apple/
│   │   ├── AppIcon.icns
│   │   ├── AppIcon_128.icns
│   │   ├── Info.plist
│   │   ├── LaunchScreen.storyboard
│   │   └── png2icns_tiger/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── png2icns_tiger.c
│   │       └── run.sh
│   ├── cpi-gamesh/
│   │   ├── __init__.py
│   │   ├── build.sh
│   │   └── readme.md
│   ├── ctr/
│   │   └── template.rsf
│   ├── emscripten/
│   │   └── index.html
│   ├── haiku/
│   │   └── devilutionX.rdef.in
│   ├── miyoo_mini/
│   │   ├── build.sh
│   │   ├── setup_toolchain.sh
│   │   ├── skeleton_MiniUI/
│   │   │   └── Diablo/
│   │   │       ├── Diablo.m3u
│   │   │       ├── launch.sh
│   │   │       └── readme.txt
│   │   ├── skeleton_OnionOS/
│   │   │   ├── Roms/
│   │   │   │   └── PORTS/
│   │   │   │       ├── Games/
│   │   │   │       │   └── Diablo (devilutionX)/
│   │   │   │       │       └── _required_files.txt
│   │   │   │       └── Shortcuts/
│   │   │   │           └── Action/
│   │   │   │               └── Diablo (DevilutionX).notfound
│   │   │   └── readme.txt
│   │   └── toolchainfile.cmake
│   ├── nix/
│   │   ├── AppImage.sh
│   │   ├── AppRun
│   │   ├── LinuxReleasePackaging.sh
│   │   ├── README.txt
│   │   ├── debian-cross-aarch64-prep.sh
│   │   ├── debian-cross-i386-prep.sh
│   │   ├── debian-host-prep.sh
│   │   ├── devilutionx-hellfire.desktop
│   │   ├── devilutionx.6
│   │   ├── devilutionx.desktop
│   │   └── devilutionx.metainfo.xml
│   ├── pi/
│   │   └── README.txt
│   ├── ps4/
│   │   ├── README.md
│   │   └── build.sh
│   ├── ps5/
│   │   ├── README.md
│   │   ├── build.sh
│   │   └── homebrew.js
│   ├── resources/
│   │   ├── LICENSE.CC-BY.txt
│   │   ├── LICENSE.OFL.txt
│   │   ├── LICENSE.zlib.txt
│   │   └── README-SDL.txt
│   ├── switch/
│   │   ├── README.txt
│   │   └── packages.txt
│   ├── vita/
│   │   ├── README.txt
│   │   └── sce_sys/
│   │       └── livearea/
│   │           └── contents/
│   │               └── template.xml
│   ├── windows/
│   │   ├── CMakePresets.json
│   │   ├── README.txt
│   │   ├── devilutionx.exe.manifest
│   │   ├── devilutionx.rc
│   │   ├── dos-prep.sh
│   │   ├── mingw-prep.sh
│   │   └── mingw9x-prep.sh
│   ├── xbox-one/
│   │   └── build.bat
│   └── xbox_nxdk/
│       └── xbe_logo.pgm
├── README.md
├── Source/
│   ├── .clang-format
│   ├── .clang-tidy
│   ├── CMakeLists.txt
│   ├── DiabloUI/
│   │   ├── button.cpp
│   │   ├── button.h
│   │   ├── credits.cpp
│   │   ├── credits_lines.cpp
│   │   ├── credits_lines.h
│   │   ├── diabloui.cpp
│   │   ├── diabloui.h
│   │   ├── dialogs.cpp
│   │   ├── dialogs.h
│   │   ├── hero/
│   │   │   ├── selhero.cpp
│   │   │   └── selhero.h
│   │   ├── mainmenu.cpp
│   │   ├── multi/
│   │   │   ├── selconn.cpp
│   │   │   ├── selgame.cpp
│   │   │   └── selgame.h
│   │   ├── progress.cpp
│   │   ├── scrollbar.cpp
│   │   ├── scrollbar.h
│   │   ├── selok.cpp
│   │   ├── selok.h
│   │   ├── selstart.cpp
│   │   ├── selstart.h
│   │   ├── selyesno.cpp
│   │   ├── selyesno.h
│   │   ├── settingsmenu.cpp
│   │   ├── settingsmenu.h
│   │   ├── support_lines.cpp
│   │   ├── support_lines.h
│   │   ├── text_input.cpp
│   │   ├── text_input.hpp
│   │   ├── title.cpp
│   │   ├── ui_flags.hpp
│   │   └── ui_item.h
│   ├── appfat.cpp
│   ├── appfat.h
│   ├── automap.cpp
│   ├── automap.h
│   ├── capture.cpp
│   ├── capture.h
│   ├── codec.cpp
│   ├── codec.h
│   ├── control/
│   │   ├── control.hpp
│   │   ├── control_chat.cpp
│   │   ├── control_chat.hpp
│   │   ├── control_chat_commands.cpp
│   │   ├── control_chat_commands.hpp
│   │   ├── control_flasks.cpp
│   │   ├── control_flasks.hpp
│   │   ├── control_gold.cpp
│   │   ├── control_infobox.cpp
│   │   ├── control_panel.cpp
│   │   └── control_panel.hpp
│   ├── controls/
│   │   ├── README.md
│   │   ├── axis_direction.cpp
│   │   ├── axis_direction.h
│   │   ├── control_mode.cpp
│   │   ├── control_mode.hpp
│   │   ├── controller.cpp
│   │   ├── controller.h
│   │   ├── controller_buttons.cpp
│   │   ├── controller_buttons.h
│   │   ├── controller_motion.cpp
│   │   ├── controller_motion.h
│   │   ├── devices/
│   │   │   ├── game_controller.cpp
│   │   │   ├── game_controller.h
│   │   │   ├── joystick.cpp
│   │   │   ├── joystick.h
│   │   │   ├── kbcontroller.cpp
│   │   │   └── kbcontroller.h
│   │   ├── game_controls.cpp
│   │   ├── game_controls.h
│   │   ├── input.h
│   │   ├── keymapper.cpp
│   │   ├── keymapper.hpp
│   │   ├── menu_controls.cpp
│   │   ├── menu_controls.h
│   │   ├── modifier_hints.cpp
│   │   ├── modifier_hints.h
│   │   ├── padmapper.cpp
│   │   ├── padmapper.hpp
│   │   ├── plrctrls.cpp
│   │   ├── plrctrls.h
│   │   ├── remap_keyboard.h
│   │   └── touch/
│   │       ├── event_handlers.cpp
│   │       ├── event_handlers.h
│   │       ├── gamepad.cpp
│   │       ├── gamepad.h
│   │       ├── renderers.cpp
│   │       └── renderers.h
│   ├── cpp.hint
│   ├── crawl.cpp
│   ├── crawl.hpp
│   ├── cursor.cpp
│   ├── cursor.h
│   ├── data/
│   │   ├── file.cpp
│   │   ├── file.hpp
│   │   ├── iterators.hpp
│   │   ├── parser.cpp
│   │   ├── parser.hpp
│   │   ├── record_reader.cpp
│   │   ├── record_reader.hpp
│   │   ├── value_reader.cpp
│   │   └── value_reader.hpp
│   ├── dead.cpp
│   ├── dead.h
│   ├── debug.cpp
│   ├── debug.h
│   ├── diablo.cpp
│   ├── diablo.h
│   ├── diablo_msg.cpp
│   ├── diablo_msg.hpp
│   ├── discord/
│   │   ├── discord.cpp
│   │   └── discord.h
│   ├── doom.cpp
│   ├── doom.h
│   ├── dvlnet/
│   │   ├── abstract_net.cpp
│   │   ├── abstract_net.h
│   │   ├── base.cpp
│   │   ├── base.h
│   │   ├── base_protocol.h
│   │   ├── cdwrap.cpp
│   │   ├── cdwrap.h
│   │   ├── frame_queue.cpp
│   │   ├── frame_queue.h
│   │   ├── leaveinfo.hpp
│   │   ├── loopback.cpp
│   │   ├── loopback.h
│   │   ├── packet.cpp
│   │   ├── packet.h
│   │   ├── protocol_zt.cpp
│   │   ├── protocol_zt.h
│   │   ├── tcp_client.cpp
│   │   ├── tcp_client.h
│   │   ├── tcp_server.cpp
│   │   ├── tcp_server.h
│   │   ├── zerotier_lwip.cpp
│   │   ├── zerotier_lwip.h
│   │   ├── zerotier_native.cpp
│   │   └── zerotier_native.h
│   ├── effects.cpp
│   ├── effects.h
│   ├── effects_stubs.cpp
│   ├── encrypt.cpp
│   ├── encrypt.h
│   ├── engine/
│   │   ├── actor_position.cpp
│   │   ├── actor_position.hpp
│   │   ├── animationinfo.cpp
│   │   ├── animationinfo.h
│   │   ├── assets.cpp
│   │   ├── assets.hpp
│   │   ├── backbuffer_state.cpp
│   │   ├── backbuffer_state.hpp
│   │   ├── circle.hpp
│   │   ├── clx_sprite.hpp
│   │   ├── demomode.cpp
│   │   ├── demomode.h
│   │   ├── direction.cpp
│   │   ├── direction.hpp
│   │   ├── displacement.hpp
│   │   ├── dx.cpp
│   │   ├── dx.h
│   │   ├── events.cpp
│   │   ├── events.hpp
│   │   ├── lighting_defs.hpp
│   │   ├── load_cel.cpp
│   │   ├── load_cel.hpp
│   │   ├── load_cl2.cpp
│   │   ├── load_cl2.hpp
│   │   ├── load_clx.cpp
│   │   ├── load_clx.hpp
│   │   ├── load_file.hpp
│   │   ├── load_pcx.cpp
│   │   ├── load_pcx.hpp
│   │   ├── palette.cpp
│   │   ├── palette.h
│   │   ├── path.cpp
│   │   ├── path.h
│   │   ├── point.hpp
│   │   ├── points_in_rectangle_range.hpp
│   │   ├── random.cpp
│   │   ├── random.hpp
│   │   ├── rectangle.hpp
│   │   ├── render/
│   │   │   ├── automap_render.cpp
│   │   │   ├── automap_render.hpp
│   │   │   ├── blit_impl.hpp
│   │   │   ├── clx_render.cpp
│   │   │   ├── clx_render.hpp
│   │   │   ├── dun_render.cpp
│   │   │   ├── dun_render.hpp
│   │   │   ├── light_render.cpp
│   │   │   ├── light_render.hpp
│   │   │   ├── primitive_render.cpp
│   │   │   ├── primitive_render.hpp
│   │   │   ├── scrollrt.cpp
│   │   │   ├── scrollrt.h
│   │   │   ├── text_render.cpp
│   │   │   └── text_render.hpp
│   │   ├── size.hpp
│   │   ├── sound.cpp
│   │   ├── sound.h
│   │   ├── sound_defs.hpp
│   │   ├── sound_position.cpp
│   │   ├── sound_position.hpp
│   │   ├── sound_stubs.cpp
│   │   ├── surface.cpp
│   │   ├── surface.hpp
│   │   ├── ticks.cpp
│   │   ├── ticks.hpp
│   │   ├── trn.cpp
│   │   ├── trn.hpp
│   │   └── world_tile.hpp
│   ├── game_mode.cpp
│   ├── game_mode.hpp
│   ├── gamemenu.cpp
│   ├── gamemenu.h
│   ├── gmenu.cpp
│   ├── gmenu.h
│   ├── headless_mode.cpp
│   ├── headless_mode.hpp
│   ├── help.cpp
│   ├── help.h
│   ├── hwcursor.cpp
│   ├── hwcursor.hpp
│   ├── init.cpp
│   ├── init.hpp
│   ├── interfac.cpp
│   ├── interfac.h
│   ├── inv.cpp
│   ├── inv.h
│   ├── inv_iterators.hpp
│   ├── items/
│   │   ├── validation.cpp
│   │   └── validation.h
│   ├── items.cpp
│   ├── items.h
│   ├── levels/
│   │   ├── crypt.cpp
│   │   ├── crypt.h
│   │   ├── drlg_l1.cpp
│   │   ├── drlg_l1.h
│   │   ├── drlg_l2.cpp
│   │   ├── drlg_l2.h
│   │   ├── drlg_l3.cpp
│   │   ├── drlg_l3.h
│   │   ├── drlg_l4.cpp
│   │   ├── drlg_l4.h
│   │   ├── dun_tile.hpp
│   │   ├── gendung.cpp
│   │   ├── gendung.h
│   │   ├── gendung_defs.hpp
│   │   ├── reencode_dun_cels.cpp
│   │   ├── reencode_dun_cels.hpp
│   │   ├── setmaps.cpp
│   │   ├── setmaps.h
│   │   ├── themes.cpp
│   │   ├── themes.h
│   │   ├── tile_properties.cpp
│   │   ├── tile_properties.hpp
│   │   ├── town.cpp
│   │   ├── town.h
│   │   ├── trigs.cpp
│   │   └── trigs.h
│   ├── lighting.cpp
│   ├── lighting.h
│   ├── loadsave.cpp
│   ├── loadsave.h
│   ├── lua/
│   │   ├── autocomplete.cpp
│   │   ├── autocomplete.hpp
│   │   ├── lua_event.cpp
│   │   ├── lua_event.hpp
│   │   ├── lua_global.cpp
│   │   ├── lua_global.hpp
│   │   ├── metadoc.hpp
│   │   ├── modules/
│   │   │   ├── audio.cpp
│   │   │   ├── audio.hpp
│   │   │   ├── dev/
│   │   │   │   ├── display.cpp
│   │   │   │   ├── display.hpp
│   │   │   │   ├── items.cpp
│   │   │   │   ├── items.hpp
│   │   │   │   ├── level/
│   │   │   │   │   ├── map.cpp
│   │   │   │   │   ├── map.hpp
│   │   │   │   │   ├── warp.cpp
│   │   │   │   │   └── warp.hpp
│   │   │   │   ├── level.cpp
│   │   │   │   ├── level.hpp
│   │   │   │   ├── monsters.cpp
│   │   │   │   ├── monsters.hpp
│   │   │   │   ├── player/
│   │   │   │   │   ├── gold.cpp
│   │   │   │   │   ├── gold.hpp
│   │   │   │   │   ├── spells.cpp
│   │   │   │   │   ├── spells.hpp
│   │   │   │   │   ├── stats.cpp
│   │   │   │   │   └── stats.hpp
│   │   │   │   ├── player.cpp
│   │   │   │   ├── player.hpp
│   │   │   │   ├── quests.cpp
│   │   │   │   ├── quests.hpp
│   │   │   │   ├── search.cpp
│   │   │   │   ├── search.hpp
│   │   │   │   ├── towners.cpp
│   │   │   │   └── towners.hpp
│   │   │   ├── dev.cpp
│   │   │   ├── dev.hpp
│   │   │   ├── floatingnumbers.cpp
│   │   │   ├── floatingnumbers.hpp
│   │   │   ├── hellfire.cpp
│   │   │   ├── hellfire.hpp
│   │   │   ├── i18n.cpp
│   │   │   ├── i18n.hpp
│   │   │   ├── items.cpp
│   │   │   ├── items.hpp
│   │   │   ├── log.cpp
│   │   │   ├── log.hpp
│   │   │   ├── monsters.cpp
│   │   │   ├── monsters.hpp
│   │   │   ├── player.cpp
│   │   │   ├── player.hpp
│   │   │   ├── render.cpp
│   │   │   ├── render.hpp
│   │   │   ├── system.cpp
│   │   │   ├── system.hpp
│   │   │   ├── towners.cpp
│   │   │   └── towners.hpp
│   │   ├── repl.cpp
│   │   └── repl.hpp
│   ├── main.cpp
│   ├── menu.cpp
│   ├── menu.h
│   ├── minitext.cpp
│   ├── minitext.h
│   ├── missiles.cpp
│   ├── missiles.h
│   ├── monster.cpp
│   ├── monster.h
│   ├── monsters/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── movie.cpp
│   ├── movie.h
│   ├── mpq/
│   │   ├── mpq_common.cpp
│   │   ├── mpq_common.hpp
│   │   ├── mpq_reader.cpp
│   │   ├── mpq_reader.hpp
│   │   ├── mpq_sdl_rwops.cpp
│   │   ├── mpq_sdl_rwops.hpp
│   │   ├── mpq_writer.cpp
│   │   └── mpq_writer.hpp
│   ├── msg.cpp
│   ├── msg.h
│   ├── multi.cpp
│   ├── multi.h
│   ├── nthread.cpp
│   ├── nthread.h
│   ├── objects.cpp
│   ├── objects.h
│   ├── options.cpp
│   ├── options.h
│   ├── pack.cpp
│   ├── pack.h
│   ├── panels/
│   │   ├── charpanel.cpp
│   │   ├── charpanel.hpp
│   │   ├── console.cpp
│   │   ├── console.hpp
│   │   ├── info_box.cpp
│   │   ├── info_box.hpp
│   │   ├── mainpanel.cpp
│   │   ├── mainpanel.hpp
│   │   ├── partypanel.cpp
│   │   ├── partypanel.hpp
│   │   ├── spell_book.cpp
│   │   ├── spell_book.hpp
│   │   ├── spell_icons.cpp
│   │   ├── spell_icons.hpp
│   │   ├── spell_list.cpp
│   │   ├── spell_list.hpp
│   │   └── ui_panels.hpp
│   ├── pfile.cpp
│   ├── pfile.h
│   ├── platform/
│   │   ├── android/
│   │   │   ├── CMakeLists.txt
│   │   │   └── android.cpp
│   │   ├── ctr/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── asio/
│   │   │   │   ├── include/
│   │   │   │   │   ├── errno.h
│   │   │   │   │   ├── net/
│   │   │   │   │   │   └── if.h
│   │   │   │   │   ├── netdb.h
│   │   │   │   │   ├── netinet/
│   │   │   │   │   │   └── in.h
│   │   │   │   │   └── sys/
│   │   │   │   │       ├── ioctl.h
│   │   │   │   │       ├── poll.h
│   │   │   │   │       ├── socket.h
│   │   │   │   │       ├── uio.h
│   │   │   │   │       └── un.h
│   │   │   │   ├── net/
│   │   │   │   │   └── if.c
│   │   │   │   └── sys/
│   │   │   │       ├── socket.c
│   │   │   │       └── uio.c
│   │   │   ├── cfgu_service.hpp
│   │   │   ├── display.cpp
│   │   │   ├── display.hpp
│   │   │   ├── keyboard.cpp
│   │   │   ├── keyboard.h
│   │   │   ├── locale.cpp
│   │   │   ├── locale.hpp
│   │   │   ├── messagebox.cpp
│   │   │   ├── random.cpp
│   │   │   ├── random.hpp
│   │   │   ├── sockets.cpp
│   │   │   ├── sockets.hpp
│   │   │   ├── system.cpp
│   │   │   └── system.h
│   │   ├── ios/
│   │   │   ├── ios_paths.h
│   │   │   └── ios_paths.m
│   │   ├── locale.cpp
│   │   ├── locale.hpp
│   │   ├── macos_sdl1/
│   │   │   └── SDL_filesystem.m
│   │   ├── switch/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── asio/
│   │   │   │   ├── include/
│   │   │   │   │   ├── errno.h
│   │   │   │   │   ├── net/
│   │   │   │   │   │   └── if.h
│   │   │   │   │   ├── netinet/
│   │   │   │   │   │   └── in.h
│   │   │   │   │   └── sys/
│   │   │   │   │       ├── uio.h
│   │   │   │   │       └── un.h
│   │   │   │   ├── net/
│   │   │   │   │   └── if.c
│   │   │   │   ├── pause.c
│   │   │   │   └── sys/
│   │   │   │       └── signal.c
│   │   │   ├── docking.cpp
│   │   │   ├── docking.h
│   │   │   ├── keyboard.cpp
│   │   │   ├── keyboard.h
│   │   │   ├── network.cpp
│   │   │   ├── network.h
│   │   │   ├── random.cpp
│   │   │   ├── random.hpp
│   │   │   ├── romfs.cpp
│   │   │   └── romfs.hpp
│   │   └── vita/
│   │       ├── CMakeLists.txt
│   │       ├── keyboard.cpp
│   │       ├── keyboard.h
│   │       ├── network.cpp
│   │       ├── network.h
│   │       ├── random.cpp
│   │       ├── random.hpp
│   │       ├── touch.cpp
│   │       └── touch.h
│   ├── player.cpp
│   ├── player.h
│   ├── plrmsg.cpp
│   ├── plrmsg.h
│   ├── portal.cpp
│   ├── portal.h
│   ├── portals/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── qol/
│   │   ├── autopickup.cpp
│   │   ├── autopickup.h
│   │   ├── chatlog.cpp
│   │   ├── chatlog.h
│   │   ├── floatingnumbers.cpp
│   │   ├── floatingnumbers.h
│   │   ├── itemlabels.cpp
│   │   ├── itemlabels.h
│   │   ├── monhealthbar.cpp
│   │   ├── monhealthbar.h
│   │   ├── stash.cpp
│   │   ├── stash.h
│   │   ├── xpbar.cpp
│   │   └── xpbar.h
│   ├── quests/
│   │   ├── validation.cpp
│   │   └── validation.hpp
│   ├── quests.cpp
│   ├── quests.h
│   ├── quick_messages.cpp
│   ├── quick_messages.hpp
│   ├── restrict.cpp
│   ├── restrict.h
│   ├── sha.cpp
│   ├── sha.h
│   ├── sound_effect_enums.h
│   ├── spells.cpp
│   ├── spells.h
│   ├── stores.cpp
│   ├── stores.h
│   ├── storm/
│   │   ├── storm_net.cpp
│   │   ├── storm_net.hpp
│   │   ├── storm_svid.cpp
│   │   └── storm_svid.h
│   ├── sync.cpp
│   ├── sync.h
│   ├── tables/
│   │   ├── itemdat.cpp
│   │   ├── itemdat.h
│   │   ├── misdat.cpp
│   │   ├── misdat.h
│   │   ├── monstdat.cpp
│   │   ├── monstdat.h
│   │   ├── objdat.cpp
│   │   ├── objdat.h
│   │   ├── playerdat.cpp
│   │   ├── playerdat.hpp
│   │   ├── spelldat.cpp
│   │   ├── spelldat.h
│   │   ├── textdat.cpp
│   │   ├── textdat.h
│   │   ├── townerdat.cpp
│   │   └── townerdat.hpp
│   ├── tmsg.cpp
│   ├── tmsg.h
│   ├── towners.cpp
│   ├── towners.h
│   ├── track.cpp
│   ├── track.h
│   ├── translation_dummy.cpp
│   ├── utils/
│   │   ├── algorithm/
│   │   │   └── container.hpp
│   │   ├── attributes.h
│   │   ├── aulib.hpp
│   │   ├── bitset2d.hpp
│   │   ├── cel_to_clx.cpp
│   │   ├── cel_to_clx.hpp
│   │   ├── cl2_to_clx.cpp
│   │   ├── cl2_to_clx.hpp
│   │   ├── clx_decode.hpp
│   │   ├── clx_encode.hpp
│   │   ├── console.cpp
│   │   ├── console.h
│   │   ├── display.cpp
│   │   ├── display.h
│   │   ├── endian_read.hpp
│   │   ├── endian_stream.hpp
│   │   ├── endian_swap.hpp
│   │   ├── endian_write.hpp
│   │   ├── enum_traits.h
│   │   ├── file_name_generator.hpp
│   │   ├── file_util.cpp
│   │   ├── file_util.h
│   │   ├── format_int.cpp
│   │   ├── format_int.hpp
│   │   ├── hp_mana_units.hpp
│   │   ├── ini.cpp
│   │   ├── ini.hpp
│   │   ├── intrusive_optional.hpp
│   │   ├── is_of.hpp
│   │   ├── language.cpp
│   │   ├── language.h
│   │   ├── log.hpp
│   │   ├── logged_fstream.cpp
│   │   ├── logged_fstream.hpp
│   │   ├── math.h
│   │   ├── palette_blending.cpp
│   │   ├── palette_blending.hpp
│   │   ├── palette_kd_tree.cpp
│   │   ├── palette_kd_tree.hpp
│   │   ├── parse_int.cpp
│   │   ├── parse_int.hpp
│   │   ├── paths.cpp
│   │   ├── paths.h
│   │   ├── pcx.hpp
│   │   ├── pcx_to_clx.cpp
│   │   ├── pcx_to_clx.hpp
│   │   ├── png.h
│   │   ├── pointer_value_union.hpp
│   │   ├── push_aulib_decoder.cpp
│   │   ├── push_aulib_decoder.h
│   │   ├── screen_reader.cpp
│   │   ├── screen_reader.hpp
│   │   ├── sdl2_backports.h
│   │   ├── sdl2_to_1_2_backports.cpp
│   │   ├── sdl2_to_1_2_backports.h
│   │   ├── sdl_bilinear_scale.cpp
│   │   ├── sdl_bilinear_scale.hpp
│   │   ├── sdl_compat.h
│   │   ├── sdl_geometry.h
│   │   ├── sdl_mutex.h
│   │   ├── sdl_ptrs.h
│   │   ├── sdl_thread.cpp
│   │   ├── sdl_thread.h
│   │   ├── sdl_wrap.h
│   │   ├── soundsample.cpp
│   │   ├── soundsample.h
│   │   ├── static_vector.hpp
│   │   ├── status_macros.hpp
│   │   ├── stdcompat/
│   │   │   ├── filesystem.hpp
│   │   │   └── shared_ptr_array.hpp
│   │   ├── str_case.cpp
│   │   ├── str_case.hpp
│   │   ├── str_cat.cpp
│   │   ├── str_cat.hpp
│   │   ├── str_split.hpp
│   │   ├── string_or_view.hpp
│   │   ├── string_view_hash.hpp
│   │   ├── stubs.h
│   │   ├── surface_to_clx.cpp
│   │   ├── surface_to_clx.hpp
│   │   ├── surface_to_pcx.cpp
│   │   ├── surface_to_pcx.hpp
│   │   ├── surface_to_png.cpp
│   │   ├── surface_to_png.hpp
│   │   ├── timer.cpp
│   │   ├── timer.hpp
│   │   ├── ui_fwd.h
│   │   ├── utf8.cpp
│   │   └── utf8.hpp
│   ├── vision.cpp
│   └── vision.hpp
├── Translations/
│   ├── be.po
│   ├── bg.po
│   ├── cs.po
│   ├── da.po
│   ├── de.po
│   ├── devilutionx.pot
│   ├── el.po
│   ├── es.po
│   ├── et.po
│   ├── fi.po
│   ├── fr.po
│   ├── glossary.md
│   ├── hr.po
│   ├── hu.po
│   ├── it.po
│   ├── ja.po
│   ├── ko.po
│   ├── pl.po
│   ├── pt_BR.po
│   ├── ro.po
│   ├── ru.po
│   ├── sv.po
│   ├── tr.po
│   ├── uk.po
│   ├── zh_CN.po
│   └── zh_TW.po
├── VERSION
├── android-project/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   ├── proguard-rules.pro
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── org/
│   │           │       ├── diasurgical/
│   │           │       │   └── devilutionx/
│   │           │       │       ├── DataActivity.java
│   │           │       │       ├── DevilutionXSDLActivity.java
│   │           │       │       ├── ExternalFilesManager.java
│   │           │       │       └── ImportActivity.java
│   │           │       └── libsdl/
│   │           │           └── app/
│   │           │               ├── HIDDevice.java
│   │           │               ├── HIDDeviceBLESteamController.java
│   │           │               ├── HIDDeviceManager.java
│   │           │               ├── HIDDeviceUSB.java
│   │           │               ├── SDL.java
│   │           │               ├── SDLActivity.java
│   │           │               ├── SDLAudioManager.java
│   │           │               ├── SDLControllerManager.java
│   │           │               └── SDLSurface.java
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── gamepad.xml
│   │               ├── layout/
│   │               │   └── activity_data.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── values/
│   │               │   ├── colors.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-be/
│   │               │   └── strings.xml
│   │               ├── values-bg/
│   │               │   └── strings.xml
│   │               ├── values-cs/
│   │               │   └── strings.xml
│   │               ├── values-da/
│   │               │   └── strings.xml
│   │               ├── values-de/
│   │               │   └── strings.xml
│   │               ├── values-es/
│   │               │   └── strings.xml
│   │               ├── values-fi/
│   │               │   └── strings.xml
│   │               ├── values-fr/
│   │               │   └── strings.xml
│   │               ├── values-hr/
│   │               │   └── strings.xml
│   │               ├── values-hu/
│   │               │   └── strings.xml
│   │               ├── values-it/
│   │               │   └── strings.xml
│   │               ├── values-ko-rKR/
│   │               │   └── strings.xml
│   │               ├── values-pl/
│   │               │   └── strings.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-ro-rRO/
│   │               │   └── strings.xml
│   │               ├── values-ru/
│   │               │   └── strings.xml
│   │               ├── values-sv/
│   │               │   └── strings.xml
│   │               ├── values-tr/
│   │               │   └── strings.xml
│   │               ├── values-uk/
│   │               │   └── strings.xml
│   │               ├── values-zh-rCN/
│   │               │   └── strings.xml
│   │               ├── values-zh-rTW/
│   │               │   └── strings.xml
│   │               └── xml/
│   │                   ├── backup_descriptor.xml
│   │                   ├── backup_rules.xml
│   │                   └── shortcuts.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   └── settings.gradle
├── assets/
│   ├── ASSETS_VERSION
│   ├── arena/
│   │   ├── church.dun
│   │   ├── circle_of_death.dun
│   │   └── hell.dun
│   ├── data/
│   │   ├── boxleftend.clx
│   │   ├── boxmiddle.clx
│   │   ├── boxrightend.clx
│   │   ├── charbg.clx
│   │   ├── dirtybuc.clx
│   │   ├── dirtybucp.clx
│   │   ├── health.clx
│   │   ├── healthbox.clx
│   │   ├── hintbox.clx
│   │   ├── hintboxbackground.clx
│   │   ├── hinticons.clx
│   │   ├── inv/
│   │   │   └── objcurs-widths.txt
│   │   ├── monstertags.clx
│   │   ├── panel8buc.clx
│   │   ├── panel8bucp.clx
│   │   ├── resistance.clx
│   │   ├── stash.clx
│   │   ├── stashnavbtns.clx
│   │   ├── talkbutton.clx
│   │   └── xpbar.clx
│   ├── fonts/
│   │   ├── 12-00.clx
│   │   ├── 12-01.clx
│   │   ├── 12-02.clx
│   │   ├── 12-03.clx
│   │   ├── 12-04.clx
│   │   ├── 12-05.clx
│   │   ├── 12-1f1.clx
│   │   ├── 12-1f3.clx
│   │   ├── 12-1f4.clx
│   │   ├── 12-1f5.clx
│   │   ├── 12-1f6.clx
│   │   ├── 12-1f9.clx
│   │   ├── 12-20.clx
│   │   ├── 12-26.clx
│   │   ├── 12-e0.clx
│   │   ├── 22-00.clx
│   │   ├── 22-01.clx
│   │   ├── 22-02.clx
│   │   ├── 22-03.clx
│   │   ├── 22-04.clx
│   │   ├── 22-05.clx
│   │   ├── 22-20.clx
│   │   ├── 24-00.clx
│   │   ├── 24-01.clx
│   │   ├── 24-02.clx
│   │   ├── 24-03.clx
│   │   ├── 24-04.clx
│   │   ├── 24-05.clx
│   │   ├── 24-1f1.clx
│   │   ├── 24-1f3.clx
│   │   ├── 24-1f4.clx
│   │   ├── 24-1f5.clx
│   │   ├── 24-1f6.clx
│   │   ├── 24-1f9.clx
│   │   ├── 24-20.clx
│   │   ├── 24-26.clx
│   │   ├── 24-e0.clx
│   │   ├── 30-00.clx
│   │   ├── 30-01.clx
│   │   ├── 30-02.clx
│   │   ├── 30-03.clx
│   │   ├── 30-04.clx
│   │   ├── 30-05.clx
│   │   ├── 30-20.clx
│   │   ├── 30-e0.clx
│   │   ├── 42-00.clx
│   │   ├── 42-01.clx
│   │   ├── 42-02.clx
│   │   ├── 42-03.clx
│   │   ├── 42-04.clx
│   │   ├── 42-05.clx
│   │   ├── 42-20.clx
│   │   ├── 46-00.clx
│   │   ├── 46-01.clx
│   │   ├── 46-02.clx
│   │   ├── 46-03.clx
│   │   ├── 46-04.clx
│   │   ├── 46-05.clx
│   │   ├── 46-20.clx
│   │   ├── black.trn
│   │   ├── blue.trn
│   │   ├── buttonface.trn
│   │   ├── buttonpushed.trn
│   │   ├── gamedialogred.trn
│   │   ├── gamedialogwhite.trn
│   │   ├── gamedialogyellow.trn
│   │   ├── goldui.trn
│   │   ├── golduis.trn
│   │   ├── grayui.trn
│   │   ├── grayuis.trn
│   │   ├── orange.trn
│   │   ├── red.trn
│   │   ├── tr/
│   │   │   ├── 12-00.clx
│   │   │   ├── 24-00.clx
│   │   │   ├── 30-00.clx
│   │   │   ├── 42-00.clx
│   │   │   └── 46-00.clx
│   │   ├── white.trn
│   │   ├── whitegold.trn
│   │   └── yellow.trn
│   ├── gendata/
│   │   ├── cut2w.clx
│   │   ├── cut3w.clx
│   │   ├── cut4w.clx
│   │   ├── cutgatew.clx
│   │   ├── cutl1dw.clx
│   │   ├── cutportlw.clx
│   │   ├── cutportrw.clx
│   │   ├── cutstartw.clx
│   │   ├── cutttw.clx
│   │   └── pause.trn
│   ├── levels/
│   │   ├── l1data/
│   │   │   └── sklkngt.dun
│   │   ├── l2data/
│   │   │   └── bonechat.dun
│   │   └── towndata/
│   │       ├── automap.amp
│   │       └── automap.dun
│   ├── lua/
│   │   ├── devilutionx/
│   │   │   └── events.lua
│   │   ├── inspect.lua
│   │   ├── mods/
│   │   │   ├── Floating Numbers - Damage/
│   │   │   │   └── init.lua
│   │   │   ├── Floating Numbers - XP/
│   │   │   │   └── init.lua
│   │   │   ├── adria_refills_mana/
│   │   │   │   └── init.lua
│   │   │   └── clock/
│   │   │       └── init.lua
│   │   └── repl_prelude.lua
│   ├── lua_internal/
│   │   └── get_lua_function_signature.lua
│   ├── plrgfx/
│   │   └── warrior/
│   │       └── whu/
│   │           ├── whufm.trn
│   │           ├── whulm.trn
│   │           └── whuqm.trn
│   ├── txtdata/
│   │   ├── Experience.tsv
│   │   ├── Readme.md
│   │   ├── classes/
│   │   │   ├── README.md
│   │   │   ├── barbarian/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── bard/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── classdat.tsv
│   │   │   ├── monk/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── rogue/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   ├── sorcerer/
│   │   │   │   ├── animations.tsv
│   │   │   │   ├── attributes.tsv
│   │   │   │   ├── sounds.tsv
│   │   │   │   ├── sprites.tsv
│   │   │   │   └── starting_loadout.tsv
│   │   │   └── warrior/
│   │   │       ├── animations.tsv
│   │   │       ├── attributes.tsv
│   │   │       ├── sounds.tsv
│   │   │       ├── sprites.tsv
│   │   │       └── starting_loadout.tsv
│   │   ├── items/
│   │   │   ├── item_prefixes.tsv
│   │   │   ├── item_suffixes.tsv
│   │   │   ├── itemdat.tsv
│   │   │   └── unique_itemdat.tsv
│   │   ├── missiles/
│   │   │   ├── misdat.tsv
│   │   │   └── missile_sprites.tsv
│   │   ├── monsters/
│   │   │   ├── monstdat.tsv
│   │   │   └── unique_monstdat.tsv
│   │   ├── objects/
│   │   │   └── objdat.tsv
│   │   ├── quests/
│   │   │   └── questdat.tsv
│   │   ├── sound/
│   │   │   ├── effects-unused.tsv
│   │   │   └── effects.tsv
│   │   ├── spells/
│   │   │   └── spelldat.tsv
│   │   ├── text/
│   │   │   ├── textdat-unused.tsv
│   │   │   └── textdat.tsv
│   │   └── towners/
│   │       ├── quest_dialog.tsv
│   │       └── towners.tsv
│   └── ui_art/
│       ├── creditsw.clx
│       ├── diablo.pal
│       ├── dvl_but_sml.clx
│       ├── dvl_lrpopup.clx
│       ├── hellfire.pal
│       └── mainmenuw.clx
├── codecov.yml
├── docs/
│   ├── BACKGROUND.md
│   ├── CHANGELOG.md
│   ├── CONTRIBUTING.md
│   ├── TODO.md
│   ├── benchmarking.md
│   ├── building.md
│   ├── debug.md
│   ├── github-codespaces.md
│   ├── installing.md
│   ├── manual/
│   │   └── platforms/
│   │       ├── 3ds.md
│   │       ├── gkd350h.md
│   │       ├── retrofw.md
│   │       ├── rg350.md
│   │       ├── rg99.md
│   │       ├── switch.md
│   │       ├── vita.md
│   │       ├── xbox-one.md
│   │       └── xbox.md
│   ├── privacy.md
│   └── profiling-linux.md
├── doxygen.config
├── mods/
│   └── Hellfire/
│       ├── data/
│       │   └── inv/
│       │       └── objcurs2-widths.txt
│       ├── lua/
│       │   └── mods/
│       │       └── Hellfire/
│       │           └── init.lua
│       ├── nlevels/
│       │   ├── cutl5w.clx
│       │   ├── cutl6w.clx
│       │   └── l5data/
│       │       ├── cornerstone.dun
│       │       └── uberroom.dun
│       ├── txtdata/
│       │   ├── classes/
│       │   │   ├── classdat.tsv
│       │   │   └── sorcerer/
│       │   │       └── starting_loadout.tsv
│       │   ├── items/
│       │   │   ├── item_prefixes.tsv
│       │   │   ├── item_suffixes.tsv
│       │   │   └── unique_itemdat.tsv
│       │   ├── missiles/
│       │   │   ├── misdat.tsv
│       │   │   └── missile_sprites.tsv
│       │   ├── monsters/
│       │   │   └── monstdat.tsv
│       │   ├── sound/
│       │   │   ├── effects-unused.tsv
│       │   │   └── effects.tsv
│       │   ├── spells/
│       │   │   └── spelldat.tsv
│       │   └── towners/
│       │       ├── quest_dialog.tsv
│       │       └── towners.tsv
│       └── ui_art/
│           ├── diablo.pal
│           ├── hf_titlew.clx
│           ├── mainmenuw.clx
│           └── supportw.clx
├── test/
│   ├── .clang-format
│   ├── Fixtures.cmake
│   ├── animationinfo_test.cpp
│   ├── app_fatal_for_testing.cpp
│   ├── appfat_test.cpp
│   ├── automap_test.cpp
│   ├── clx_render_benchmark.cpp
│   ├── codec_test.cpp
│   ├── crawl_benchmark.cpp
│   ├── crawl_test.cpp
│   ├── cursor_test.cpp
│   ├── data_file_test.cpp
│   ├── dead_test.cpp
│   ├── diablo_test.cpp
│   ├── drlg_common_test.cpp
│   ├── drlg_l1_test.cpp
│   ├── drlg_l2_test.cpp
│   ├── drlg_l3_test.cpp
│   ├── drlg_l4_test.cpp
│   ├── drlg_test.hpp
│   ├── dun_render_benchmark.cpp
│   ├── effects_test.cpp
│   ├── file_util_test.cpp
│   ├── fixtures/
│   │   ├── diablo/
│   │   │   ├── 1-2588.dun
│   │   │   ├── 1-743271966.dun
│   │   │   ├── 10-1630062353.dun
│   │   │   ├── 10-879635115.dun
│   │   │   ├── 11-384626536.dun
│   │   │   ├── 12-2104541047.dun
│   │   │   ├── 13-428074402.dun
│   │   │   ├── 13-594689775.dun
│   │   │   ├── 14-717625719.dun
│   │   │   ├── 14-815743776.dun
│   │   │   ├── 15-1256511996.dun
│   │   │   ├── 15-1583642716-changed.dun
│   │   │   ├── 15-1583642716.dun
│   │   │   ├── 16-741281013.dun
│   │   │   ├── 2-1383137027.dun
│   │   │   ├── 3-844660068.dun
│   │   │   ├── 4-609325643.dun
│   │   │   ├── 4-902156014.dun
│   │   │   ├── 5-1677631846.dun
│   │   │   ├── 5-68685319.dun
│   │   │   ├── 6-1824554527.dun
│   │   │   ├── 6-2033265779.dun
│   │   │   ├── 6-2034738122.dun
│   │   │   ├── 7-1607627156.dun
│   │   │   ├── 7-680552750.dun
│   │   │   ├── 8-1999936419.dun
│   │   │   └── 9-262005438.dun
│   │   ├── hellfire/
│   │   │   ├── 1-401921334.dun
│   │   │   ├── 1-536340718.dun
│   │   │   ├── 17-19770182.dun
│   │   │   ├── 18-1522546307.dun
│   │   │   ├── 19-125121312.dun
│   │   │   ├── 2-1180526547.dun
│   │   │   ├── 2-128964898.dun
│   │   │   ├── 20-1511478689.dun
│   │   │   ├── 21-2122696790.dun
│   │   │   ├── 22-1191662129.dun
│   │   │   ├── 23-97055268.dun
│   │   │   ├── 24-1324803725.dun
│   │   │   ├── 3-1369955278.dun
│   │   │   ├── 3-1512491184.dun
│   │   │   ├── 3-1799396623.dun
│   │   │   ├── 4-1190318991.dun
│   │   │   └── 4-1924296259.dun
│   │   ├── levels/
│   │   │   ├── l1data/
│   │   │   │   ├── banner1.dun
│   │   │   │   ├── banner2.dun
│   │   │   │   ├── rnd6.dun
│   │   │   │   └── skngdo.dun
│   │   │   ├── l2data/
│   │   │   │   ├── blind1.dun
│   │   │   │   ├── blood1.dun
│   │   │   │   ├── blood2.dun
│   │   │   │   ├── bonestr1.dun
│   │   │   │   └── bonestr2.dun
│   │   │   ├── l3data/
│   │   │   │   └── anvil.dun
│   │   │   └── l4data/
│   │   │       ├── diab1.dun
│   │   │       ├── diab2a.dun
│   │   │       ├── diab2b.dun
│   │   │       ├── diab3a.dun
│   │   │       ├── diab3b.dun
│   │   │       ├── diab4a.dun
│   │   │       ├── diab4b.dun
│   │   │       ├── vile1.dun
│   │   │       ├── warlord.dun
│   │   │       └── warlord2.dun
│   │   ├── light_render_benchmark/
│   │   │   └── dLight.dmp
│   │   ├── memory_map/
│   │   │   ├── additionalMissiles.txt
│   │   │   ├── game.txt
│   │   │   ├── hero.txt
│   │   │   ├── item.txt
│   │   │   ├── itemPack.txt
│   │   │   ├── level.txt
│   │   │   ├── levelSeed.txt
│   │   │   ├── lightning.txt
│   │   │   ├── missile.txt
│   │   │   ├── monster.txt
│   │   │   ├── object.txt
│   │   │   ├── player.txt
│   │   │   ├── portal.txt
│   │   │   └── quest.txt
│   │   ├── timedemo/
│   │   │   └── WarriorLevel1to2/
│   │   │       ├── demo_0.dmo
│   │   │       ├── demo_0_reference_spawn_0.sv
│   │   │       └── spawn_0.sv
│   │   └── txtdata/
│   │       ├── cr.tsv
│   │       ├── crlf.tsv
│   │       ├── empty.tsv
│   │       ├── empty_with_utf8_bom.tsv
│   │       ├── lf.tsv
│   │       ├── lf_no_trail.tsv
│   │       ├── sample.tsv
│   │       └── utf8_bom.tsv
│   ├── format_int_test.cpp
│   ├── ini_test.cpp
│   ├── inv_test.cpp
│   ├── items_test.cpp
│   ├── language_for_testing.cpp
│   ├── light_render_benchmark.cpp
│   ├── main.cpp
│   ├── math_test.cpp
│   ├── missiles_test.cpp
│   ├── multi_logging_test.cpp
│   ├── pack_test.cpp
│   ├── palette_blending_benchmark.cpp
│   ├── palette_blending_test.cpp
│   ├── parse_int_test.cpp
│   ├── path_benchmark.cpp
│   ├── path_test.cpp
│   ├── player_test.cpp
│   ├── player_test.h
│   ├── quests_test.cpp
│   ├── random_test.cpp
│   ├── rectangle_test.cpp
│   ├── scrollrt_test.cpp
│   ├── static_vector_test.cpp
│   ├── stores_test.cpp
│   ├── str_cat_test.cpp
│   ├── text_render_integration_test.cpp
│   ├── tile_properties_test.cpp
│   ├── timedemo_test.cpp
│   ├── townerdat_test.cpp
│   ├── utf8_test.cpp
│   ├── vendor_test.cpp
│   ├── vision_test.cpp
│   └── writehero_test.cpp
├── tools/
│   ├── Dockerfile.s390x
│   ├── build_and_install_smpq.ps1
│   ├── build_and_install_smpq.sh
│   ├── build_and_run_benchmark.py
│   ├── build_pgo.sh
│   ├── extract_translation_data.py
│   ├── gdb/
│   │   ├── README.md
│   │   └── devilution_gdb/
│   │       ├── __init__.py
│   │       └── pretty_printers/
│   │           └── utils/
│   │               └── static_vector_pp.py
│   ├── linux_reduced_cpu_variance_run.sh
│   ├── lldb/
│   │   ├── README.md
│   │   └── devilution_lldb/
│   │       ├── __init__.py
│   │       └── pretty_printers/
│   │           └── utils/
│   │               └── static_vector_pp.py
│   ├── make_src_dist.py
│   ├── measure_timedemo_performance.py
│   ├── run_big_endian_tests.sh
│   ├── segmenter/
│   │   ├── README.md
│   │   ├── requirements.txt
│   │   ├── segment_all.py
│   │   ├── segment_ja.py
│   │   ├── segment_zh.py
│   │   └── segmenter_lib.py
│   ├── update_bundled_assets.sh
│   ├── update_sdl_android_project.sh
│   ├── update_translations_pot.py
│   └── validate_translations.py
├── uwp-project/
│   ├── Package.appxmanifest
│   ├── Package.appxmanifest.template
│   ├── devilutionX_TemporaryKey.pfx
│   ├── devilutionx.sln
│   ├── devilutionx.vcxproj
│   └── src/
│       └── SDL_winrt_main_NonXAML.cpp
└── vcpkg.json
Download .txt
Showing preview only (767K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6711 symbols across 656 files)

FILE: 3rdParty/PKWare/explode.cpp
  function GenDecodeTabs (line 130) | static void PKWAREAPI GenDecodeTabs(
  function GenAscTabs (line 151) | static void PKWAREAPI GenAscTabs(TDcmpStruct * pWork)
  function WasteBits (line 230) | static int PKWAREAPI WasteBits(TDcmpStruct * pWork, unsigned int nBits)
  function DecodeLit (line 270) | static unsigned int PKWAREAPI DecodeLit(TDcmpStruct * pWork)
  function DecodeDist (line 360) | static unsigned int PKWAREAPI DecodeDist(TDcmpStruct * pWork, unsigned i...
  function Expand (line 391) | static unsigned int PKWAREAPI Expand(TDcmpStruct * pWork)
  function explode (line 473) | unsigned int PKWAREAPI explode(

FILE: 3rdParty/PKWare/implode.cpp
  function SortBuffer (line 139) | static void PKWAREAPI SortBuffer(TCmpStruct * pWork, unsigned char * buf...
  function FlushBuf (line 185) | static void PKWAREAPI FlushBuf(TCmpStruct * pWork)
  function OutputBits (line 205) | static void PKWAREAPI OutputBits(TCmpStruct * pWork, unsigned int nbits,...
  function FindRep (line 247) | static unsigned int PKWAREAPI FindRep(TCmpStruct * pWork, unsigned char ...
  function WriteCmpData (line 503) | static void PKWAREAPI WriteCmpData(TCmpStruct * pWork)
  function implode (line 688) | unsigned int PKWAREAPI implode(

FILE: 3rdParty/PKWare/pkware.h
  type TCmpStruct (line 45) | typedef struct
  type TDcmpStruct (line 80) | typedef struct

FILE: 3rdParty/PicoSHA2/picosha2.h
  function namespace (line 39) | namespace picosha2 {
  function string (line 169) | string bytes_to_hex_string(InIter first, InIter last) {
  function string (line 176) | string bytes_to_hex_string(const InContainer& bytes) {
  function class (line 182) | class hash256_one_by_one {
  function finish (line 205) | void finish() {
  function write_data_bit_length (line 248) | void write_data_bit_length(byte_t* begin) {
  function get_hash_hex_string (line 274) | inline void get_hash_hex_string(const hash256_one_by_one& hasher,
  function std (line 281) | inline std::string get_hash_hex_string(const hash256_one_by_one& hasher) {
  function namespace (line 287) | namespace impl {
  function string (line 353) | string hash256_hex_string(InIter first, InIter last) {
  function hash256_hex_string (line 359) | inline void hash256_hex_string(const std::string& src, std::string& hex_...
  function string (line 369) | string hash256_hex_string(const InContainer& src) {

FILE: 3rdParty/SDL_image/IMG.c
  function IMG_Init (line 28) | int IMG_Init(int flags) {
  function IMG_Quit (line 46) | void IMG_Quit() {

FILE: 3rdParty/asio/asio_handle_exception.cpp
  type devilution (line 5) | namespace devilution {
  type asio::detail (line 11) | namespace asio::detail {
    function fatal_exception (line 13) | void fatal_exception(const char* message)

FILE: 3rdParty/asio/asio_handle_exception.hpp
  type asio::detail (line 5) | namespace asio::detail {
    function throw_exception (line 10) | void throw_exception(

FILE: 3rdParty/bzip2/bz_internal_error.c
  function bz_internal_error (line 3) | void bz_internal_error(int errcode) {

FILE: 3rdParty/sol2/sol_config/sol/debug.hpp
  type devilutionx (line 11) | namespace devilutionx {
  type sol::detail::debug (line 16) | namespace sol::detail::debug {
    function dump_types (line 18) | inline std::string dump_types(lua_State *L) {
    function print_stack (line 30) | inline void print_stack(lua_State *L) { ::devilutionx::Sol2DebugPrintS...
    function print_section (line 32) | inline void print_section(const std::string &message, lua_State *L) {

FILE: 3rdParty/tl/expected.hpp
  type tl (line 84) | namespace tl {
    type detail (line 85) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    class expected (line 130) | class expected
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    class monostate (line 134) | class monostate {}
    type in_place_t (line 136) | struct in_place_t {
      method in_place_t (line 137) | explicit in_place_t() = default;
    class unexpected (line 142) | class unexpected {
      method unexpected (line 146) | unexpected() = delete;
      method unexpected (line 147) | constexpr explicit unexpected(const E &e) : m_val(e) {}
      method unexpected (line 149) | constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {}
      method unexpected (line 153) | constexpr explicit unexpected(Args &&...args)
      method unexpected (line 159) | constexpr explicit unexpected(std::initializer_list<U> l, Args &&......
      method E (line 162) | constexpr const E &value() const & { return m_val; }
      method TL_EXPECTED_11_CONSTEXPR (line 163) | TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; }
      method TL_EXPECTED_11_CONSTEXPR (line 164) | TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); }
      method E (line 165) | constexpr const E &&value() const && { return std::move(m_val); }
    function make_unexpected (line 201) | unexpected<typename std::decay<E>::type> make_unexpected(E &&e) {
    type unexpect_t (line 205) | struct unexpect_t {
      method unexpect_t (line 206) | unexpect_t() = default;
    type detail (line 210) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    type detail (line 436) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    class bad_expected_access (line 1222) | class bad_expected_access : public std::exception {
      method bad_expected_access (line 1224) | explicit bad_expected_access(E e) : m_val(std::move(e)) {}
      method E (line 1230) | const E &error() const & { return m_val; }
      method E (line 1231) | E &error() & { return m_val; }
      method E (line 1232) | const E &&error() const && { return std::move(m_val); }
      method E (line 1233) | E &&error() && { return std::move(m_val); }
    class expected (line 1247) | class expected : private detail::expected_move_assign_base<T, E>,
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function TL_EXPECTED_MSVC2015_CONSTEXPR (line 1667) | TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)
    function expected (line 1682) | expected &operator=(U &&v) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1706) | expected &operator=(U &&v) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1733) | expected &operator=(const unexpected<G> &rhs) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1748) | expected &operator=(unexpected<G> &&rhs) noexcept {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function emplace (line 1762) | void emplace(Args &&...args) {
    function emplace (line 1774) | void emplace(Args &&...args) {
    function emplace (line 1800) | void emplace(std::initializer_list<U> il, Args &&...args) {
    function emplace (line 1814) | void emplace(std::initializer_list<U> il, Args &&...args) {
    function swap_where_both_have_value (line 1845) | void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept {
    function swap_where_both_have_value (line 1849) | void swap_where_both_have_value(expected &rhs, t_is_not_void) {
    function swap_where_only_one_has_value (line 1854) | void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept(
    function swap_where_only_one_has_value (line 1861) | void swap_where_only_one_has_value(expected &rhs, t_is_not_void) {
  type tl (line 129) | namespace tl {
    type detail (line 85) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    class expected (line 130) | class expected
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    class monostate (line 134) | class monostate {}
    type in_place_t (line 136) | struct in_place_t {
      method in_place_t (line 137) | explicit in_place_t() = default;
    class unexpected (line 142) | class unexpected {
      method unexpected (line 146) | unexpected() = delete;
      method unexpected (line 147) | constexpr explicit unexpected(const E &e) : m_val(e) {}
      method unexpected (line 149) | constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {}
      method unexpected (line 153) | constexpr explicit unexpected(Args &&...args)
      method unexpected (line 159) | constexpr explicit unexpected(std::initializer_list<U> l, Args &&......
      method E (line 162) | constexpr const E &value() const & { return m_val; }
      method TL_EXPECTED_11_CONSTEXPR (line 163) | TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; }
      method TL_EXPECTED_11_CONSTEXPR (line 164) | TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); }
      method E (line 165) | constexpr const E &&value() const && { return std::move(m_val); }
    function make_unexpected (line 201) | unexpected<typename std::decay<E>::type> make_unexpected(E &&e) {
    type unexpect_t (line 205) | struct unexpect_t {
      method unexpect_t (line 206) | unexpect_t() = default;
    type detail (line 210) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    type detail (line 436) | namespace detail {
      type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
      type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
      function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
      type conjunction (line 238) | struct conjunction : std::true_type {}
      type conjunction<B> (line 239) | struct conjunction<B> : B {}
      type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
      type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
      type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
      type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
      function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
      type invoke_result_impl (line 302) | struct invoke_result_impl
      type is_swappable (line 321) | struct is_swappable : std::true_type {}
      type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
      type swap_adl_tests (line 326) | namespace swap_adl_tests {
        type tag (line 329) | struct tag {}
        type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
        type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
        type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
      type is_swappable (line 362) | struct is_swappable
      type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
      type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
      type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
      type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
      type no_init_t (line 437) | struct no_init_t {}
      type expected_storage_base (line 448) | struct expected_storage_base {
        method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
        method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
        method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
        method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
        method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
        method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
        method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
        method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
        method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
        method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
        method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
        method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
        type dummy (line 652) | struct dummy {}
      type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
        method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
        method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
        method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
        method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
        method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
      type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
        method construct (line 700) | void construct(Args &&...args) noexcept {
        method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
        method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
        method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 761) | void assign(const expected_operations_base &rhs) {
        method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
        method assign (line 797) | void assign(expected_operations_base &&rhs) {
        method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
        method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
        method assign_common (line 840) | void assign_common(Rhs &&rhs) {
        method has_value (line 855) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
        method T (line 858) | constexpr const T &get() const & { return this->m_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
        method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
        method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
      type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
        method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
        method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
        method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
        method assign (line 900) | void assign(Rhs &&rhs) noexcept {
        method has_value (line 915) | bool has_value() const { return this->m_has_val; }
        method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
        method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
        method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
      type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
      type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
        method expected_copy_base (line 949) | expected_copy_base() = default;
        method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
        method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
        method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
        method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
      type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
      type expected_move_base (line 977) | struct expected_move_base
      type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
        method expected_move_base (line 983) | expected_move_base() = default;
        method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
        method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
        method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
        method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
      type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
        method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
        method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
        method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
        method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
        method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
      type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
      type expected_move_assign_base (line 1046) | struct expected_move_assign_base
      type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
        method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
        method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
        method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
        method expected_move_assign_base (line 1059) | expected_move_assign_base &
        method expected_move_assign_base (line 1062) | expected_move_assign_base &
      type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
        method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
        method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
        method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
        method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
      type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
        method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
        method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
        method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
        method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
        method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
      type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
        method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
        method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
        method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
      type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
        method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
        method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
        method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
        method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
        method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
      type default_constructor_tag (line 1182) | struct default_constructor_tag {
        method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
      type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
        method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
        method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
      type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
        method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
        method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
        method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
        method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
        method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
    class bad_expected_access (line 1222) | class bad_expected_access : public std::exception {
      method bad_expected_access (line 1224) | explicit bad_expected_access(E e) : m_val(std::move(e)) {}
      method E (line 1230) | const E &error() const & { return m_val; }
      method E (line 1231) | E &error() & { return m_val; }
      method E (line 1232) | const E &&error() const && { return std::move(m_val); }
      method E (line 1233) | E &&error() && { return std::move(m_val); }
    class expected (line 1247) | class expected : private detail::expected_move_assign_base<T, E>,
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function TL_EXPECTED_MSVC2015_CONSTEXPR (line 1667) | TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)
    function expected (line 1682) | expected &operator=(U &&v) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1706) | expected &operator=(U &&v) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1733) | expected &operator=(const unexpected<G> &rhs) {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function expected (line 1748) | expected &operator=(unexpected<G> &&rhs) noexcept {
      method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
      method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
      method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
      method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
      method U (line 1277) | constexpr const U &val() const {
      method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
      method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
      method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
      method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
      method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
      method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
      method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
      method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
      method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
      method map (line 1344) | constexpr auto map(F &&f) const & {
      method map (line 1347) | constexpr auto map(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
      method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
      method transform (line 1388) | constexpr auto transform(F &&f) const & {
      method transform (line 1391) | constexpr auto transform(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
      method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
      method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
      method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
      method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
      method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
      method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
      method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
      method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
      method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
      method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
      method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
      method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
      method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
      method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
      method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
      method expected (line 1518) | expected constexpr or_else(F &&f) const & {
      method expected (line 1523) | expected constexpr or_else(F &&f) const && {
      method expected (line 1527) | constexpr expected() = default;
      method expected (line 1528) | constexpr expected(const expected &rhs) = default;
      method expected (line 1529) | constexpr expected(expected &&rhs) = default;
      method expected (line 1530) | expected &operator=(const expected &rhs) = default;
      method expected (line 1531) | expected &operator=(expected &&rhs) = default;
      method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
      method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
      method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
      method expected (line 1561) | constexpr expected(unexpected<G> const &e)
      method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
      method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
      method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
      method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
      method else (line 1623) | else {
    function emplace (line 1762) | void emplace(Args &&...args) {
    function emplace (line 1774) | void emplace(Args &&...args) {
    function emplace (line 1800) | void emplace(std::initializer_list<U> il, Args &&...args) {
    function emplace (line 1814) | void emplace(std::initializer_list<U> il, Args &&...args) {
    function swap_where_both_have_value (line 1845) | void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept {
    function swap_where_both_have_value (line 1849) | void swap_where_both_have_value(expected &rhs, t_is_not_void) {
    function swap_where_only_one_has_value (line 1854) | void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept(
    function swap_where_only_one_has_value (line 1861) | void swap_where_only_one_has_value(expected &rhs, t_is_not_void) {
  type conjunction<B, Bs...> (line 241) | struct conjunction<B, Bs...>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...)> (line 255) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...)>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &> (line 258) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &&> (line 261) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &&>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile> (line 264) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &> (line 267) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &>
  type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &&> (line 270) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &&>
  type invoke_result_impl<
    F,
    decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...), void()),
    Us...> (line 305) | struct invoke_result_impl<
  function swap_where_only_one_has_value_and_t_is_not_void (line 1867) | void swap_where_only_one_has_value_and_t_is_not_void(
  function swap_where_only_one_has_value_and_t_is_not_void (line 1878) | void swap_where_only_one_has_value_and_t_is_not_void(
  function swap_where_only_one_has_value_and_t_is_not_void (line 1901) | void swap_where_only_one_has_value_and_t_is_not_void(
  function swap_where_both_have_value (line 1936) | swap_where_both_have_value(rhs, typename std::is_void<T>::type{}
  function swap_where_only_one_has_value (line 1940) | swap_where_only_one_has_value(rhs, typename std::is_void<T>::type{}
  function T (line 1947) | constexpr const T *operator->() const {
  function TL_EXPECTED_11_CONSTEXPR (line 1951) | TL_EXPECTED_11_CONSTEXPR T *operator->() {
  function U (line 1958) | constexpr const U &operator*() const & {
  function TL_EXPECTED_11_CONSTEXPR (line 1964) | TL_EXPECTED_11_CONSTEXPR U &operator*() & {
  function U (line 1970) | constexpr const U &&operator*() const && {
  function TL_EXPECTED_11_CONSTEXPR (line 1976) | TL_EXPECTED_11_CONSTEXPR U &&operator*() && {
  function has_value (line 1981) | constexpr bool has_value() const noexcept { return this->m_has_val; }
  function TL_EXPECTED_11_CONSTEXPR (line 1986) | TL_EXPECTED_11_CONSTEXPR const U &value() const & {
  function TL_EXPECTED_11_CONSTEXPR (line 1993) | TL_EXPECTED_11_CONSTEXPR U &value() & {
  function TL_EXPECTED_11_CONSTEXPR (line 2000) | TL_EXPECTED_11_CONSTEXPR const U &&value() const && {
  function TL_EXPECTED_11_CONSTEXPR (line 2007) | TL_EXPECTED_11_CONSTEXPR U &&value() && {
  function E (line 2013) | constexpr const E &error() const & {
  function TL_EXPECTED_11_CONSTEXPR (line 2017) | TL_EXPECTED_11_CONSTEXPR E &error() & {
  function E (line 2021) | constexpr const E &&error() const && {
  function TL_EXPECTED_11_CONSTEXPR (line 2025) | TL_EXPECTED_11_CONSTEXPR E &&error() && {
  function T (line 2030) | constexpr T value_or(U &&v) const & {
  function TL_EXPECTED_11_CONSTEXPR (line 2036) | TL_EXPECTED_11_CONSTEXPR T value_or(U &&v) && {
  type detail
Copy disabled (too large) Download .json
Condensed preview — 1343 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,332K chars).
[
  {
    "path": ".devcontainer/Dockerfile",
    "chars": 2492,
    "preview": "ARG VARIANT=debian-12\nFROM mcr.microsoft.com/devcontainers/base:${VARIANT}\nUSER root\n\n# Install APT packages\nRUN apt-get"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 616,
    "preview": "{\n\t\"build\": {\n\t\t\"dockerfile\": \"Dockerfile\",\n\t\t\"context\": \"..\"\n\t},\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"extensions\": [\n"
  },
  {
    "path": ".devcontainer/fluxbox/apps",
    "chars": 172,
    "preview": "[transient] (role=GtkFileChooserDialog)\n  [Dimensions]  {70% 70%}\n  [Position]    (CENTER)        {0 0}\n[end]\n[app] (nam"
  },
  {
    "path": ".devcontainer/fluxbox/menu",
    "chars": 1004,
    "preview": "[begin] (  Application Menu  )\n    [exec] (File Manager) { nautilus /workspaces/devilutionX } </usr/share/icons/gnome/32"
  },
  {
    "path": ".editorconfig",
    "chars": 1258,
    "preview": "root = true\r\n\r\n[*]\r\nindent_style = tab\r\nend_of_line = crlf\r\ncharset = utf-8\r\ntrim_trailing_whitespace = true\r\ninsert_fin"
  },
  {
    "path": ".gdbinit",
    "chars": 45,
    "preview": "source tools/gdb/devilution_gdb/__init__.py\r\n"
  },
  {
    "path": ".gitattributes",
    "chars": 48,
    "preview": "# Do not let git change line endings.\r\n* -text\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1812,
    "preview": "name: Bug report\ndescription: Create a report to help us improve\ntitle: \"[Issue Report]: \"\nlabels: [\"issue report\"]\nbody"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 571,
    "preview": "name: Feature Request\ndescription: Request a feature or improvement.\ntitle: \"[Feature Request]: \"\nlabels: [\"enhancement\""
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 114,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: github-actions\n    directory: '/'\n    schedule:\n      interval: weekly\n"
  },
  {
    "path": ".github/workflows/3ds.yml",
    "chars": 2487,
    "preview": "---\nname: Nintendo 3DS\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths-ignore:\n"
  },
  {
    "path": ".github/workflows/Android.yml",
    "chars": 1464,
    "preview": "name: Android\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_reques"
  },
  {
    "path": ".github/workflows/Linux_aarch64.yml",
    "chars": 3028,
    "preview": "name: Linux AArch64 (aarch64-linux-gnu)\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n     "
  },
  {
    "path": ".github/workflows/Linux_x86.yml",
    "chars": 3020,
    "preview": "name: Linux x86 (i386-linux-gnu)\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'doc"
  },
  {
    "path": ".github/workflows/Linux_x86_64.yml",
    "chars": 2829,
    "preview": "name: Linux x86_64 (x86_64-linux-gnu)\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      -"
  },
  {
    "path": ".github/workflows/Linux_x86_64_SDL1.yml",
    "chars": 1697,
    "preview": "name: Linux x64 SDL1\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull"
  },
  {
    "path": ".github/workflows/Linux_x86_64_SDL3_test.yml",
    "chars": 1662,
    "preview": "name: Linux x64 SDL3 Tests\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n"
  },
  {
    "path": ".github/workflows/Linux_x86_64_test.yml",
    "chars": 1619,
    "preview": "name: Linux x64 Tests\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pul"
  },
  {
    "path": ".github/workflows/PS4.yml",
    "chars": 1684,
    "preview": "name: PS4\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_request:\n "
  },
  {
    "path": ".github/workflows/PS5.yml",
    "chars": 1549,
    "preview": "name: PS5 (ps5-payload-dev)\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'"
  },
  {
    "path": ".github/workflows/Windows9x_MinGW.yml",
    "chars": 1754,
    "preview": "name: Windows 9x MinGW\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pu"
  },
  {
    "path": ".github/workflows/Windows_MSVC_x64.yml",
    "chars": 2097,
    "preview": "name: Windows MSVC x64\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pu"
  },
  {
    "path": ".github/workflows/Windows_MinGW_x64.yml",
    "chars": 3366,
    "preview": "name: Windows MinGW x64\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  p"
  },
  {
    "path": ".github/workflows/Windows_MinGW_x86.yml",
    "chars": 1424,
    "preview": "name: Windows MinGW x86\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  p"
  },
  {
    "path": ".github/workflows/Windows_XP_32bit.yml",
    "chars": 1596,
    "preview": "name: Windows XP MinGW\n\non:\n  release:\n    types: [published]\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  workf"
  },
  {
    "path": ".github/workflows/amiga-m68k.yml",
    "chars": 1538,
    "preview": "---\nname: Amiga M68K\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths-ignore:\n  "
  },
  {
    "path": ".github/workflows/cache-cleanup.yml",
    "chars": 1030,
    "preview": "name: Delete cache for a closed Pull Request\non:\n  pull_request:\n    types:\n      - closed\n\njobs:\n  cleanup:\n    runs-on"
  },
  {
    "path": ".github/workflows/clang-format-check.yml",
    "chars": 788,
    "preview": "name: clang-format check\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  "
  },
  {
    "path": ".github/workflows/clang-tidy-check.yml",
    "chars": 1476,
    "preview": "name: clang-tidy check\n\non:\n  push:\n    branches:\n      - master\n    paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx"
  },
  {
    "path": ".github/workflows/iOS.yml",
    "chars": 2165,
    "preview": "name: iOS\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_request:\n "
  },
  {
    "path": ".github/workflows/macOS_arm64.yml",
    "chars": 1678,
    "preview": "name: macOS arm64\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_re"
  },
  {
    "path": ".github/workflows/macOS_x86_64.yml",
    "chars": 1713,
    "preview": "name: macOS x86_64\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_r"
  },
  {
    "path": ".github/workflows/miyoo_mini_release.yml",
    "chars": 1323,
    "preview": "name: Miyoo Mini Release Build\n\non:\n  release:\n    types: [published]\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'"
  },
  {
    "path": ".github/workflows/opendingux_release.yml",
    "chars": 2699,
    "preview": "name: OpenDingux Release Build\n\non:\n  release:\n    types: [published]\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'"
  },
  {
    "path": ".github/workflows/retrofw_release.yml",
    "chars": 1548,
    "preview": "name: RetroFW Release Build\n\non:\n  release:\n    types: [published]\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  "
  },
  {
    "path": ".github/workflows/s390x_qemu_big_endian_tests.yml",
    "chars": 1409,
    "preview": "name: s390x qemu tests (big-endian)\n\n# The test suite takes ~50m to run so we only trigger it manually\non:\n  release:\n  "
  },
  {
    "path": ".github/workflows/src_dist_release.yml",
    "chars": 2261,
    "preview": "name: Build source tarball\n\non:\n  release:\n    types: [published]\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  w"
  },
  {
    "path": ".github/workflows/switch.yml",
    "chars": 1351,
    "preview": "---\nname: Nintendo Switch\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths-ignor"
  },
  {
    "path": ".github/workflows/translations.yml",
    "chars": 693,
    "preview": "name: Validate translations\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'"
  },
  {
    "path": ".github/workflows/vita.yml",
    "chars": 1516,
    "preview": "---\nname: Sony PlayStation Vita\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - master\n    paths"
  },
  {
    "path": ".github/workflows/xbox_nxdk.yml",
    "chars": 2029,
    "preview": "name: Xbox\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  pull_request:\n"
  },
  {
    "path": ".github/workflows/xbox_one.yml",
    "chars": 2488,
    "preview": "name: Xbox One / Series\n\non:\n  push:\n    branches:\n      - master\n    paths-ignore:\n      - '*.md'\n      - 'docs/**'\n  p"
  },
  {
    "path": ".gitignore",
    "chars": 8009,
    "preview": "# Generated by VC++ 6 builds\n/vc60.idb\n*.asm\n*.idb\n\n# macOS\n.DS_Store\n\n# CodeLite\n.CodeLite\n*.project\n*.workspace\n\n# Dev"
  },
  {
    "path": ".lldbinit",
    "chars": 199,
    "preview": "script topsrcdir = topsrcdir if \"topsrcdir\" in locals() else os.getcwd()\r\nscript sys.path.append(os.path.join(topsrcdir,"
  },
  {
    "path": "3rdParty/Lua/CMakeLists.txt",
    "chars": 1416,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
  },
  {
    "path": "3rdParty/PKWare/CMakeLists.txt",
    "chars": 103,
    "preview": "add_library(PKWare STATIC\r\n  explode.cpp\r\n  implode.cpp)\r\ntarget_include_directories(PKWare PUBLIC .)\r\n"
  },
  {
    "path": "3rdParty/PKWare/Makefile",
    "chars": 1516,
    "preview": "VC5_DIR ?= $(HOME)/DevStudio_5.10/VC\n\n# The $(VS6_DIR) directory is a copy of the \"Microsoft Visual Studio\" directory.\n#"
  },
  {
    "path": "3rdParty/PKWare/PKWare.vcxproj",
    "chars": 4593,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "3rdParty/PKWare/PKWare.vcxproj.filters",
    "chars": 1148,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "3rdParty/PKWare/Pkware.dsp",
    "chars": 2903,
    "preview": "# Microsoft Developer Studio Project File - Name=\"Pkware\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Bu"
  },
  {
    "path": "3rdParty/PKWare/explode.cpp",
    "chars": 21035,
    "preview": "/*****************************************************************************/\n/* explode.cpp                          "
  },
  {
    "path": "3rdParty/PKWare/implode.cpp",
    "chars": 32106,
    "preview": "/*****************************************************************************/\n/* implode.cpp                          "
  },
  {
    "path": "3rdParty/PKWare/pkware.h",
    "chars": 7583,
    "preview": "/*****************************************************************************/\n/* pkware.h                             "
  },
  {
    "path": "3rdParty/PicoSHA2/picosha2.h",
    "chars": 13017,
    "preview": "/*\nThe MIT License (MIT)\n\nCopyright (C) 2017 okdshin\n\nPermission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "3rdParty/SDL2/CMake/FindSDL2.cmake",
    "chars": 715,
    "preview": "if(UWP_LIB AND NOT TARGET SDL2::SDL2-static)\r\n  set(SDL_BUILD_TYPE \"Release\")\r\n\r\n  if(CMAKE_BUILD_TYPE MATCHES \"Debug\")\r"
  },
  {
    "path": "3rdParty/SDL2/CMakeLists.txt",
    "chars": 914,
    "preview": "if(DEVILUTIONX_STATIC_SDL2)\r\n  set(BUILD_SHARED_LIBS OFF)\r\n  set(SDL_SHARED OFF)\r\n  set(SDL_STATIC ON)\r\n  if(PIE)\r\n    s"
  },
  {
    "path": "3rdParty/SDL3/CMakeLists.txt",
    "chars": 627,
    "preview": "if(DEVILUTIONX_STATIC_SDL3)\r\n  set(BUILD_SHARED_LIBS OFF)\r\n  set(SDL_SHARED OFF)\r\n  set(SDL_STATIC ON)\r\n  if(PIE)\r\n    s"
  },
  {
    "path": "3rdParty/SDL3_image/CMakeLists.txt",
    "chars": 1528,
    "preview": "include(functions/dependency_options)\r\n\r\nif(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)\r\n  find_package(PNG QUIET)\r\n  if(PNG_"
  },
  {
    "path": "3rdParty/SDL3_mixer/CMakeLists.txt",
    "chars": 1008,
    "preview": "include(functions/dependency_options)\r\ninclude(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r"
  },
  {
    "path": "3rdParty/SDL_audiolib/CMakeLists.txt",
    "chars": 1402,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nif(DEVILUTIONX_STATIC_SDL_AUDIOLIB)\r\n  set(BUILD_SHARED_LIBS "
  },
  {
    "path": "3rdParty/SDL_image/CMakeLists.txt",
    "chars": 1638,
    "preview": "include(functions/dependency_options)\r\n\r\nif(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)\r\n  find_package(PNG QUIET)\r\n  if(PNG_"
  },
  {
    "path": "3rdParty/SDL_image/IMG.c",
    "chars": 1659,
    "preview": "/*\r\n  SDL_image:  An example image loading library for use with SDL\r\n  Copyright (C) 1997-2021 Sam Lantinga <slouken@lib"
  },
  {
    "path": "3rdParty/SheenBidi/CMakeLists.txt",
    "chars": 368,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r"
  },
  {
    "path": "3rdParty/asio/CMakeLists.txt",
    "chars": 646,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(as"
  },
  {
    "path": "3rdParty/asio/asio_handle_exception.cpp",
    "chars": 410,
    "preview": "#include <string_view>\r\n\r\n#define ErrAsio(message) devilution::ErrDlg(\"ASIO Error\", message, __FILE__, __LINE__)\r\n\r\nname"
  },
  {
    "path": "3rdParty/asio/asio_handle_exception.hpp",
    "chars": 308,
    "preview": "#pragma once\r\n\r\n#include <asio/detail/throw_exception.hpp>\r\n\r\nnamespace asio::detail {\r\n\r\nvoid fatal_exception(const cha"
  },
  {
    "path": "3rdParty/benchmark/CMakeLists.txt",
    "chars": 463,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nFetchContent_Declare_ExcludeFromAll(\r\n  benchmark\r\n  URL http"
  },
  {
    "path": "3rdParty/bzip2/CMakeLists.txt",
    "chars": 907,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\n\r\nFetchContent_Declare_ExcludeFromAll("
  },
  {
    "path": "3rdParty/bzip2/bz_internal_error.c",
    "chars": 119,
    "preview": "#include <stdio.h>\r\n\r\nvoid bz_internal_error(int errcode) {\r\n  fprintf(stderr, \"BZip2 fatal error %d\\n\", errcode);\r\n}\r\n"
  },
  {
    "path": "3rdParty/discord/.editorconfig",
    "chars": 29,
    "preview": "[*.patch]\r\nend_of_line = lf\r\n"
  },
  {
    "path": "3rdParty/discord/CMakeLists.txt",
    "chars": 2136,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nfind_package(Patch REQUIRED)\r\n\r\nset(Di"
  },
  {
    "path": "3rdParty/discord/fixes.patch",
    "chars": 24722,
    "preview": "From 767aff84177e8805933ac4f980d9fc36a8b02af6 Mon Sep 17 00:00:00 2001\nFrom: Gleb Mazovetskiy <glex.spb@gmail.com>\nDate:"
  },
  {
    "path": "3rdParty/find_steam_game/CMakeLists.txt",
    "chars": 482,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(fi"
  },
  {
    "path": "3rdParty/googletest/CMakeLists.txt",
    "chars": 476,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nFetchContent_Declare_ExcludeFromAll(\r\n  googletest\r\n  URL htt"
  },
  {
    "path": "3rdParty/libfmt/CMakeLists.txt",
    "chars": 1339,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nif(NOT WIN32 AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQ"
  },
  {
    "path": "3rdParty/libmpq/CMakeLists.txt",
    "chars": 1200,
    "preview": "if(NOT TARGET ZLIB::ZLIB)\r\n  find_package(ZLIB REQUIRED)\r\nendif()\r\n\r\nif(NOT TARGET BZip2::BZip2)\r\n  find_package(BZip2 R"
  },
  {
    "path": "3rdParty/libmpq/config.h",
    "chars": 25,
    "preview": "#define VERSION \"0.4.2\"\r\n"
  },
  {
    "path": "3rdParty/libpng/CMakeLists.txt",
    "chars": 1187,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
  },
  {
    "path": "3rdParty/libsmackerdec/CMakeLists.txt",
    "chars": 1187,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(li"
  },
  {
    "path": "3rdParty/libsodium/CMakeLists.txt",
    "chars": 594,
    "preview": "if(NOT DEVILUTIONX_SYSTEM_LIBSODIUM)\r\n  include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n  set(SODIUM_MINIMAL "
  },
  {
    "path": "3rdParty/libzt/CMakeLists.txt",
    "chars": 1359,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nset(BUILD_HOST_SELFTEST OFF)\r\n\r\ninclude(FetchContent)\r\nFetchC"
  },
  {
    "path": "3rdParty/magic_enum/CMakeLists.txt",
    "chars": 318,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nFetchContent_Declare_ExcludeFromAll(ma"
  },
  {
    "path": "3rdParty/sol2/CMakeLists.txt",
    "chars": 1107,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(SOL2_ENABLE_INSTALL OFF)\r\nset(SOL2"
  },
  {
    "path": "3rdParty/sol2/sol_config/sol/config.hpp",
    "chars": 202,
    "preview": "#pragma once\r\n\r\n#define SOL_SAFE_USERTYPE 1\r\n#define SOL_SAFE_REFERENCES 1\r\n#define SOL_SAFE_FUNCTION_CALLS 1\r\n#define S"
  },
  {
    "path": "3rdParty/sol2/sol_config/sol/debug.hpp",
    "chars": 959,
    "preview": "#pragma once\r\n\r\n// sol2 uses std::cout for debug logging by default.\r\n// We want to use SDL logging instead for better c"
  },
  {
    "path": "3rdParty/tl/CMakeLists.txt",
    "chars": 97,
    "preview": "add_library(tl INTERFACE)\r\n\r\ntarget_include_directories(tl INTERFACE ${CMAKE_CURRENT_LIST_DIR})\r\n"
  },
  {
    "path": "3rdParty/tl/expected.hpp",
    "chars": 92765,
    "preview": "///\n// expected - An implementation of std::expected with extensions\n// Written in 2017 by Sy Brand (tartanllama@gmail.c"
  },
  {
    "path": "3rdParty/tl/function_ref.hpp",
    "chars": 7483,
    "preview": "///\r\n// function_ref - A low-overhead non-owning function\r\n// Written in 2017 by Simon Brand (@TartanLlama)\r\n//\r\n// To t"
  },
  {
    "path": "3rdParty/tolk/CMakeLists.txt",
    "chars": 861,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
  },
  {
    "path": "3rdParty/unordered_dense/0001-Disable-PMR-support-for-mingw-std-threads-compat.patch",
    "chars": 1084,
    "preview": "From 78eb7bc8a64099235daa3a8cb249a5ce35a4db07 Mon Sep 17 00:00:00 2001\nFrom: Gleb Mazovetskiy <glex.spb@gmail.com>\nDate:"
  },
  {
    "path": "3rdParty/unordered_dense/CMakeLists.txt",
    "chars": 790,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(unordered_dense_URL \"https://githu"
  },
  {
    "path": "3rdParty/zlib/CMake/FindZLIB.cmake",
    "chars": 43,
    "preview": "# No-op, ZLIB::ZLIB is built from source.\r\n"
  },
  {
    "path": "3rdParty/zlib/CMakeLists.txt",
    "chars": 1247,
    "preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nset(CMAKE_POLICY_DEFAULT_CMP0048 NEW)\r\n\r\ninclude(FetchContent"
  },
  {
    "path": "Brewfile",
    "chars": 139,
    "preview": "brew \"cmake\"\r\nbrew \"fmt\"\r\nbrew \"sdl2\"\r\nbrew \"libsodium\"\r\nbrew \"pkg-config\"\r\nbrew \"googletest\"\r\nbrew \"google-benchmark\"\r\n"
  },
  {
    "path": "CMake/Assets.cmake",
    "chars": 9233,
    "preview": "include(functions/copy_files)\r\ninclude(functions/trim_retired_files)\r\n\r\nif(NOT DEFINED DEVILUTIONX_ASSETS_OUTPUT_DIRECTO"
  },
  {
    "path": "CMake/Definitions.cmake",
    "chars": 2500,
    "preview": "# Defines without value\r\nforeach(\r\n  def_name\r\n  NOSOUND\r\n  NONET\r\n  NOEXIT\r\n  PREFILL_PLAYER_NAME\r\n  DISABLE_TCP\r\n  DIS"
  },
  {
    "path": "CMake/Dependencies.cmake",
    "chars": 11550,
    "preview": "# Options that control whether to use system dependencies or build them from source,\r\n# and whether to link them statica"
  },
  {
    "path": "CMake/Mods.cmake",
    "chars": 2689,
    "preview": "include(functions/copy_files)\r\ninclude(functions/trim_retired_files)\r\n\r\nif(NOT DEFINED DEVILUTIONX_MODS_OUTPUT_DIRECTORY"
  },
  {
    "path": "CMake/MoldLinker.cmake",
    "chars": 1101,
    "preview": "if(NOT CMAKE_CROSSCOMPILING)\r\n  find_program(\r\n    LD_MOLD_PATH\r\n    ld\r\n    PATHS\r\n    ${CMAKE_INSTALL_PREFIX}/libexec/"
  },
  {
    "path": "CMake/Platforms.cmake",
    "chars": 3068,
    "preview": "if(HAIKU)\r\n  include(platforms/haiku)\r\nendif()\r\n\r\nif(CMAKE_SYSTEM_NAME MATCHES \"FreeBSD|OpenBSD|DragonFly|NetBSD\")\r\n  if"
  },
  {
    "path": "CMake/Tests.cmake",
    "chars": 7263,
    "preview": "include(GoogleTest)\r\ninclude(functions/copy_files)\r\n\r\nadd_library(libdevilutionx_so SHARED)\r\nset_target_properties(libde"
  },
  {
    "path": "CMake/VcPkgManifestFeatures.cmake",
    "chars": 506,
    "preview": "# See https://vcpkg.readthedocs.io/en/latest/users/manifests/\r\nif(USE_SDL1)\r\n  list(APPEND VCPKG_MANIFEST_FEATURES \"sdl1"
  },
  {
    "path": "CMake/finders/FindGperftools.cmake",
    "chars": 1621,
    "preview": "# Based on https://github.com/baidu/braft/blob/e7776cd03ccc04f18d0f0911200617a89ac3cdf0/cmake/FindGperftools.cmake\r\n\r\n# "
  },
  {
    "path": "CMake/finders/FindSDL2_image.cmake",
    "chars": 1309,
    "preview": "find_package(SDL2_image CONFIG)\r\n\r\nif(TARGET SDL2_image::SDL2_image)\r\n  if(NOT TARGET SDL2::SDL2_image)\r\n    add_library"
  },
  {
    "path": "CMake/finders/FindSDL_audiolib.cmake",
    "chars": 1099,
    "preview": "find_package(PkgConfig)\npkg_check_modules(PC_SDL_audiolib QUIET SDL_audiolib)\n\nfind_path(SDL_audiolib_INCLUDE_DIR aulib."
  },
  {
    "path": "CMake/finders/FindSpeechd.cmake",
    "chars": 770,
    "preview": "# find speech-dispatcher library and header if available\n# Copyright (c) 2009, Jeremy Whiting <jpwhiting@kde.org>\n# Copy"
  },
  {
    "path": "CMake/finders/Findsimpleini.cmake",
    "chars": 2032,
    "preview": "find_package(PkgConfig QUIET)\r\nif(PKG_CONFIG_FOUND)\r\n  pkg_check_modules(PC_simpleini QUIET simpleini)\r\nendif()\r\n\r\nfind_"
  },
  {
    "path": "CMake/finders/Findsodium.cmake",
    "chars": 10413,
    "preview": "# Written in 2016 by Henrik Steffen Gaßmann <henrik@gassmann.onl>\r\n#\r\n# To the extent possible under law, the author(s) "
  },
  {
    "path": "CMake/functions/FetchContent_ExcludeFromAll_backport.cmake",
    "chars": 932,
    "preview": "if(CMAKE_VERSION VERSION_LESS \"3.28.0\")\r\n  macro(FetchContent_Declare_ExcludeFromAll)\r\n    FetchContent_Declare(${ARGV})"
  },
  {
    "path": "CMake/functions/copy_files.cmake",
    "chars": 1109,
    "preview": "\r\n# copy_files(\r\n#   FILES <file...>\r\n#   OUTPUT_DIR <output_dir>\r\n#   [SRC_PREFIX <src_prefix>]\r\n#   [OUTPUT_VARIABLE <"
  },
  {
    "path": "CMake/functions/dependency_options.cmake",
    "chars": 1400,
    "preview": "# This function defines 2 options for finding and linking a dependency:\r\n#\r\n# 1. ${SYSTEM_OPTION_NAME}: whether to use t"
  },
  {
    "path": "CMake/functions/devilutionx_library.cmake",
    "chars": 2801,
    "preview": "include(functions/genex)\r\ninclude(functions/set_relative_file_macro)\r\ninclude(functions/object_libraries)\r\n\r\n# This func"
  },
  {
    "path": "CMake/functions/emscripten_system_library.cmake",
    "chars": 723,
    "preview": "# This function defines a target that points to an Emscripten system library.\r\n#\r\n# Arguments:\r\n#   LIB_NAME: a human-re"
  },
  {
    "path": "CMake/functions/genex.cmake",
    "chars": 1926,
    "preview": "# Generator expression helpers\r\n\r\n# If \"NEW\", `set(CACHE ...)` does not override non-cache variables\r\nif(POLICY CMP0126)"
  },
  {
    "path": "CMake/functions/git.cmake",
    "chars": 305,
    "preview": "function(get_git_commit_hash output_var)\r\n  execute_process(\r\n    COMMAND git log -1 --format=%h\r\n    WORKING_DIRECTORY "
  },
  {
    "path": "CMake/functions/object_libraries.cmake",
    "chars": 5460,
    "preview": "# CMake has limited support for object libraries.\r\n#\r\n# The main limitation of CMake object libraries is the lack\r\n# of "
  },
  {
    "path": "CMake/functions/set_relative_file_macro.cmake",
    "chars": 787,
    "preview": "# Sets the __FILE__ macro value to be relative to CMAKE_SOURCE_DIR.\r\nfunction(set_relative_file_macro TARGET)\r\n  if(NOT "
  },
  {
    "path": "CMake/functions/trim_retired_files.cmake",
    "chars": 2186,
    "preview": "set(SCRIPT_CONTENT [=[\r\ninclude(functions/trim_retired_files)\r\ntrim_retired_files(\"${ROOT_FOLDER}\" \"${CURRENT_FILES}\" \"$"
  },
  {
    "path": "CMake/platforms/.editorconfig",
    "chars": 41,
    "preview": "[ios.toolchain.cmake]\r\nend_of_line = lf\r\n"
  },
  {
    "path": "CMake/platforms/aarch64-linux-gnu-clang-static-libc++.toolchain.cmake",
    "chars": 1007,
    "preview": "set(CMAKE_SYSTEM_NAME Linux)\r\nset(CMAKE_SYSTEM_PROCESSOR aarch64)\r\n\r\nset(triple aarch64-linux-gnu)\r\n\r\nset(CMAKE_C_COMPIL"
  },
  {
    "path": "CMake/platforms/aarch64-linux-gnu.toolchain.cmake",
    "chars": 700,
    "preview": "set(CMAKE_SYSTEM_NAME Linux)\r\nset(CMAKE_SYSTEM_PROCESSOR aarch64)\r\n\r\nset(CMAKE_C_COMPILER \"/usr/bin/aarch64-linux-gnu-gc"
  },
  {
    "path": "CMake/platforms/amiga.cmake",
    "chars": 721,
    "preview": "set(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(NONET ON)\r\nset(USE_SDL1 ON)\r\nset(SDL1_VIDEO_MODE_BPP 8)\r\n\r\nse"
  },
  {
    "path": "CMake/platforms/android.cmake",
    "chars": 1007,
    "preview": "# General build options.\r\nset(BUILD_TESTING OFF)\r\n\r\n# Disable all system dependencies.\r\n# All of these will be fetched v"
  },
  {
    "path": "CMake/platforms/cpigamesh.cmake",
    "chars": 831,
    "preview": "set(BUILD_TESTING OFF)\r\nset(NONET ON)\r\nset(PREFILL_PLAYER_NAME ON)\r\nset(HAS_KBCTRL 1)\r\nset(LTO ON)\r\nset(DIST ON)\r\nset(DE"
  },
  {
    "path": "CMake/platforms/ctr/Tools3DS.cmake",
    "chars": 20280,
    "preview": "############################################################################\r\n# Various macros for 3DS homebrews tools\r\n"
  },
  {
    "path": "CMake/platforms/ctr/asio_defs.cmake",
    "chars": 263,
    "preview": "target_compile_definitions(asio INTERFACE\r\n  ASIO_DISABLE_THREADS=ON\r\n  ASIO_HAS_UNISTD_H=ON)\r\n\r\n# Missing headers and d"
  },
  {
    "path": "CMake/platforms/ctr/bin2s_header.h.in",
    "chars": 119,
    "preview": "extern const u8 @__BIN_FILE_NAME@_end[];\nextern const u8 @__BIN_FILE_NAME@[];\nextern const u32 @__BIN_FILE_NAME@_size;\n"
  },
  {
    "path": "CMake/platforms/ctr/modules/FindCITRO3D.cmake",
    "chars": 2319,
    "preview": "# - Try to find citro3d\r\n# You can set CITRO3D_ROOT to specify a certain directory to look in first.\r\n# Once done this w"
  },
  {
    "path": "CMake/platforms/ctr/modules/FindCTRULIB.cmake",
    "chars": 1846,
    "preview": "# - Try to find ctrulib\r\n# Once done this will define\r\n#  LIBCTRU_FOUND - System has ctrulib\r\n#  LIBCTRU_INCLUDE_DIRS - "
  },
  {
    "path": "CMake/platforms/ctr/modules/FindPNG.cmake",
    "chars": 2156,
    "preview": "# - Try to find png\r\n# You can set PNG_ROOT to specify a certain directory to look in first.\r\n# Once done this will defi"
  },
  {
    "path": "CMake/platforms/ctr/modules/FindZLIB.cmake",
    "chars": 1972,
    "preview": "# - Try to find zlib\r\n# You can set ZLIB_ROOT to specify a certain directory to look in first.\r\n# Once done this will de"
  },
  {
    "path": "CMake/platforms/ctr/modules/LibFindMacros.cmake",
    "chars": 10968,
    "preview": "# Version 2.2\r\n# Public Domain, originally written by Lasse Kärkkäinen <tronic>\r\n# Maintained at https://github.com/Tron"
  },
  {
    "path": "CMake/platforms/ctr/modules/try_add_imported_target.cmake",
    "chars": 566,
    "preview": "macro(try_add_imported_target LIBNAME)\r\n  string(TOLOWER ${LIBNAME} ${LIBNAME}_lwr)\r\n  set(${LIBNAME}_TARGET 3ds::${${LI"
  },
  {
    "path": "CMake/platforms/debian-cross-pkg-config.sh",
    "chars": 2241,
    "preview": "#!/bin/sh\n# pkg-config wrapper for cross-building\n# Sets pkg-config search path to search multiarch and historical cross"
  },
  {
    "path": "CMake/platforms/djcpp.toolchain.cmake",
    "chars": 981,
    "preview": "set(CMAKE_SYSTEM_NAME Generic)\r\nset(CMAKE_SYSTEM_VERSION 1)\r\n\r\nif($ENV{DJGPP_PREFIX})\r\n  set(DJGPP_PREFIX \"$ENV{DJGPP_PR"
  },
  {
    "path": "CMake/platforms/dos.cmake",
    "chars": 794,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(NONET ON)\r\nset(NOSOUND ON)\r\nset(DEFAULT_PER_PIXEL_LIGHTING false)\r\n\r\n"
  },
  {
    "path": "CMake/platforms/emscripten.cmake",
    "chars": 631,
    "preview": "set(BUILD_TESTING OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB OFF)\r\n"
  },
  {
    "path": "CMake/platforms/gkd350h.cmake",
    "chars": 1669,
    "preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(USE_SDL1 ON)\r\n\r\n# Do not warn about unknown attributes, such a"
  },
  {
    "path": "CMake/platforms/haiku.cmake",
    "chars": 131,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DEVILUTIONX_STATIC_CXX_STDLIB OFF)\r\n\r\nlist(APPEND DEVILUTIONX_PLATFORM_LINK_LIBRARIES"
  },
  {
    "path": "CMake/platforms/ios.cmake",
    "chars": 523,
    "preview": "enable_language(OBJC)\r\n\r\n# General build options.\r\nset(BUILD_TESTING OFF)\r\n\r\n# Disable all system dependencies.\r\n# All o"
  },
  {
    "path": "CMake/platforms/ios.toolchain.cmake",
    "chars": 53321,
    "preview": "# This file is part of the ios-cmake project. It was retrieved from\n# https://github.com/leetal/ios-cmake.git, which is "
  },
  {
    "path": "CMake/platforms/lepus.cmake",
    "chars": 1893,
    "preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(USE_SDL1 ON)\r\n\r\nset(SDL1_VIDEO_MODE_BPP 8)\r\nset(SDL1_VIDEO_MODE_FLAGS SDL_HWSURFACE|SDL_T"
  },
  {
    "path": "CMake/platforms/linux_i386.toolchain.cmake",
    "chars": 1073,
    "preview": "message(STATUS \"Using 32-bit toolchain\")\r\n\r\nset(CMAKE_CXX_FLAGS -m32 CACHE STRING \"\")\r\nset(CMAKE_C_FLAGS -m32 CACHE STRI"
  },
  {
    "path": "CMake/platforms/macos_tiger.cmake",
    "chars": 607,
    "preview": "# ASAN and UBSAN are not supported by macports gcc14 on PowerPC.\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\n\r\n# SDL2 does not build"
  },
  {
    "path": "CMake/platforms/macports/finders/FindMacportsLegacySupport.cmake",
    "chars": 1293,
    "preview": "# Provides missing functions, such as localtime_r\r\nif(NOT TARGET MacportsLegacySupport::MacportsLegacySupport)\r\n  set(Ma"
  },
  {
    "path": "CMake/platforms/mingw/zt_defs.cmake",
    "chars": 1014,
    "preview": "option(MINGW_STDTHREADS_GENERATE_STDHEADERS \"\" OFF)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMAKE_P"
  },
  {
    "path": "CMake/platforms/mingw9x/include/windef.h",
    "chars": 570,
    "preview": "#ifndef _WINDEF_OVERRIDE_\r\n#define _WINDEF_OVERRIDE_\r\n\r\n#include_next <windef.h>\r\n\r\n// MinGW does not define these when "
  },
  {
    "path": "CMake/platforms/mingw9x.toolchain.cmake",
    "chars": 1250,
    "preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
  },
  {
    "path": "CMake/platforms/mingwcc.toolchain.cmake",
    "chars": 813,
    "preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
  },
  {
    "path": "CMake/platforms/mingwcc64.toolchain.cmake",
    "chars": 853,
    "preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
  },
  {
    "path": "CMake/platforms/miyoo_mini.cmake",
    "chars": 995,
    "preview": "set(USE_SDL1 ON)\r\nset(NONET ON)\r\nset(DEVILUTIONX_SYSTEM_LIBFMT OFF)\r\nset(DEVILUTIONX_SYSTEM_LIBSODIUM OFF)\r\nset(DEVILUTI"
  },
  {
    "path": "CMake/platforms/n3ds.cmake",
    "chars": 2092,
    "preview": "#General compilation options\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_TESTING OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(DEVI"
  },
  {
    "path": "CMake/platforms/ps4.cmake",
    "chars": 699,
    "preview": "set(DISCORD_INTEGRATION OFF)\r\nset(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nSET(DISABLE_LTO ON)\r\nset(NONET ON)\r"
  },
  {
    "path": "CMake/platforms/retrofw.cmake",
    "chars": 766,
    "preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(NONET ON)\r\nset(USE_SDL1 ON)\r\nset(PREFILL_PLAYER_NAME ON)\r\nset(HAS_KBCTRL 1)\r\nset(DEVILUTI"
  },
  {
    "path": "CMake/platforms/rg350.cmake",
    "chars": 2033,
    "preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(USE_SDL1 ON)\r\n\r\n# LTO temporarily disabled to work around a compiler bug.\r\n# https://gith"
  },
  {
    "path": "CMake/platforms/rg99.cmake",
    "chars": 2346,
    "preview": "# RG99 has the same layout as RG300 but only 32 MiB RAM\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(UNPACKED_MPQS ON)\r\nset(UNPACKED_"
  },
  {
    "path": "CMake/platforms/switch/asio_defs.cmake",
    "chars": 298,
    "preview": "# Enables a number of header file definitions required by ASIO\r\ntarget_compile_definitions(asio INTERFACE _DEFAULT_SOURC"
  },
  {
    "path": "CMake/platforms/switch.cmake",
    "chars": 604,
    "preview": "list(APPEND CMAKE_MODULE_PATH \"${CMAKE_CURRENT_LIST_DIR}/switch\")\r\n\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_TESTING OF"
  },
  {
    "path": "CMake/platforms/threads-stub/FindThreads.cmake",
    "chars": 176,
    "preview": "# Stub out the Threads package.\r\n# Some platforms do not have a system threads library but SDL threads are supported.\r\na"
  },
  {
    "path": "CMake/platforms/uwp_lib.cmake",
    "chars": 1085,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(BUILD_TESTING OFF)\r\nset(DISCORD_INTEGRATION OFF)\r\nset(DEVI"
  },
  {
    "path": "CMake/platforms/vita.cmake",
    "chars": 561,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DEVILUTIONX_STATIC_CXX_STDLIB OFF)\r\nset(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF)\r\nset(DEVILU"
  },
  {
    "path": "CMake/platforms/windows.cmake",
    "chars": 774,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(DEVILUTIONX_PLATFORM_FILE_UTIL_LINK_LIBRARIES shlwapi)\r\nset(DEVILUTIO"
  },
  {
    "path": "CMake/platforms/windows9x.cmake",
    "chars": 1169,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(NONET ON)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(USE_SDL1 ON)\r\nset(DEVILUTIO"
  },
  {
    "path": "CMake/platforms/windowsXP.cmake",
    "chars": 904,
    "preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(DEVILUTIONX_PLATFORM_FILE_UTIL_LINK_LIBRARIES shlwapi)\r\nset(DEVILUTIO"
  },
  {
    "path": "CMake/platforms/xbox_nxdk/finders/FindPNG.cmake",
    "chars": 174,
    "preview": "if(NOT TARGET PNG::PNG)\r\n  find_package(PkgConfig REQUIRED)\r\n  pkg_check_modules(PNG REQUIRED IMPORTED_TARGET libpng)\r\n "
  },
  {
    "path": "CMake/platforms/xbox_nxdk/finders/FindSDL2.cmake",
    "chars": 265,
    "preview": "if(NOT TARGET SDL2::SDL2)\r\n  find_package(PkgConfig REQUIRED)\r\n  pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2)\r\n"
  },
  {
    "path": "CMake/platforms/xbox_nxdk/finders/FindZLIB.cmake",
    "chars": 178,
    "preview": "if(NOT TARGET ZLIB::ZLIB)\r\n  find_package(PkgConfig REQUIRED)\r\n  pkg_check_modules(ZLIB REQUIRED IMPORTED_TARGET zlib)\r\n"
  },
  {
    "path": "CMake/platforms/xbox_nxdk.cmake",
    "chars": 611,
    "preview": "set(NONET ON)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\n\r\nlist(APPEND CMAKE_MODULE_PATH \"${CMAKE_CURRENT_LIST_DIR}/xbox_nxdk/finde"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 27793,
    "preview": "cmake_minimum_required(VERSION 3.22)\r\n\r\nforeach(_policy CMP0135 CMP0141)\r\n  if(POLICY ${_policy})\r\n    cmake_policy(SET "
  },
  {
    "path": "CMakeSettings.json",
    "chars": 4803,
    "preview": "{\r\n  \"configurations\": [\r\n    {\r\n      \"name\": \"x64-Debug\",\r\n      \"generator\": \"Ninja\",\r\n      \"configurationType\": \"De"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5225,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "LICENSE.md",
    "chars": 3599,
    "preview": "# Sustainable Use License\n\nVersion 1.0\n\n## Acceptance\n\nBy using the software, you agree to all of the terms and conditio"
  },
  {
    "path": "Packaging/OpenDingux/.editorconfig",
    "chars": 116,
    "preview": "[*]\nindent_style = tab\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": "Packaging/OpenDingux/.gitignore",
    "chars": 6,
    "preview": "/tmp/\n"
  },
  {
    "path": "Packaging/OpenDingux/README.md",
    "chars": 76,
    "preview": "# DevilutionX OpenDingux Port\n\nSee docs/building.md for build instructions.\n"
  },
  {
    "path": "Packaging/OpenDingux/build-all.sh",
    "chars": 209,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")/../..\"\n\nsource Packaging/OpenDingux/targets.s"
  },
  {
    "path": "Packaging/OpenDingux/build.sh",
    "chars": 6338,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")/../..\"\n\nsource Packaging/OpenDingux/targets.s"
  },
  {
    "path": "Packaging/OpenDingux/devilutionx-from-disk.sh",
    "chars": 733,
    "preview": "#!/bin/sh\n\n# Unpacks the mounted OPK to disk before running it\n# in order to avoid the memory overhead of squashfs.\n\nOPK"
  },
  {
    "path": "Packaging/OpenDingux/devilutionx-umount-opk-and-run.sh",
    "chars": 60,
    "preview": "#!/bin/sh\n\nset -x\necho | sudo -S umount -l \"$PWD\"\nexec \"$@\"\n"
  },
  {
    "path": "Packaging/OpenDingux/gkd350h-manual.txt",
    "chars": 1723,
    "preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n/usr/local/home/.local/share/diasurgical/devilution/\n\nFor Hell"
  },
  {
    "path": "Packaging/OpenDingux/gkd350h.desktop",
    "chars": 216,
    "preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for GKD350h\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNo"
  },
  {
    "path": "Packaging/OpenDingux/lepus-manual.txt",
    "chars": 1431,
    "preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
  },
  {
    "path": "Packaging/OpenDingux/lepus.desktop",
    "chars": 244,
    "preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for OpenDingux\nExec=devilutionx\nTerminal=false\nType=Application\nStartu"
  },
  {
    "path": "Packaging/OpenDingux/package-opk.sh",
    "chars": 1343,
    "preview": "#!/usr/bin/env bash\n\ndeclare OPK_DESKTOP_NAME\ndeclare OPK_DESKTOP_EXEC\ndeclare -a OPK_EXTRA_FILES\n\npackage_opk() {\n\tloca"
  },
  {
    "path": "Packaging/OpenDingux/profile-generate.sh",
    "chars": 408,
    "preview": "#!/bin/sh\n\nset -x\n\nSAVE_DIR=\"$(mktemp -d)\"\ncp \"${PWD}/demo_0_reference_spawn_0_sv\" \"${SAVE_DIR}/\"\ncp \"${PWD}/demo_0.dmo\""
  },
  {
    "path": "Packaging/OpenDingux/retrofw-manual.txt",
    "chars": 1374,
    "preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution\n\nFor Hellfire, also copy"
  },
  {
    "path": "Packaging/OpenDingux/retrofw.desktop",
    "chars": 243,
    "preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RetroFW\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNo"
  },
  {
    "path": "Packaging/OpenDingux/rg350-manual.txt",
    "chars": 1612,
    "preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
  },
  {
    "path": "Packaging/OpenDingux/rg350.desktop",
    "chars": 238,
    "preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RG350\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNoti"
  },
  {
    "path": "Packaging/OpenDingux/rg99-manual.txt",
    "chars": 1262,
    "preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
  },
  {
    "path": "Packaging/OpenDingux/rg99-pgo.md",
    "chars": 2637,
    "preview": "# RG99 profile-guided optimization\n\nThe RG99 build must be PGO'd for reasonable performance.\n\nHere are the instructions "
  },
  {
    "path": "Packaging/OpenDingux/rg99.desktop",
    "chars": 213,
    "preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RG99\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNotif"
  },
  {
    "path": "Packaging/OpenDingux/targets.sh",
    "chars": 437,
    "preview": "declare -ra VALID_TARGETS=(\n  lepus\n  retrofw\n  rg99\n  rg350\n  gkd350h\n)\n\nusage_target() {\n  echo -n \"\ttarget: target pl"
  },
  {
    "path": "Packaging/amiga/Dockerfile",
    "chars": 453,
    "preview": "FROM amigadev/crosstools:m68k-amigaos-gcc10\n\nRUN apt-get update && apt-get install --no-install-recommends -y smpq\nRUN m"
  },
  {
    "path": "Packaging/amiga/prep.sh",
    "chars": 882,
    "preview": "#!/usr/bin/env bash\n\n# exit when any command fails\nset -euo pipefail\n\n#set compiler params\nexport TARGET='m68k-amigaos'\n"
  },
  {
    "path": "Packaging/apple/Info.plist",
    "chars": 2502,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Packaging/apple/LaunchScreen.storyboard",
    "chars": 1736,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "Packaging/apple/png2icns_tiger/.gitignore",
    "chars": 9,
    "preview": "/build*/\n"
  },
  {
    "path": "Packaging/apple/png2icns_tiger/CMakeLists.txt",
    "chars": 404,
    "preview": "# On Debian/Ubuntu, this requires libpng-dev and libicns-dev\ncmake_minimum_required(VERSION 3.22)\nproject(png2icns_tiger"
  },
  {
    "path": "Packaging/apple/png2icns_tiger/png2icns_tiger.c",
    "chars": 8746,
    "preview": "/*\n * png2icns_tiger - based on png2icns from the pngutils Debian package but\n * modified for Tiger support. See the sec"
  }
]

// ... and 1143 more files (download for full content)

About this extraction

This page contains the full source code of the diasurgical/DevilutionX GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1343 files (14.3 MB), approximately 3.8M tokens, and a symbol index with 6711 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!