diff --git a/CMakeLists.txt b/CMakeLists.txt index c975094f..13eb48dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,168 +6,309 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if (MSVC) set(TARGET_COMPILE_OPTIONS - /W4 + /W4 ) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/build) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/build) else() set(TARGET_COMPILE_OPTIONS - -Wall -Wextra -pedantic + -Wall -Wextra -pedantic ) -endif() +endif () if (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # see https://github.com/ntut-open-source-club/practical-tools-for-simple-design/issues/22 set(CMAKE_RC_FLAGS="-C 1252") -endif() +endif () option(PTSD_ENABLE_PCH "Turn on PCH to increase compilation speed" OFF) + +## yaml +include(FetchContent) + +FetchContent_Declare( + yaml-cpp + GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git + # Can be a tag (yaml-cpp-x.x.x), a commit hash, or a branch name (master) +) +FetchContent_GetProperties(yaml-cpp) + +if (NOT yaml-cpp_POPULATED) + message(STATUS "Fetching yaml-cpp...") + FetchContent_Populate(yaml-cpp) + add_subdirectory(${yaml-cpp_SOURCE_DIR} ${yaml-cpp_BINARY_DIR}) +endif () + + include(cmake/Dependencies.cmake) set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(SRC_FILES - ${SRC_DIR}/Core/Context.cpp - ${SRC_DIR}/Core/DebugMessageCallback.cpp - ${SRC_DIR}/Core/VertexArray.cpp - ${SRC_DIR}/Core/VertexBuffer.cpp - ${SRC_DIR}/Core/IndexBuffer.cpp - ${SRC_DIR}/Core/Shader.cpp - ${SRC_DIR}/Core/Program.cpp - ${SRC_DIR}/Core/Texture.cpp - ${SRC_DIR}/Core/TextureUtils.cpp - - ${SRC_DIR}/Util/LoadTextFile.cpp - ${SRC_DIR}/Util/Logger.cpp - ${SRC_DIR}/Util/Time.cpp - ${SRC_DIR}/Util/Input.cpp - ${SRC_DIR}/Util/SFX.cpp - ${SRC_DIR}/Util/BGM.cpp - ${SRC_DIR}/Util/Image.cpp - ${SRC_DIR}/Util/Text.cpp - ${SRC_DIR}/Util/TransformUtils.cpp - ${SRC_DIR}/Util/GameObject.cpp - ${SRC_DIR}/Util/Renderer.cpp - ${SRC_DIR}/Util/Color.cpp - ${SRC_DIR}/Util/Animation.cpp - ${SRC_DIR}/Util/MissingTexture.cpp - - ${SRC_DIR}/App.cpp - ${SRC_DIR}/Giraffe.cpp - ${SRC_DIR}/GiraffeText.cpp - ${SRC_DIR}/Cat.cpp + ${SRC_DIR}/Core/Context.cpp + ${SRC_DIR}/Core/DebugMessageCallback.cpp + ${SRC_DIR}/Core/VertexArray.cpp + ${SRC_DIR}/Core/VertexBuffer.cpp + ${SRC_DIR}/Core/IndexBuffer.cpp + ${SRC_DIR}/Core/Shader.cpp + ${SRC_DIR}/Core/Program.cpp + ${SRC_DIR}/Core/Texture.cpp + ${SRC_DIR}/Core/TextureUtils.cpp + + + ${SRC_DIR}/Util/LoadTextFile.cpp + ${SRC_DIR}/Util/Logger.cpp + ${SRC_DIR}/Util/Time.cpp + ${SRC_DIR}/Util/Input.cpp + ${SRC_DIR}/Util/SFX.cpp + ${SRC_DIR}/Util/BGM.cpp + ${SRC_DIR}/Util/Image.cpp + ${SRC_DIR}/Util/Text.cpp + ${SRC_DIR}/Util/TransformUtils.cpp + ${SRC_DIR}/Util/GameObject.cpp + ${SRC_DIR}/Util/Renderer.cpp + ${SRC_DIR}/Util/Color.cpp + ${SRC_DIR}/Util/Animation.cpp + ${SRC_DIR}/Util/MissingTexture.cpp + + ${SRC_DIR}/Util/ImageArray.cpp + ${SRC_DIR}/Util/CustomizableImage.cpp + + ${SRC_DIR}/imgui/imgui.cpp + ${SRC_DIR}/imgui/imgui_demo.cpp + ${SRC_DIR}/imgui/imgui_draw.cpp + ${SRC_DIR}/imgui/imgui_impl_sdl2.cpp + ${SRC_DIR}/imgui/imgui_tables.cpp + ${SRC_DIR}/imgui/imgui_widgets.cpp + ${SRC_DIR}/imgui/imgui_impl_sdlrenderer2.cpp + ${SRC_DIR}/imgui/imgui_impl_opengl3.cpp + + ${SRC_DIR}/App.cpp + ${SRC_DIR}/Grid.cpp + + ${SRC_DIR}/Structure/Structure.cpp + ${SRC_DIR}/Structure/WayPoint.cpp + ${SRC_DIR}/Structure/HighLight.cpp + ${SRC_DIR}/UI/UIScriptProcess.cpp + + ${SRC_DIR}/Structure/Barracks.cpp + ${SRC_DIR}/Structure/OreRefinery.cpp + ${SRC_DIR}/Structure/PowerPlants.cpp + ${SRC_DIR}/Structure/WarFactory.cpp + + ${SRC_DIR}/Scene/MapScene.cpp + + ${SRC_DIR}/Structure/WayPointStructure.cpp + + ${SRC_DIR}/Unit/PathfindingUnit.cpp + ${SRC_DIR}/Unit/Runner.cpp + ${SRC_DIR}/Unit/Hunter.cpp + + ${SRC_DIR}/Scene/DefaultScene.cpp + ${SRC_DIR}/Camera.cpp + ${SRC_DIR}/SpriteSheet.cpp + ${SRC_DIR}/UI/UI.cpp + ${SRC_DIR}/GameObjectID.cpp + ${SRC_DIR}/Map/YAMLReader.cpp + ${SRC_DIR}/Map/TerrainConfig.cpp + ${SRC_DIR}/Map/MapbinReader.cpp + ${SRC_DIR}/Map/Map.cpp + ) set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) set(INCLUDE_FILES - ${INCLUDE_DIR}/Core/Context.hpp - ${INCLUDE_DIR}/Core/DebugMessageCallback.hpp - ${INCLUDE_DIR}/Core/VertexArray.hpp - ${INCLUDE_DIR}/Core/VertexBuffer.hpp - ${INCLUDE_DIR}/Core/UniformBuffer.hpp - ${INCLUDE_DIR}/Core/UniformBuffer.inl - ${INCLUDE_DIR}/Core/IndexBuffer.hpp - ${INCLUDE_DIR}/Core/Shader.hpp - ${INCLUDE_DIR}/Core/Program.hpp - ${INCLUDE_DIR}/Core/Texture.hpp - ${INCLUDE_DIR}/Core/TextureUtils.hpp - ${INCLUDE_DIR}/Core/Drawable.hpp - - ${INCLUDE_DIR}/Util/LoadTextFile.hpp - ${INCLUDE_DIR}/Util/Logger.hpp - ${INCLUDE_DIR}/Util/Time.hpp - ${INCLUDE_DIR}/Util/Input.hpp - ${INCLUDE_DIR}/Util/Keycode.hpp - ${INCLUDE_DIR}/Util/SFX.hpp - ${INCLUDE_DIR}/Util/BGM.hpp - ${INCLUDE_DIR}/Util/Image.hpp - ${INCLUDE_DIR}/Util/Text.hpp - ${INCLUDE_DIR}/Util/Transform.hpp - ${INCLUDE_DIR}/Util/TransformUtils.hpp - ${INCLUDE_DIR}/Util/GameObject.hpp - ${INCLUDE_DIR}/Util/Renderer.hpp - ${INCLUDE_DIR}/Util/Color.hpp - ${INCLUDE_DIR}/Util/TransparentImage.hpp - ${INCLUDE_DIR}/Util/Base64.hpp - ${INCLUDE_DIR}/Util/Animation.hpp - - ${INCLUDE_DIR}/App.hpp - ${INCLUDE_DIR}/Giraffe.hpp - ${INCLUDE_DIR}/GiraffeText.hpp - ${INCLUDE_DIR}/Cat.hpp - ${INCLUDE_DIR}/config.hpp + ${INCLUDE_DIR}/Map/Map.hpp + ${INCLUDE_DIR}/Map/MapUtility.hpp + ${INCLUDE_DIR}/Util/AssetStore.hpp + ${INCLUDE_DIR}/Map/MapbinReader.hpp + ${INCLUDE_DIR}/Map/YAMLReader.hpp + + ${INCLUDE_DIR}/Core/Context.hpp + ${INCLUDE_DIR}/Core/DebugMessageCallback.hpp + ${INCLUDE_DIR}/Core/VertexArray.hpp + ${INCLUDE_DIR}/Core/VertexBuffer.hpp + ${INCLUDE_DIR}/Core/UniformBuffer.hpp + ${INCLUDE_DIR}/Core/UniformBuffer.inl + ${INCLUDE_DIR}/Core/IndexBuffer.hpp + ${INCLUDE_DIR}/Core/Shader.hpp + ${INCLUDE_DIR}/Core/Program.hpp + ${INCLUDE_DIR}/Core/Texture.hpp + ${INCLUDE_DIR}/Core/TextureUtils.hpp + ${INCLUDE_DIR}/Core/Drawable.hpp + ${INCLUDE_DIR}/Structure/WayPointStructure.hpp + + + ${INCLUDE_DIR}/Util/LoadTextFile.hpp + ${INCLUDE_DIR}/Util/Logger.hpp + ${INCLUDE_DIR}/Util/Time.hpp + ${INCLUDE_DIR}/Util/Input.hpp + ${INCLUDE_DIR}/Util/Keycode.hpp + ${INCLUDE_DIR}/Util/SFX.hpp + ${INCLUDE_DIR}/Util/BGM.hpp + ${INCLUDE_DIR}/Util/Image.hpp + ${INCLUDE_DIR}/Util/Text.hpp + ${INCLUDE_DIR}/Util/Transform.hpp + ${INCLUDE_DIR}/Util/TransformUtils.hpp + ${INCLUDE_DIR}/Util/GameObject.hpp + ${INCLUDE_DIR}/Util/Renderer.hpp + ${INCLUDE_DIR}/Util/Color.hpp + ${INCLUDE_DIR}/Util/Animation.hpp + ${INCLUDE_DIR}/Util/MissingTexture.hpp + + ${INCLUDE_DIR}/Util/ImageArray.hpp + ${INCLUDE_DIR}/Util/CustomizableImage.hpp + + ${INCLUDE_DIR}/Scene/MapScene.hpp + + + ${INCLUDE_DIR}/App.hpp + ${INCLUDE_DIR}/GameObjectManager.hpp + ${INCLUDE_DIR}/GameObjectID.hpp + ${INCLUDE_DIR}/Tile.hpp + ${INCLUDE_DIR}/config.hpp + ${INCLUDE_DIR}/DrawOverlays.hpp + + ${INCLUDE_DIR}/config.hpp + + + ${INCLUDE_DIR}/Sprite.hpp + ${INCLUDE_DIR}/Settings.hpp + ${INCLUDE_DIR}/Camera.hpp + ${INCLUDE_DIR}/DrawOverlays.hpp + + ${INCLUDE_DIR}/Structure/Structure.hpp + ${INCLUDE_DIR}/Structure/WayPoint.hpp + ${INCLUDE_DIR}/Structure/IWayPointStructure.hpp + ${INCLUDE_DIR}/HighLight.h + ${INCLUDE_DIR}/House.hpp + ${INCLUDE_DIR}/UI/UIScriptProcess.hpp + ${INCLUDE_DIR}/DrawOverlays.hpp + ${INCLUDE_DIR}/UI/UI.hpp + ${INCLUDE_DIR}/Player.hpp + + ${INCLUDE_DIR}/Structure/Barracks.hpp + ${INCLUDE_DIR}/Structure/OreRefinery.hpp + ${INCLUDE_DIR}/Structure/PowerPlants.hpp + ${INCLUDE_DIR}/Structure/WarFactory.hpp + ${INCLUDE_DIR}/Structure/ADVPowerPlants.hpp + + ${INCLUDE_DIR}/Unit/PathfindingUnit.hpp + ${INCLUDE_DIR}/Unit/Avatar.hpp + ${INCLUDE_DIR}/Unit/WayPointUnit.hpp + ${INCLUDE_DIR}/Unit/Runner.hpp + ${INCLUDE_DIR}/Unit/Hunter.hpp + + ${INCLUDE_DIR}/imgui/imconfig.h + ${INCLUDE_DIR}/imgui/imgui.h + ${INCLUDE_DIR}/imgui/imgui_impl_sdl2.h + ${INCLUDE_DIR}/imgui/imgui_internal.h + ${INCLUDE_DIR}/imgui/imstb_rectpack.h + ${INCLUDE_DIR}/imgui/imstb_textedit.h + ${INCLUDE_DIR}/imgui/imstb_truetype.h + ${INCLUDE_DIR}/imgui/imgui_impl_sdlrenderer2..h + ${INCLUDE_DIR}/imgui/imgui_impl_opengl3.h + ${INCLUDE_DIR}/imgui/imgui_impl_opengl3_loader.h + + ${INCLUDE_DIR}/Scene/Scene.hpp + + ${INCLUDE_DIR}/Core/Context.hpp + ${INCLUDE_DIR}/Core/DebugMessageCallback.hpp + ${INCLUDE_DIR}/Core/VertexArray.hpp + ${INCLUDE_DIR}/Core/VertexBuffer.hpp + ${INCLUDE_DIR}/Core/UniformBuffer.hpp + ${INCLUDE_DIR}/Core/UniformBuffer.inl + ${INCLUDE_DIR}/Core/IndexBuffer.hpp + ${INCLUDE_DIR}/Core/Shader.hpp + ${INCLUDE_DIR}/Core/Program.hpp + ${INCLUDE_DIR}/Core/Texture.hpp + + ) + set(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/test) + + set(TEST_FILES - ${TEST_DIR}/SimpleTest.cpp - ${TEST_DIR}/NotSimpleTest.cpp - ${TEST_DIR}/TransformTest.cpp + ${TEST_DIR}/SimpleTest.cpp + ${TEST_DIR}/NotSimpleTest.cpp + ${TEST_DIR}/TransformTest.cpp ) add_executable(Sample - ${SRC_FILES} - ${SRC_DIR}/main.cpp + ${SRC_FILES} + ${SRC_DIR}/main.cpp ) target_link_libraries(Sample - SDL2::SDL2main # IDK what happens if we don't link SDL2main - ${DEPENDENCY_LINK_LIBRARIES} + SDL2::SDL2main # IDK what happens if we don't link SDL2main + ${DEPENDENCY_LINK_LIBRARIES} ) +##yaml +target_link_libraries(Sample yaml-cpp::yaml-cpp ${DEPENDENCY_LINK_LIBRARIES}) # The library or executable that require yaml-cpp library + target_include_directories(Sample SYSTEM PRIVATE - ${DEPENDENCY_INCLUDE_DIRS} + ${DEPENDENCY_INCLUDE_DIRS} ) target_include_directories(Sample PRIVATE - ${INCLUDE_DIR} + ${INCLUDE_DIR} ) + + if (${PTSD_ENABLE_PCH}) target_precompile_headers(Sample PRIVATE - include/pch.hpp + include/pch.hpp ) -endif() + + +endif () target_compile_options(Sample PRIVATE - ${TARGET_COMPILE_OPTIONS} + ${TARGET_COMPILE_OPTIONS} ) + enable_testing() add_executable(Tests - ${TEST_FILES} - ${SRC_FILES} + ${TEST_FILES} + ${SRC_FILES} ) target_link_libraries(Tests - GTest::gtest_main - ${DEPENDENCY_LINK_LIBRARIES} + GTest::gtest_main + ${DEPENDENCY_LINK_LIBRARIES} ) target_include_directories(Tests SYSTEM PRIVATE - ${DEPENDENCY_INCLUDE_DIRS} - lib/googletest/googletest/include - lib/googletest/googlemock/include + ${DEPENDENCY_INCLUDE_DIRS} + lib/googletest/googletest/include + lib/googletest/googlemock/include ) target_include_directories(Tests PRIVATE - ${INCLUDE_DIR} + ${INCLUDE_DIR} ) target_compile_options(Tests PRIVATE - ${TARGET_COMPILE_OPTIONS} + ${TARGET_COMPILE_OPTIONS} ) add_executable(AudioTest - ${TEST_DIR}/Interactive/Audio.cpp - ${SRC_FILES} + ${TEST_DIR}/Interactive/Audio.cpp + ${SRC_FILES} ) target_link_libraries(AudioTest - GTest::gtest_main - ${DEPENDENCY_LINK_LIBRARIES} + GTest::gtest_main + ${DEPENDENCY_LINK_LIBRARIES} ) target_include_directories(AudioTest SYSTEM PRIVATE - ${DEPENDENCY_INCLUDE_DIRS} - lib/googletest/googletest/include - lib/googletest/googlemock/include + ${DEPENDENCY_INCLUDE_DIRS} + lib/googletest/googletest/include + lib/googletest/googlemock/include ) target_include_directories(AudioTest PRIVATE - ${INCLUDE_DIR} + ${INCLUDE_DIR} ) target_compile_options(AudioTest PRIVATE - ${TARGET_COMPILE_OPTIONS} + ${TARGET_COMPILE_OPTIONS} ) + include(GoogleTest) gtest_discover_tests(Tests) diff --git a/README.md b/README.md index bcfd1f98..99d43085 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,11 @@ -# Practical Tools for Simple Design +# Purpose -###### Officially Supported Platforms and IDEs +# Goal -| | Windows | macOS | Linux | -|:------------------------------:|:-------:|:-----:|:-----:| -| CLion | V | V | V | -| VSCode[^codeoss] | V | V | V | -| Visual Studio[^novs][^vsmacos] | ? | X | X | -| No IDE | V | V | V | +# Methodology -[^vsmacos]: [Microsoft Kills Visual Studio for Mac](https://visualstudiomagazine.com/articles/2023/08/30/vs-for-mac-retirement.aspx) -[^codeoss]: On Linux the support of Code - OSS and VSCodium aren't guaranteed. -[^novs]: Due to lack of testing there may or may not be more issues on VS. Anyway, building PTSD on VS is available. - -## Getting Started - -Required: Git, CMake, C/C++ Compiler, OpenGL Implementation - -Optional: Ninja Build, Clang - -> You might get some issue like https://github.com/ntut-open-source-club/practical-tools-for-simple-design/issues/78 check it if you need. - -### Command Line - -[//]: # (TODO: No IDE Quick Start) -> [!WARNING] -> This section is work in progress. - -``` -git clone https://github.com/ntut-open-source-club/practical-tools-for-simple-design.git -cd practical-tools-for-simple-design -cmake -B build -cmake --build build -``` - -> If Ninja Build is install use `cmake -B build -G Ninja` to speed compile time - -> For older versions of CMake(`<3.13`? verification needed) use -> ``` -> mkdir build -> cd build -> cmake . -> cmake --build . -> ``` -> if the `-B` flag is unsupported - -> If using Neovim or other LSP supported editors, append `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` to the generation command for `clangd` to work - -### VSCode - -[//]: # (TODO: VSCode Quick Start) -> [!WARNING] -> This section is work in progress. - -### CLion - -[CLion Quick Start](.github/docs/CLionQuickStart/CLionQuickStart.md) - -###### NOTE: If you have time, read [OOP2023f Environment Setup](https://hackmd.io/@OOP2023f/rk2-8cVCh) - -## Generate Doxygen Documents - -Required: Doxygen 1.9.6 - -``` -doxygen docs/Doxyfile -``` - -Open the generated documents with your favorite browser at `docs/html/index.html` +## Packages used +1. openGL version 4.1 +2. PTSD game Engine +3. SDL2 +4. Imgui \ No newline at end of file diff --git a/Sample_2024-03-22-005901.collapsed b/Sample_2024-03-22-005901.collapsed new file mode 100644 index 00000000..07811c03 --- /dev/null +++ b/Sample_2024-03-22-005901.collapsed @@ -0,0 +1,2331 @@ +thread with id 4179927;libsystem_pthread.dylib`start_wqthread 30 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain 3 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 25 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libsystem_malloc.dylib`free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 12 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLDObject::release 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`objc_object::sidetable_clearDeallocating 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r48r56r;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_malloc.dylib`DYLD-STUB$$_platform_bzero 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libobjc.A.dylib`objc_autorelease 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`GLRResourceList::releaseToPool 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];IOAccelerator`IOAccelInitCommPage 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_blocks.dylib`_Block_release 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libsystem_kernel.dylib`mach_absolute_time 6 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libobjc.A.dylib`objc_opt_class 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;IOGPU`DYLD-STUB$$objc_opt_class 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libsystem_platform.dylib`_platform_memset 4 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`IOGPUMetalPooledResourceRelease 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libobjc.A.dylib`objc_release 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;Metal`-[MTLResourceList releaseAllObjectsAndReset];Metal`MTLResourceListChunkFreeEntries 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalDeviceShmemUpdateTrimLevel 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLTraceEnabled 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer signalCommandBufferAvailable] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];CoreFoundation`-[__NSArrayM removeObjectsInRange:] 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`objc_msgSend$objectAtIndex: 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[__NSArrayM objectAtIndex:] 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`objc_msgSend$count 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`DYLD-STUB$$objc_msgSendSuper2 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[__NSArrayM removeObjectAtIndex:] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`_szone_free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`DYLD-STUB$$_platform_memset 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libsystem_pthread.dylib`pthread_mutex_destroy 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libobjc.A.dylib`-[NSObject dealloc] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libobjc.A.dylib`objc_release 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];libobjc.A.dylib`objc_retain_x28 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyDevice alertCommandBufferActivityComplete] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_malloc.dylib`free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_malloc.dylib`_nanov2_free 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_cleanup_generic_captures 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`pthread_mutex_lock 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`_pthread_mutex_lock_init_slow;libsystem_pthread.dylib`_pthread_mutex_check_init_slow 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`MTLFailureTypeGetEnabled 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`objc_msgSend$removeObject: 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;CoreFoundation`-[NSMutableArray removeObject:] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOKit`__IODataQueueDequeue 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke.50 4 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUDeviceCheckAndLogSoftFaultCount 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libsystem_blocks.dylib`_Block_release 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOKit`__IODataQueueDequeue 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:] 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libdispatch.dylib`dispatch_semaphore_signal 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`DYLD-STUB$$objc_destructInstance 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose;libobjc.A.dylib`objc_destructInstance 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_release_internal 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_dispose 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_unote_resume 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOKit`IODispatchCalloutFromCFMessage;libdispatch.dylib`_dispatch_semaphore_signal_slow;libsystem_kernel.dylib`semaphore_signal_trap 21 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;AppleMetalOpenGLRenderer`iosurfaceUseCountIsZeroCallback 3 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOSurface`IOSurfaceNotifierNotifyFunc 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 22 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg2_internal 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_platform.dylib`_platform_memset 6 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_kernel.dylib`mach_msg 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;IOKit`__IONotificationPortSetDispatchQueue_block_invoke 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;AppKit`__35-[NSDockConnection startConnection]_block_invoke.13;AppKit`-[NSDockConnection _makeConnectionIfNeededWithRetryInterval:onDemand:];SkyLight`SLSessionCopyCurrentDictionary;SkyLight`SLSCopyCurrentSessionPropertiesInternalBridge;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;SkyLight`__loginframework_vtable_block_invoke;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_event_loop_drain;libsystem_platform.dylib`__bzero 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;QuartzCore`invocation function for block in CA::Render::Fence::Transaction::Observer::activate(std::__1::unordered_set, void (*)(CA::Render::Fence::Transaction::Observer*, std::__1::unordered_set const&, double, unsigned int, unsigned long long), void (*)(CA::Render::Fence::Transaction::Observer*, std::__1::unordered_set const&, unsigned int, unsigned int), void (*);QuartzCore`CA::Context::send_deferrals;QuartzCore`CA::Render::DeferredEncoder::~DeferredEncoder;libsystem_kernel.dylib`__munmap 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_kq_unote_update 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_pop;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_source_invoke 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libobjc.A.dylib`objc_autoreleasePoolPush 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libobjc.A.dylib`AutoreleasePoolPage::push 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_push;libobjc.A.dylib`AutoreleasePoolPage::push 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;libxpc.dylib`_xpc_connection_handle_disconnect_event;libsystem_kernel.dylib`_kernelrpc_mach_port_deallocate_trap 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_event_loop_leave_deferred 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_workloop_invoke;libdispatch.dylib`_dispatch_client_callout;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libobjc.A.dylib`class_createInstance 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`_dispatch_mach_handle_or_push_received_msg 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_lane_push 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_mach_msg_drain 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_mach_msg_recv 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_mach_msg_recv 3 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_source_wakeup 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_poke 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_mach_msg_drain 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`DYLD-STUB$$memcpy 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_queue_wakeup 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_lane_push 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211c8 5 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321118 3 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e32110c 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321120 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3210e8 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321108 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321128 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321228 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321138 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321144 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321244 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321248 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321254 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321080 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321180 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211d4 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3210d8 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3210e0 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211ec 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_group_wake;libsystem_kernel.dylib`__ulock_wake 10 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;OpenGL`0x00000001edb6d614;CoreFoundation`__CFStringCreateImmutableFunnel3;CoreFoundation`__CFSearchStringROM 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_event_loop_merge 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_kevent_worker_thread;libdispatch.dylib`_dispatch_mgr_queue_drain;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_root_queue_poke_slow 1 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_kernel.dylib`__workq_kernreturn 261 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`DYLD-STUB$$__workq_kernreturn 2 +thread with id 4179927;libsystem_pthread.dylib`start_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 1 +thread with id 4179927;libsystem_pthread.dylib`_pthread_wqthread 2 +thread with id 4179927;libsystem_kernel.dylib`__workq_kernreturn 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread 30 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 4 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain 3 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 27 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear;libsystem_malloc.dylib`_nanov2_free 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`DYLD-STUB$$operator delete 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLDObject::release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 21 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libsystem_malloc.dylib`free 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r48r56r;libsystem_blocks.dylib`_Block_object_dispose 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_cleanup_generic_captures 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`GLRBufferResourceFreePool::releaseBufferResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__tree::__emplace_unique_key_args 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_blocks.dylib`_Block_release 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::writeBufferData 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libsystem_kernel.dylib`mach_absolute_time 7 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libobjc.A.dylib`objc_opt_isKindOfClass 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libsystem_platform.dylib`_platform_memset 4 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`IOGPUMetalCommandBufferStorageReleaseDeviceShmems;IOGPU`DYLD-STUB$$os_unfair_lock_lock 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`IOGPUMetalPooledResourceRelease 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;Metal`-[MTLResourceList releaseAllObjectsAndReset];libobjc.A.dylib`objc_release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalDeviceShmemUpdateTrimLevel 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;Metal`-[MTLResourceList releaseAllObjectsAndReset] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`objc_msgSend$signalCommandBufferAvailable 3 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer signalCommandBufferAvailable] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];CoreFoundation`-[__NSArrayM _mutate] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];CoreFoundation`-[__NSArrayM removeObjectsInRange:] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_opt_isKindOfClass 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock;libsystem_malloc.dylib`tiny_free_list_add_ptr 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock;libsystem_malloc.dylib`tiny_free_list_remove_ptr 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`get_tiny_previous_free_msize 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libobjc.A.dylib`_objc_rootDealloc;libobjc.A.dylib`object_cxxDestructFromClass 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libobjc.A.dylib`_objc_rootDealloc;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`object_cxxDestructFromClass;libobjc.A.dylib`lookupMethodInClassAndLoadCache 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libsystem_pthread.dylib`pthread_mutex_destroy 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libobjc.A.dylib`objc_release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libsystem_malloc.dylib`szone_try_free_default 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`objc_msgSend$executeSynchronizationNotifications: 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];libsystem_pthread.dylib`pthread_cond_destroy 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_platform.dylib`os_unfair_lock_lock 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`objc_msgSend$device 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;IOGPU`-[IOGPUMetalCommandBuffer dealloc] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libobjc.A.dylib`objc_release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`DYLD-STUB$$free 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_malloc.dylib`DYLD-STUB$$_platform_bzero 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOKit`DYLD-STUB$$memcpy 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`_pthread_mutex_lock_init_slow;libsystem_pthread.dylib`_pthread_mutex_check_init_slow 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOGPU`IOGPUDeviceCheckAndLogSoftFaultCount 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOKit`__IODataQueueDequeue 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOGPU`-[IOGPUMetalCommandQueue device] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`DYLD-STUB$$pthread_cond_broadcast 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke.50 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`objc_msgSend$commandBufferDidComplete:startTime:completionTime:error: 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke.50 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUDeviceCheckAndLogSoftFaultCount 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libsystem_blocks.dylib`_Block_release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:] 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOKit`IODataQueueDequeue 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`DYLD-STUB$$dispatch_mach_msg_get_msg 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`objc_msgSend$dealloc 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_dispose 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_unote_resume 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_kq_unote_update 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 36 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOKit`IODispatchCalloutFromCFMessage;libdispatch.dylib`_dispatch_semaphore_signal_slow;libsystem_kernel.dylib`semaphore_signal_trap 14 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;AppleMetalOpenGLRenderer`iosurfaceUseCountIsZeroCallback 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`DYLD-STUB$$mig_reply_setup 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_platform.dylib`_platform_memset 7 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;IOGPU`-[IOGPUMetalDevice periodicUpdateResourcePoolPurgeability];IOGPU`-[IOGPUMetalResourcePool updateResourcePurgeability];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`getMethodNoSuper_nolock 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;IOKit`__IONotificationPortSetDispatchQueue_block_invoke 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;IOKit`DYLD-STUB$$dispatch_mig_server 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_client_callout;libCVMSPluginSupport.dylib`cvm_deferred_build_modular;libCoreVMClient.dylib`cvms_element_build_and_get_internal;libdispatch.dylib`dispatch_release 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_pop;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_workloop_invoke;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;AudioToolbox`AQ::API::V2Impl::ClientNotificationsAvailable 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_serial_drain 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`nanov2_calloc 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libsystem_malloc.dylib`calloc 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libobjc.A.dylib`class_createInstance 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`_voucher_create_with_mach_msgv 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`DYLD-STUB$$memcpy 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`_dispatch_object_alloc 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_queue_wakeup 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_lane_push 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_source_wakeup 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_drain 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_mach_msg_recv 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_queue_wakeup 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_mach_merge_msg 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_os_object_release_internal_n 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_lane_push 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e32113c 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321140 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211a8 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321104 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321204 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321208 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e32110c 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321210 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321114 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321118 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321220 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321124 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321130 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321138 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321144 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321254 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321160 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e32126c 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e32127c 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211b0 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211b8 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211c8 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3210d0 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211d4 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`objc_object::sidetable_clearDeallocating;libobjc.A.dylib`bool objc::DenseMapBase::LookupBucketFor 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_group_wake;libsystem_kernel.dylib`__ulock_wake 4 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_group_wake 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_apply_invoke;libdispatch.dylib`_dispatch_client_callout2;CoreFoundation`__103-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:]_block_invoke;CoreFoundation`-[_CFXPreferences withConnectionForRole:andUserIdentifier:performBlock:];CoreFoundation`__103-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:]_block_invoke_2;libxpc.dylib`xpc_connection_send_message_with_reply_sync;libdispatch.dylib`dispatch_mach_send_with_result_and_wait_for_reply;libdispatch.dylib`_dispatch_mach_send_and_wait_for_reply;libdispatch.dylib`_dispatch_mach_send_msg;libdispatch.dylib`_dispatch_mach_send_drain;libdispatch.dylib`_dispatch_mach_msg_send;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_queue_override_invoke;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;AGXMetal13_3`invocation function for block in void AGX::Compiler::compileProgram(AGX::BackgroundObjectProgramKey const&, MTLCompileFunctionRequestData*, void ;AGXMetal13_3`invocation function for block in AGX::G13::BackgroundObjectProgramVariant* AGX::Device::tryFindOrCreateDriverProgramVariant;AGXMetal13_3`AGX::ProgramBindingRemap::ProgramBindingRemap 1 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_kevent_worker_thread;libdispatch.dylib`_dispatch_mgr_queue_drain;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_install;libdispatch.dylib`_dispatch_unote_register_muxed;libdispatch.dylib`_dispatch_kevent_mach_notify_resume;libsystem_kernel.dylib`_kernelrpc_mach_port_request_notification_trap 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_event_loop_merge 2 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libsystem_kernel.dylib`__workq_kernreturn 286 +thread with id 4179928;libsystem_pthread.dylib`start_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 3 +thread with id 4179928;libsystem_kernel.dylib`__workq_kernreturn 1 +thread with id 4179940;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;caulk`void* caulk::thread_proxy;caulk`caulk::concurrent::details::worker_thread::run;caulk`caulk::concurrent::details::messenger_servicer::check_dequeue;caulk`std::__1::__function::__func::operator();caulk`caulk::alloc::details::caching_page_allocator_base::preallocate;caulk`caulk::alloc::page_allocator::allocate;caulk`caulk::mach::vm_block::alloc;libsystem_kernel.dylib`__mmap 1 +thread with id 4179940;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;caulk`void* caulk::thread_proxy;caulk`caulk::concurrent::details::worker_thread::run;libsystem_kernel.dylib`semaphore_wait_trap 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::StartRunning;AudioToolbox`AQMixEngine_Base::AddRunningClient;AudioToolbox`MESubmixGraph::connectInputChannel;AudioToolbox`MESubmixGraph::_connectInputChannel;AudioToolbox`MEMixerChannel::Initialize;AudioToolbox`SpatializationManager::GetPreferencesV1;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in SpatializationManager::GetAUSpatialMixerPreset;AudioToolbox`AudioDSPLibraryCore;SoftLinking`_sl_dlopen;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::APIs::dlopen_from(char const*, int, void*)::$_1::operator();dyld`dyld4::JustInTimeLoader::applyFixups;dyld`dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld3::MachOAnalyzer::withVMLayout(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`dyld3::MachOFile::forEachChainedFixupTarget(Diagnostics&, dyld_chained_fixups_header const*, linkedit_data_command const*, void ;dyld`invocation function for block in mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld4::Loader::resolveSymbol(Diagnostics&, dyld4::RuntimeState&, int, char const*, bool, bool, void ;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::StartRunning;AudioToolbox`AQMixEngine_Base::AddRunningClient;AudioToolbox`MESubmixGraph::connectInputChannel;AudioToolbox`MESubmixGraph::_connectInputChannel;AudioToolbox`MEMixerChannel::Initialize;AudioToolbox`SpatializationManager::GetPreferencesV1;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in SpatializationManager::GetAUSpatialMixerPreset;AudioToolbox`AudioDSPLibraryCore;SoftLinking`_sl_dlopen;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::APIs::dlopen_from(char const*, int, void*)::$_1::operator();dyld`dyld4::JustInTimeLoader::applyFixups;dyld`dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld3::MachOAnalyzer::withVMLayout(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`dyld3::MachOFile::forEachChainedFixupTarget(Diagnostics&, dyld_chained_fixups_header const*, linkedit_data_command const*, void ;dyld`invocation function for block in mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld4::Loader::resolveSymbol(Diagnostics&, dyld4::RuntimeState&, int, char const*, bool, bool, void ;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk;dyld`dyld3::MachOFile::read_uleb128 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::StartRunning;AudioToolbox`AQMixEngine_Base::AddRunningClient;AudioToolbox`MESubmixGraph::connectInputChannel;AudioToolbox`MESubmixGraph::_connectInputChannel;AudioToolbox`MEMixerChannel::Initialize;AudioToolbox`SpatializationManager::GetPreferencesV1;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in SpatializationManager::GetAUSpatialMixerPreset;AudioToolbox`LoadPresetFile;libsystem_c.dylib`fopen;libsystem_kernel.dylib`__open_nocancel 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::StartRunning;AudioToolbox`AQMixEngine_Base::AddRunningClient;AudioToolbox`MESubmixGraph::connectInputChannel;AudioToolbox`MESubmixGraph::_connectInputChannel;AudioToolbox`MESubmixGraph::initialize;AudioToolboxCore`AudioUnitInitialize;CoreAudio`0x000000010ce312c4;CoreAudio`0x000000010ce2cb68;CoreAudio`0x000000010ce202b8;CoreAudio`0x000000010ce1704c;CoreAudio`0x000000010ce184d8;CoreAudio`0x000000010ce1870c;AudioToolboxCore`AT::Resampler::create;AudioToolboxCore`Resampler2::Resampler2;libAudioToolboxUtility.dylib`SincKernelFactory::ReferenceSincKernel;libAudioToolboxUtility.dylib`SincKernel::CalculateFilterCoefficients;libAudioToolboxUtility.dylib`GetKaiser;libAudioToolboxUtility.dylib`KaiserWindow::KaiserWindow;libAudioToolboxUtility.dylib`bessi0 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::StartRunning;AudioToolbox`AQMixEngine_Base::AddRunningClient;AudioToolbox`MEDeviceStreamClient::FirstRunningClientStarted;AudioToolbox`AQMEIO_Base::AddRunningRequest;AudioToolbox`AQMEIO_Base::StartIO_Sync;AudioToolbox`AQMEIO_HAL::StartIO_Primitive;CoreAudio`AudioDeviceStart_mac_imp;CoreAudio`HAL_HardwarePlugIn_DeviceStart(AudioHardwarePlugInInterface**, unsigned int, int (*);CoreAudio`HALC_ProxyIOContext::StartIOProc(int (*);CoreAudio`HALC_ProxyIOContext::_SetPlayStateForSmartRouting(int (*);AudioSession`+[AVAudioSession sharedInstance];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AudioSession`__32+[AVAudioSession sharedInstance]_block_invoke;AudioSession`-[AVAudioSession(CatalystPrivate) initForMacOS];libAudioStatistics.dylib`-[CAReporter initWithNewReporterID];libAudioStatistics.dylib`+[CAReportingClient sharedInstance];libAudioStatistics.dylib`-[CAReportingClient initWithXPC:endpoint:];Foundation`+[NSXPCInterface interfaceWithProtocol:];Foundation`-[NSXPCInterface setProtocol:];Foundation`setProtocolMetadata;Foundation`setProtocolMetdataWithMethods;CoreFoundation`-[NSMethodSignature _argInfo:] 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::Prime;AudioToolbox`AudioQueueObject::AcquirePlayResources;AudioToolbox`AudioQueueObject::GetConverterConnection_Init;AudioToolbox`AudioQueueObject::GetIONodeConnection_Init;AudioToolbox`AudioQueueObject::DoIONodeConnect;AudioToolbox`AudioQueueObject::IONodeConnection::SetIONode;AudioToolbox`AQMixEngine_Base::AddIOClient;AudioToolbox`AQMEDevice::AddIOClient;AudioToolbox`AQMEDevice::GetOutputStreamClient;AudioToolbox`MESubmixGraph::MESubmixGraph;AudioToolboxCore`AudioComponentInstanceNew;AudioToolboxCore`Synchronously;AudioToolboxCore`__AudioComponentInstanceNew_block_invoke;AudioToolboxCore`instantiate(OpaqueAudioComponent*, unsigned int, bool, void ;AudioToolboxCore`APComponent::newInstance(unsigned int, bool, void ;AudioToolboxCore`APComponent_FromBundle_Loadable::ResolveFactoryFunction;CoreFoundation`_CFBundleLoadExecutableAndReturnError;CoreFoundation`_CFBundleDlfcnLoadBundle;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::APIs::dlopen_from(char const*, int, void*)::$_1::operator();dyld`dyld4::RuntimeState::notifyDtrace;dyld`dyld4::SyscallDelegate::dtraceRegisterUserProbes;dyld`__ioctl 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::Prime;AudioToolbox`AudioQueueObject::AcquirePlayResources;AudioToolbox`AudioQueueObject::GetConverterConnection_Init;AudioToolbox`AudioQueueObject::GetIONodeConnection_Init;AudioToolbox`AudioQueueObject::DoIONodeConnect;AudioToolbox`AudioQueueObject::IONodeConnection::SetIONode;AudioToolbox`AQMixEngine_Base::AddIOClient;AudioToolbox`AQMEDevice::AddIOClient;AudioToolbox`AQMEDevice::GetOutputStreamClient;AudioToolbox`MESubmixGraph::MESubmixGraph;AudioToolboxCore`AudioComponentInstanceNew;AudioToolboxCore`Synchronously;AudioToolboxCore`__AudioComponentInstanceNew_block_invoke;AudioToolboxCore`instantiate(OpaqueAudioComponent*, unsigned int, bool, void ;AudioToolboxCore`APComponent::newInstance(unsigned int, bool, void ;CoreAudio`0x000000010ce2e7e4;CoreAudio`0x000000010ce208a0;CoreFoundation`_CFBundleCopyLocalizedStringForLocalizationTableURLAndMarkdownOption;CoreFoundation`_copyStringTable;CoreFoundation`_loadStringsInOrder;CoreFoundation`_loadLocTable;CoreFoundation`__CFBundleCreateStringsFromPlistData;CoreFoundation`_CFPropertyListCreateFiltered;CoreFoundation`__CFBinaryPlistCreateObjectFiltered;CoreFoundation`__CFPropertyListCreateFilteredDictionary;CoreFoundation`__CFBinaryPlistCreateObjectFiltered;CoreFoundation`__CFPropertyListCreateFilteredDictionary;CoreFoundation`_CFStringGetCStringPtrInternal 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueStartWithFlags;AudioToolbox`AudioQueueXPC_Bridge::Start;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::Start;AudioToolbox`AudioQueueXPC_Server::Start;AudioToolbox`AudioQueueObject::Start;AudioToolbox`AudioQueueObject::Prime;AudioToolbox`AudioQueueObject::AcquirePlayResources;AudioToolbox`AudioQueueObject::GetConverterConnection_Init;AudioToolbox`AudioQueueObject::GetIONodeConnection_Init;AudioToolbox`AudioQueueObject::DoIONodeConnect;AudioToolbox`AQIONodeManager::_FindAQIONode;AudioToolbox`AT::MixServer::Common::createIONode;AudioToolbox`AQMixEngine_Single::InitPhase2;AudioToolbox`AQMEIOManager_FindIOUnit;AudioToolbox`AQMEIO_HAL::SelectDevice;AudioToolbox`CAListenerProxy::HALListener::HALListener;CoreAudio`AudioObjectAddPropertyListenerInternal_mac_imp;CoreAudio`HALObject::AddPropertyListener;CoreAudio`HALPlugIn::ObjectHasProperty;CoreAudio`HAL_HardwarePlugIn_ObjectHasProperty;CoreAudio`HALC_ShellObject::HasProperty;CoreAudio`HALC_ProxyObject::HasProperty;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AudioQueueNewOutput;AudioToolbox`AQ::API::V2Impl::AudioQueueNew;AudioToolbox`AudioQueueXPC_Bridge::NewQueue;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::NewQueue;AudioToolbox`AudioQueueXPC_Server::NewQueue;AudioToolbox`AudioQueueObject::AudioQueueObject;AudioToolboxCore`AudioConverterNew;AudioToolboxCore`AudioConverterNewInternal(AudioStreamBasicDescription const*, AudioStreamBasicDescription const*, unsigned int, AudioClassDescription const*, OpaqueAudioConverter**, AudioConverterAPI* (*);AudioToolboxCore`newAudioConverter;AudioToolboxCore`acv2::AudioConverterChain::PostBuild;libsystem_platform.dylib`__bzero 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AudioQueueNewOutput;AudioToolbox`caulk::lazy_injectable::lazy_init;AudioToolbox`AQ::API::Interface::injectable_global()::$_0::__invoke;AudioToolbox`CASmartPreferences::Read;AudioToolbox`void CASmartPreferences::AddHandler(__CFString const*, __CFString const*, bool (*);libAudioToolboxUtility.dylib`CASmartPreferences::_RegisterFirstHandler;CoreFoundation`CFRetain 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;Sample`prepare_audioqueue;AudioToolbox`AQ::API::V2Impl::AudioQueueSetProperty;AudioToolbox`AudioQueueXPC_Bridge::SetProperty;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::SetProperty;AudioToolbox`AudioQueueXPC_Server::SetProperty;AudioToolbox`AudioQueueObject::SetProperty;AudioToolbox`AudioQueueObject::CheckIfContentRequiresAUSpatialMixer;AudioToolbox`AudioMetadataUtilities::containsMetadata;AudioToolbox`GetCodecPropertyFromFormatInfo;AudioToolboxCore`AudioComponentFindNext;AudioToolboxCore`GlobalComponentPluginMgr;AudioToolboxCore`AudioComponentMgr_RegistrarService::retrieveComponents;CoreFoundation`_CF_forwarding_prep_0;CoreFoundation`___forwarding___;Foundation`-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:];Foundation`__88-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:]_block_invoke_3;Foundation`-[NSXPCConnection _decodeAndInvokeReplyBlockWithEvent:sequence:replyInfo:];Foundation`__NSXPCCONNECTION_IS_CALLING_OUT_TO_REPLY_BLOCK__;CoreFoundation`-[NSInvocation invoke];CoreFoundation`__invoking___;AudioToolboxCore`invocation function for block in AudioComponentMgr_RegistrarService::retrieveComponents;AudioToolboxCore`AudioComponentMgr_RegistrarService::mergeServerRegistrations;AudioToolboxCore`AudioComponentVector::createWithSerializedData;Foundation`+[NSKeyedUnarchiver unarchivedObjectOfClass:fromData:error:];Foundation`+[NSKeyedUnarchiver unarchivedObjectOfClasses:fromData:error:];Foundation`-[NSCoder decodeTopLevelObjectOfClasses:forKey:error:];Foundation`-[NSCoder __tryDecodeObjectForKey:error:decodeBlock:];Foundation`-[NSKeyedUnarchiver decodeObjectOfClasses:forKey:];Foundation`-[NSKeyedUnarchiver decodeObjectForKey:];Foundation`_decodeObject;Foundation`_decodeObjectBinary;AudioToolboxCore`-[_ACComponentVector initWithCoder:];Foundation`-[NSKeyedUnarchiver decodeObjectOfClasses:forKey:];Foundation`-[NSKeyedUnarchiver decodeObjectForKey:];Foundation`_decodeObject;Foundation`_decodeObjectBinary;Foundation`-[NSArray(NSArray) initWithCoder:];Foundation`-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:];Foundation`_decodeObjectBinary;AudioToolboxCore`-[_ACComponentWrapper initWithCoder:];Foundation`-[NSKeyedUnarchiver decodeIntForKey:];Foundation`_decodeInt64;CoreFoundation`__CFBinaryPlistGetOffsetForValueFromDictionary3 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;AudioToolbox`(anonymous namespace)::RunLoopSourcePerform;AudioToolbox`AQ::API::Queue::FetchAndDeliverPendingCallbacks;AudioToolbox`AQClientCallbackMessageReader::DispatchCallbacks;AudioToolbox`AQ::API::Queue::CallOutputCallback;Sample`outputCallback;AudioToolbox`AQ::API::V2Impl::AudioQueueEnqueueBufferWithParameters 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;AudioToolbox`(anonymous namespace)::RunLoopSourcePerform;AudioToolbox`AQ::API::Queue::FetchAndDeliverPendingCallbacks;AudioToolbox`AQClientCallbackMessageReader::DispatchCallbacks;AudioToolbox`AQ::API::Queue::CallOutputCallback;Sample`outputCallback;Sample`mix_channels;Sample`SDL_GetTicks;Sample`SDL_GetTicks_REAL;libsystem_kernel.dylib`mach_absolute_time 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;AudioToolbox`(anonymous namespace)::RunLoopSourcePerform;AudioToolbox`AQ::API::Queue::FetchAndDeliverPendingCallbacks;AudioToolbox`AQClientCallbackMessageReader::DispatchCallbacks;AudioToolbox`AQ::API::Queue::CallOutputCallback;Sample`outputCallback;AudioToolbox`AudioQueueEnqueueBuffer;AudioToolbox`AQ::API::V2Impl::AudioQueueEnqueueBufferWithParameters;AudioToolbox`AudioQueueXPC_Bridge::EnqueueBuffer;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::EnqueueBuffer;AudioToolbox`AudioQueueXPC_Server::EnqueueBuffer 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;AudioToolbox`(anonymous namespace)::RunLoopSourcePerform;AudioToolbox`AQ::API::Queue::FetchAndDeliverPendingCallbacks;libdispatch.dylib`_os_object_release_without_xref_dispose 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;AudioToolbox`(anonymous namespace)::RunLoopSourcePerform;AudioToolbox`AQ::API::Queue::FetchAndDeliverPendingCallbacks;AudioToolbox`AudioQueueXPC_Bridge::GetPendingCallbackMessages;libdispatch.dylib`_dispatch_sync_invoke_and_complete_recurse;libdispatch.dylib`_dispatch_client_callout;AudioToolbox`invocation function for block in AudioQueueXPC_Bridge::GetPendingCallbackMessages;AudioToolbox`AudioQueueXPC_Server::GetPendingCallbackMessages;AudioToolbox`AQClientCallbackMessageQueue::GetPendingCallbackMessages;AudioToolbox`swix::data::data;libxpc.dylib`xpc_data_create;libdispatch.dylib`dispatch_retain 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopServiceMachPort;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;libdispatch.dylib`_dispatch_source_timer_create 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;libdispatch.dylib`_dispatch_event_loop_poke;libdispatch.dylib`_dispatch_kq_drain;libsystem_kernel.dylib`kevent_qos 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;libobjc.A.dylib`objc_object::changeIsa 1 +thread with id 4179963;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;Sample`RunThread;Sample`SDL_RunThread;Sample`audioqueue_thread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFStringEqual 1 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;libAudioToolboxUtility.dylib`CADeprecated::CAGuard::Wait 1 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;libAudioToolboxUtility.dylib`CADeprecated::CAGuard::Wait;libsystem_kernel.dylib`__psynch_cvwait 3 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;AudioToolbox`AudioQueueObject::RunConverter;AudioToolbox`AudioQueueObject::PerformDeferredBufferCallbacks;AudioToolbox`AQClientCallbackMessageQueue::OutputCallback;AudioToolbox`CADeprecated::CAMutex::Locker::~Locker 1 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;AudioToolbox`AudioQueueObject::RunConverter;AudioToolbox`AudioQueueObject::PerformDeferredBufferCallbacks;AudioToolbox`AQClientCallbackMessageQueue::OutputCallback;AudioToolbox`AQClientCallbackMessageQueue::CheckPing;AudioToolbox`AudioQueueXPC_Bridge::NotificationsAvailable;libdispatch.dylib`_dispatch_event_loop_poke;libsystem_kernel.dylib`kevent_id 1 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;AudioToolbox`AudioQueueObject::RunConverter;libsystem_featureflags.dylib`_os_feature_enabled_impl 1 +thread with id 4179965;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;libAudioToolboxUtility.dylib`CADeprecated::CAPThread::Entry;AudioToolbox`AQConverterManager::AQConverterThread::ConverterThreadEntry;libAudioToolboxUtility.dylib`CADeprecated::CAMutex::Try 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop 3 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc 2 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender 2 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c 3 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;AudioToolboxCore`Resampler2::PushConvert;AudioToolboxCore`Resampler2::ConvertSIMD_SmallIntegerRatio;AudioToolboxCore`StereoMultiCoefsSRC_Neon 29 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput 3 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::CopySlice;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::CopySlice;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer;AudioToolboxCore`acv2::AudioConverterChain::ProduceOutput;AudioToolboxCore`acv2::CBRConverter::ProduceOutput;AudioToolboxCore`ACBaseAudioSpan::resetMetadataEvents 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::CopySlice;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer;AudioToolboxCore`acv2::AudioConverterChain::ProduceOutput;AudioToolboxCore`acv2::CBRConverter::ProduceOutput;AudioToolboxCore`acv2::AudioConverterChain::ObtainInput;AudioToolboxCore`acv2::CBRConverter::ProduceOutput;AudioToolboxCore`NativeInt16ToFloat32Scaled_ARM 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::CopySlice;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;libAudioToolboxUtility.dylib`CrashIfClientProvidedBogusAudioBufferList 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::CopySlice;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::BufferComplete;AudioToolbox`AudioQueueObject::PlaySliceComplete;AudioToolboxCore`ExtendedAudioBufferList_Destroy 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::BufferComplete;AudioToolbox`AudioQueueObject::PlaySliceComplete;caulk`caulk::alloc::darwin_resource::do_deallocate 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::BufferComplete;AudioToolbox`AudioQueueObject::PlaySliceComplete;libAudioToolboxUtility.dylib`CADeprecated::CAGuard::Notify;libsystem_kernel.dylib`__psynch_cvsignal 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;AudioToolbox`ScheduledSlicePlayer::DoResolveStartTime;AudioToolbox`AudioQueueObject::NotifyRunning;caulk`caulk::alloc::darwin_resource::do_allocate;caulk`caulk::alloc::bitmap_allocator::reset_state 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;libAudioToolboxUtility.dylib`CADeprecated::CAMutex::Try 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;libsystem_pthread.dylib`___chkstk_darwin 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`AudioQueueObject::DequeueOutput;libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`MEMixerChannel::UpdateParameters 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;AudioToolbox`MEMixerChannel::MixInputProc;AudioToolbox`MEMixerChannel::UpdateParameters;AudioToolbox`ParameterSchedule::AddPendingEvents 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;CoreAudio`0x000000010ce1c3d0 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1cf3c;CoreAudio`0x000000010ce1c3d0;libsystem_kernel.dylib`kdebug_trace;libsystem_kernel.dylib`kdebug_is_enabled 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce1c384 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce25d8c 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1bb28;CoreAudio`0x000000010ce26e44 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;AudioToolboxCore`Resampler2::PreFlight 2 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;AudioToolboxCore`Resampler2::GetNumberOfOutputFrames 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1cf3c 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;AudioToolboxCore`Resampler2::GetNumberOfSourceFrames 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;CoreAudio`0x000000010ce1b0e8;CoreAudio`0x000000010ce1dbcc 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;AudioToolboxCore`Resampler2::PushConvert 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010ce2d22c;CoreAudio`0x000000010ce1ab40;AudioToolboxCore`Resampler2::PreFlight 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010cd2d94c 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2fa80;CoreAudio`0x000000010cd480f0 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;CoreAudio`0x000000010ce2d22c 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`MEOutputStreamClient::IO_PerformOutput;AudioToolbox`XAudioUnit::Render;AudioToolboxCore`AudioUnitRender;AudioToolboxCore`APComponentInstance::FromAudioComponentInstance;AudioToolboxCore`ResolvedOpaqueRef::ResolvedOpaqueRef 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer 2 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer;AudioToolboxCore`acv2::AudioConverterChain::ProduceOutput;AudioToolboxCore`acv2::CBRConverter::ProduceOutput;AudioToolboxCore`acv2::AudioConverterChain::ObtainInput;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolboxCore`AudioConverterConvertComplexBuffer;AudioToolboxCore`with_resolved;AudioToolboxCore`acv2::AudioConverterV2::convertComplexBuffer;AudioToolboxCore`acv2::AudioConverterChain::ProduceOutput;AudioToolboxCore`acv2::CBRConverter::ProduceOutput;AudioToolboxCore`acv2::AudioConverterChain::ConsumedInput;AudioToolboxCore`ACBaseAudioSpan::sizeOfFirstPackets 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`XAudioUnit::Render 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`HALBytesToFrames 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOProc;AudioToolbox`CADeprecated::CABufferList::VerifyNotTrashingOwnedBuffer 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;AudioToolbox`AQMEIO_HAL::IOConverter_Simple::IOConvert 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;AudioToolbox`AQMEIO_HAL::_IOProc;caulk`caulk::semaphore::timed_wait 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;CoreAudio`HALB_MachPort::SendSimpleMessageWithSimpleReply;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 26 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;CoreAudio`HALC_ProxyIOContext::IOWorkLoop;CoreAudio`HALB_Mutex::Lock 1 +thread with id 4179966;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;CoreAudio`HALC_IOThread::Entry;CoreAudio`invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread 18 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 18 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libsystem_malloc.dylib`_nanov2_free 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libsystem_malloc.dylib`free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;Metal`-[_MTLCommandBuffer error] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 17 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libc++abi.dylib`operator delete 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 3 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`objc_object::sidetable_clearDeallocating 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r48r56r;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libobjc.A.dylib`objc_autorelease 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libobjc.A.dylib`objc_destructInstance 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`DYLD-STUB$$free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;Metal`-[_MTLCommandBuffer error] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_malloc.dylib`free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_malloc.dylib`nanov2_try_free_default 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];AppleMetalOpenGLRenderer`GLRResourceList::releaseToPool 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libsystem_kernel.dylib`mach_absolute_time 7 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;IOGPU`DYLD-STUB$$mach_absolute_time 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libobjc.A.dylib`objc_release 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`IOGPUMetalPooledResourceRelease 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`objc_msgSend$signalCommandBufferAvailable 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageReset 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:] 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];CoreFoundation`-[__NSArrayM removeObjectsInRange:];CoreFoundation`-[__NSArrayM count] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[__NSArrayM objectAtIndex:] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[__NSArrayM count] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`DYLD-STUB$$free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_opt_class 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];Metal`MTLFailureTypeGetErrorModeType 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock;libsystem_malloc.dylib`tiny_free_list_add_ptr 3 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`get_tiny_previous_free_msize 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`DYLD-STUB$$objc_release 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyDevice alertCommandBufferActivityComplete] 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`objc_msgSend$deferredEndEncoding: 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_blocks.dylib`_cleanup_generic_captures 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_malloc.dylib`free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;IOGPU`__destroy_helper_block_e8_32o40o 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`objc_object::sidetable_clearDeallocating 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOKit`__IODataQueueDequeue 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`pthread_mutex_lock 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_slow 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`objc_msgSend$device 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOGPU`-[IOGPUMetalCommandQueue device] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_call_dispose_helpers_excp 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`objc_msgSend$commandBufferDidComplete:startTime:completionTime:error: 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;Metal`DYLD-STUB$$dispatch_group_leave 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libsystem_blocks.dylib`_Block_release 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUDeviceCheckAndLogSoftFaultCount 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:] 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose;libobjc.A.dylib`objc_destructInstance 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_release_internal 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_dispose 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_kq_unote_update 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_unote_resume 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 31 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg2_internal 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOKit`IODispatchCalloutFromCFMessage;libdispatch.dylib`_dispatch_semaphore_signal_slow;libsystem_kernel.dylib`semaphore_signal_trap 18 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;AppleMetalOpenGLRenderer`iosurfaceUseCountIsZeroCallback 4 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;AppleMetalOpenGLRenderer`DYLD-STUB$$dispatch_semaphore_signal 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mig_reply_setup 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_platform.dylib`_platform_memset 4 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_kq_unote_update 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;libxpc.dylib`_xpc_connection_mach_event;libxpc.dylib`_xpc_connection_call_event_handler;RunningBoardServices`__37-[RBSConnection _lock_setConnection:]_block_invoke;RunningBoardServices`-[RBSConnection _handleMessage:];libsystem_trace.dylib`_os_activity_initiate_impl;RunningBoardServices`__32-[RBSConnection _handleMessage:]_block_invoke_2;RunningBoardServices`-[RBSConnection async_didChangeInheritances:completion:];libsystem_trace.dylib`_os_log_impl;libsystem_trace.dylib`_os_log;libsystem_trace.dylib`_os_log_impl_flatten_and_send;libsystem_trace.dylib`_os_log_fmt_flatten_object;libsystem_trace.dylib`_os_log_fmt_flatten_NSCF;Foundation`_NS_os_log_callback;CoreFoundation`-[NSSet descriptionWithLocale:indent:];CoreFoundation`CFStringAppend;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_release_internal_n 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_pop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_pop;libobjc.A.dylib`objc_autoreleasePoolPop 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`DYLD-STUB$$objc_autoreleasePoolPop 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_serial_drain 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`_voucher_create_with_mach_voucher 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_merge 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_mach_msg_drain 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_voucher_create_with_mach_voucher 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_event_loop_poke 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_lane_push 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_queue_wakeup 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_merge 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libsystem_pthread.dylib`___chkstk_darwin 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_drain 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211d4 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321100 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321114 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321118 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321130 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321148 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321248 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e321254 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211ac 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211c0 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;0x10e3211ec 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_worker_thread2;libdispatch.dylib`_dispatch_root_queue_drain;libdispatch.dylib`_dispatch_async_redirect_invoke;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_group_wake;libsystem_kernel.dylib`__ulock_wake 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh 2 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_kevent_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_item;libdispatch.dylib`_dispatch_mach_msg_async_reply_invoke;libdispatch.dylib`_dispatch_client_callout3;libxpc.dylib`_xpc_connection_call_reply_async;libxpc.dylib`_xpc_connection_reply_callout;ViewBridge`__108+[NSXPCSharedListener _endpointForListenerNamed:fromServiceNamed:instanceIdentifier:queue:async:completion:]_block_invoke.235;ViewBridge`whileHoldingLock;ViewBridge`__108+[NSXPCSharedListener _endpointForListenerNamed:fromServiceNamed:instanceIdentifier:queue:async:completion:]_block_invoke_2.236;ViewBridge`__45-[NSRemoteView advanceToConfigPhaseIfNeeded:]_block_invoke;ViewBridge`deferBlockOntoMainThread;libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward 1 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libsystem_kernel.dylib`__workq_kernreturn 220 +thread with id 4179971;libsystem_pthread.dylib`start_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 2 +thread with id 4179971;libsystem_kernel.dylib`__workq_kernreturn 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;IOKit`io_connect_method 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;IOKit`io_connect_method;libsystem_kernel.dylib`mach_msg2_trap 1263 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;IOKit`io_connect_method;libsystem_kernel.dylib`mach_msg2_internal 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;libsystem_c.dylib`DYLD-STUB$$mkdtempat_np 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;libsystem_pthread.dylib`___chkstk_darwin 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`IOConnectCallMethod;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOGPU`DYLD-STUB$$dispatch_semaphore_wait 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;IOKit`io_connect_method 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUCommandQueueSubmitCommandBuffers;libdispatch.dylib`dispatch_semaphore_wait 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;libsystem_blocks.dylib`_Block_object_assign 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;IOGPU`__copy_helper_block_e8_32o40o;libsystem_blocks.dylib`_Block_object_assign 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;libsystem_blocks.dylib`_cleanup_generic_captures 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_custom_copy_helper 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`DYLD-STUB$$malloc 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_malloc.dylib`_malloc_zone_malloc 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_call_copy_helpers_excp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];libsystem_blocks.dylib`_Block_copy 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:];IOGPU`DYLD-STUB$$_Block_copy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOKit`IOConnectCallMethod 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`IOGPUNotificationQueueWillSubmit 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOGPU`DYLD-STUB$$CFGetTypeID 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`DYLD-STUB$$bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer fillCommandBufferArgs:commandQueue:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`objc_msgSend$cmdBufArgsSize 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`-[__NSArrayM replaceObjectsInRange:withObjects:count:];libsystem_malloc.dylib`malloc_good_size 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`-[__NSArrayM replaceObjectsInRange:withObjects:count:];libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`-[__NSArrayM replaceObjectsInRange:withObjects:count:];CoreFoundation`-[__NSArrayM insertObjects:count:atIndex:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];libobjc.A.dylib`objc_release 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`-[__NSArrayM _mutate] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];libobjc.A.dylib`objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`DYLD-STUB$$object_getMethodImplementation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];libobjc.A.dylib`object_getMethodImplementation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:];CoreFoundation`_NSIsNSArray;libobjc.A.dylib`object_getMethodImplementation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];libsystem_pthread.dylib`pthread_mutex_lock 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`objc_msgSend$replaceObjectsInRange:withObjects:count: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`objc_msgSend$_submitCommandBuffers:count: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];libsystem_malloc.dylib`free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`_NSIsNSArray 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];CoreFoundation`-[__NSArrayM replaceObjectsInRange:withObjects:count:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;CoreFoundation`-[NSMutableArray replaceObjectsInRange:withObjectsFromArray:range:] 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;CoreFoundation`-[__NSArrayM getObjects:range:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`DYLD-STUB$$pthread_mutex_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`objc_msgSend$objectAtIndex: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandBuffer isCommitted] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_client_callout 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libdispatch.dylib`_dispatch_semaphore_wait_slow 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libdispatch.dylib`_dispatch_semaphore_wait_slow;libsystem_kernel.dylib`semaphore_wait_trap 108 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;AGXMetal13_3`AGX::ContextCommon::endCommand 14 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;AGXMetal13_3`AGX::RenderTileDispatchSWEndOfTile::dispatch 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;AGXMetal13_3`AGX::EndOfTileEmitter::emitEndOfTileArgumentsLate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;AGXMetal13_3`FenceEncoder::encode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon;AGXMetal13_3`AGX::FramebufferGen3_2::assignRenderRegisters 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::ResourceGroupUsage::reset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::ResourceGroupUsage::reset;libsystem_platform.dylib`_platform_memset 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::ResourceGroupUsage::reset;libsystem_malloc.dylib`DYLD-STUB$$_platform_bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::ResourceGroupUsage::reset;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::FramebufferGen3_1::finalizeStoreActions 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];libc++abi.dylib`operator delete 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::FramebufferGen3_2::assignRenderRegisters 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`FenceEncoder::encode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::Framebuffer::getBGOProgramVariant 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];AGXMetal13_3`AGX::RenderContext::emitSWEndOfTileIfNeeded 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];libsystem_malloc.dylib`free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:];libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];Metal`-[_MTLCommandEncoder dealloc];CoreFoundation`-[__NSCFConstantString release] 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];Metal`-[_MTLCommandEncoder dealloc];Metal`-[_MTLObjectWithLabel dealloc] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];Metal`DYLD-STUB$$objc_release 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];libobjc.A.dylib`objc_release 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];libobjc.A.dylib`objc_retain_x28 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext dealloc];Metal`-[_MTLObjectWithLabel dealloc] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext destroyImpl] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext destroyImpl];AGXMetal13_3`std::__1::__function::__func::destroy 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyRenderContext destroyImpl];AGXMetal13_3`AGX::Framebuffer::~Framebuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];libobjc.A.dylib`objc_msgSend 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];libsystem_platform.dylib`os_unfair_lock_lock 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`AGX::RenderContext::endRenderPassCommon 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];Metal`-[_MTLCommandEncoder device] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`AGX::Framebuffer::~Framebuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`AGX::ResourceGroupUsage::reset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:];libsystem_pthread.dylib`pthread_mutex_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:];CoreFoundation`-[__NSArrayM insertObject:atIndex:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:];Metal`MTLFailureTypeGetEnabled;Metal`MTLFailureTypeGetErrorModeType 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];CoreFoundation`DYLD-STUB$$objc_retain 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];IOGPU`-[IOGPUMetalCommandQueue device] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer device] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:] 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandQueue createTelemetryWithLabel:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`objc_msgSend$executeSynchronizationNotifications: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer setCommitted:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyRenderContext deferredEndEncoding:] 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`DYLD-STUB$$objc_msgSendSuper2 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyRenderContext destroyImpl] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];Metal`-[_MTLCommandBuffer commit] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];Metal`-[_MTLCommandBuffer errorOptions] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder] 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];IOGPU`-[IOGPUMetalCommandBuffer device] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`DYLD-STUB$$objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;IOKit`iokit_user_client_trap 33 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::BlitDispatchContext::endPreviousBlitCommand;AGXMetal13_3`AGX::ContextCommon::endCommand 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::BlitDispatchContext::endPreviousBlitCommand;AGXMetal13_3`AGX::BlitDispatchContextGen2::dispatchCoalescedSparseTextureShaderBatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::BlitDispatchContext::endPreviousBlitCommand;AGXMetal13_3`AGX::BlitDispatchContextGen2::endComputePass;AGXMetal13_3`AGX::BlitDispatchContextGen2::dispatchCoalescedSparseTextureShaderBatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::ResourceGroupUsage::reset;libsystem_malloc.dylib`_nanov2_free 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::ResourceGroupUsage::reset;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;libsystem_malloc.dylib`nanov2_try_free_default 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;AGXMetal13_3`AGX::BlitDispatchContextGen2::endComputePass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];AGXMetal13_3`AGX::BlitDispatchContext::commit;libsystem_malloc.dylib`free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext deferredEndEncoding];libsystem_malloc.dylib`_szone_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext dealloc];Metal`DYLD-STUB$$objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder];AGXMetal13_3`-[AGXG13GFamilyBlitContext dealloc];Metal`-[_MTLCommandEncoder dealloc];Metal`-[_MTLObjectWithLabel dealloc] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];CoreFoundation`-[__NSArrayM insertObject:atIndex:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:];CoreFoundation`-[__NSArrayM insertObject:atIndex:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandBuffer commit];CoreFoundation`objc_msgSend$insertObject:atIndex: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`DYLD-STUB$$pthread_mutex_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandQueue enqueueCommandBuffer:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];Metal`objc_msgSend$commitCommandBuffer:wake: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_Block_object_assign 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;AppleMetalOpenGLRenderer`__copy_helper_block_e8_32r40r 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`objc_msgSend$endEncoding 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commitEncoder] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy;AppleMetalOpenGLRenderer`std::__1::__function::__value_func::~__value_func[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;AppleMetalOpenGLRenderer`__copy_helper_block_e8_32r40r48r56r;libsystem_malloc.dylib`nanov2_malloc 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;AppleMetalOpenGLRenderer`__copy_helper_block_e8_32r40r48r56r;libsystem_blocks.dylib`_Block_object_assign 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_copy_helpers_excp;libsystem_blocks.dylib`_Block_object_assign 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy;AppleMetalOpenGLRenderer`std::__1::function::operator() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy;AppleMetalOpenGLRenderer`std::__1::function::operator();AppleMetalOpenGLRenderer`GLRResource::incrementBusy 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy;AppleMetalOpenGLRenderer`std::__1::__function::__func::operator() 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::endRenderPass 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::endRenderPass;AGXMetal13_3`-[AGXG13GFamilyRenderContext endEncoding];IOGPU`-[IOGPUMetalCommandEncoder endEncoding];libobjc.A.dylib`objc_msgSend 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::endRenderPass;AGXMetal13_3`-[AGXG13GFamilyRenderContext endEncoding];IOGPU`-[IOGPUMetalCommandEncoder endEncoding];Metal`-[_MTLCommandBuffer errorOptions] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`GLDContextRec::endRenderPass;AGXMetal13_3`-[AGXG13GFamilyRenderContext endEncoding];Metal`-[_MTLCommandEncoder endEncoding] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libobjc.A.dylib`objc_msgSend 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;IOSurface`DYLD-STUB$$pthread_once 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AGXMetal13_3`-[AGXG13GFamilyRenderContext setColorStoreAction:atIndex:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;IOKit`IOConnectTrap2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;AppleMetalOpenGLRenderer`std::__1::__function::__value_func::__value_func[abi:v160006](std::__1::__function::__value_func const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libdispatch.dylib`_dispatch_sema4_wait 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`objc_msgSend$commit 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted] 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesBusy 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;Metal`objc_msgSend$submitCommandBuffer: 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;IOSurface`IOSurfaceIncrementUseCount 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`DYLD-STUB$$objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::flushResource;AppleMetalOpenGLRenderer`GLDContextRec::flushPreprocessingCommandEncoders 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;libsystem_platform.dylib`os_unfair_lock_lock 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`IOGPUMetalResourcePoolCreatePooledResource 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`DYLD-STUB$$os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;Metal`MTLValidationEnabled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageBeginSegment 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageBeginSegment;libsystem_platform.dylib`_platform_memset 14 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`ioGPUResourceListAddHashValue 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`_ioGPUResourceListAddResourceEntry 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`DYLD-STUB$$IOGPUMetalCommandBufferStorageAllocResourceAtIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;IOGPU`IOGPUResourceListAddResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::beginComputePass;AGXMetal13_3`objc_msgSend$ownedByParallelEncoder 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::bindComputeResources 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::bindComputeResources;IOGPU`-[IOGPUMetalResource resourceOptions];IOGPU`-[IOGPUMetalResource hazardTrackingMode] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::bindComputeResources;IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitUSCStateLoader::emitComputeProgramVariantArguments 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitUSCStateLoader::emitComputeProgramVariantArguments;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::BlitDispatchContext::checkDependentBlits 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`AGX::Device::findOrCreateBlitProgramVariant;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;Metal`-[_MTLCommandBuffer skipRender] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`DYLD-STUB$$_Block_object_dispose 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;AGXMetal13_3`objc_msgSend$skipRender 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContext::blitCDMBuffer;IOGPU`-[IOGPUMetalResource resourceOptions] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::BlitDispatchContextGen2::beginComputePassIfNeeded 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`-[AGXG13GFamilyBlitContext copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:];AGXMetal13_3`AGX::SpillInfoGen2::checkSpillParamsForCompute 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:] 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`IOGPUDeviceGetNextGlobalTraceID 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`MTLAtomicIncrement 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLObjectWithLabel init] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`IOGPUMetalCommandBufferStoragePoolCreateStorage;IOGPU`_iogpuMetalCommandBufferStorageSetupShmems;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`IOGPUMetalCommandBufferStoragePoolCreateStorage;IOGPU`_iogpuMetalCommandBufferStorageSetupShmems;IOGPU`IOGPUMetalDeviceShmemPoolCreateShmem 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`objc_msgSend$commandBufferErrorOptions 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`objc_msgSend$device 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];libobjc.A.dylib`objc_opt_isKindOfClass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`DYLD-STUB$$objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLObjectWithLabel init] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`-[IOGPUMetalCommandQueue device] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];libobjc.A.dylib`objc_opt_isKindOfClass 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`iogpumetal_atomic_add 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`IOGPUDeviceGetNextGlobalTraceID 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`DYLD-STUB$$objc_opt_isKindOfClass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];libc++abi.dylib`operator new 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`_tiny_check_and_zero_inline_meta_from_freelist 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`rack_get_thread_index 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_platform.dylib`_platform_memset 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_platform.dylib`__bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_malloc.dylib`szone_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer .cxx_construct] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyDevice alertCommandBufferActivityStart] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;libobjc.A.dylib`object_cxxConstructFromClass 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;libobjc.A.dylib`AutoreleasePoolPage::push 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;libobjc.A.dylib`objc_autoreleasePoolPop 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:];libobjc.A.dylib`objc_msgSend 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:];Metal`-[_MTLCommandEncoder initWithCommandBuffer:];libobjc.A.dylib`-[NSObject init] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:];libobjc.A.dylib`objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];libsystem_malloc.dylib`szone_malloc_should_clear 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_platform.dylib`_platform_memset 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`DYLD-STUB$$_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`small_malloc_should_clear 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder globalTraceObjectID] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];IOGPU`-[IOGPUMetalCommandEncoder globalTraceObjectID];IOGPU`IOGPUDeviceGetNextGlobalTraceID 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`-[AGXG13GFamilyBlitContext initWithCommandBuffer:descriptor:];AGXMetal13_3`AGX::BlitDispatchContextGen2::BlitDispatchContextGen2 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`objc_msgSend$globalTraceObjectID 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];libsystem_malloc.dylib`_malloc_zone_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`objc_msgSend$device 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer blitCommandEncoderCommon:];AGXMetal13_3`AGX::BlitDispatchContextGen2::BlitDispatchContextGen2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AGXMetal13_3`AGX::BlitCounterSamplingContextGen1::BlitCounterSamplingContextGen1 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::startPreprocessingBlitEncoderIfNeeded;AppleMetalOpenGLRenderer`GLRResourceListPool::newResourceList 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;Metal`MTLDispatchListAppendBlock;libsystem_platform.dylib`_platform_memmove 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`DYLD-STUB$$malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AGXMetal13_3`AGX::BlitContext::copyBufferToBuffer 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;AppleMetalOpenGLRenderer`GLDDeviceRec::newResourceList 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;libobjc.A.dylib`objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`gldBufferSubData;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;IOGPU`-[IOGPUMetalResource virtualAddress] 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`objc_msgSend$contents 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`GLDContextRec::getPreprocessingCommandBuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`GLDBufferRec::load 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`GLDShareGroupRec::getBufferResourceFromFreePool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBufferSubData_Exec;AppleMetalOpenGLRenderer`DYLD-STUB$$objc_autoreleasePoolPush 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBindBufferBase_Exec;GLEngine`gleBindBufferObject 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`gleTransferBufferBindingToGLD 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`gleBindBufferObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::UniformBuffer::SetData;GLEngine`glBindBuffer_Exec;GLEngine`gleBindBufferObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:] 33 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass 11 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;Metal`MTLValidationEnabled 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;libobjc.A.dylib`objc_retain 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`DYLD-STUB$$os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`DYLD-STUB$$os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`IOGPUMetalResourcePoolCreatePooledResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`DYLD-STUB$$objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageBeginSegment;libsystem_platform.dylib`_platform_memset 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageBeginSegment;IOGPU`_mtlIOGPUCommandBufferStorageBeginSegmentList 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`DYLD-STUB$$bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;AGXMetal13_3`DYLD-STUB$$IOGPUMetalCommandBufferStorageAllocResourceAtIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextCommon::newCommand;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer 7 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::DataBufferAllocator::initializeDataBuffer;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;IOGPU`IOGPUMetalResourcePoolCreatePooledResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::FramebufferGen3_2::addGPUResources 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::FramebufferGen3_2::addGPUResources;IOGPU`DYLD-STUB$$IOSurfaceBindAccel 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::RenderUSCStateLoader::emitBackgroundObjectArguments;AGXMetal13_3`void AGX::CommonUSCStateLoader::emitCommon;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::EndOfTileEmitter::emitEndOfTileArgumentsEarly 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::RenderContext::emitVisibilityClear;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;IOGPU`ioGPUResourceListAddHashValue 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::ContextSwitcherGen3::setupRenderCommand 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`AGX::DataBufferAllocator::grow;IOGPU`IOGPUMetalCommandBufferStorageAllocResourceAtIndex;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::RenderContext::beginRenderPass;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer 11 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Framebuffer::configurePBE 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Framebuffer::configurePBE;IOSurface`IOSurfaceGetSliceCount 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Framebuffer::configurePBE;AGXMetal13_3`DYLD-STUB$$IOSurfaceGetBaseAddressOfPlane 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Framebuffer::configurePBE;IOSurface`IOSurfaceClientGetSliceCount 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::PBEStateEncoderGen7::StateFields::StateFields 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Device::populateEndOfTileProgramVariants;AGXMetal13_3`AGX::G13::EndOfTileProgramVariant* AGX::Device::tryFindOrCreateDriverProgramVariant 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Device::populateEndOfTileProgramVariants;AGXMetal13_3`AGX::G13::EndOfTileProgramVariant* AGX::Device::tryFindOrCreateDriverProgramVariant;AGXMetal13_3`AGX::Program::getOrCreateVariantEntry;AGXMetal13_3`VectorMap::VariantEntry, 4u>::operator[](AGX::EndOfTileProgramKey const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::G13::BackgroundObjectProgramVariant* AGX::Device::tryFindOrCreateDriverProgramVariant;AGXMetal13_3`AGX::Program::getOrCreateVariantEntry;AGXMetal13_3`VectorMap::VariantEntry, 4u>::operator[](AGX::BackgroundObjectProgramKey const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::G13::BackgroundObjectProgramVariant* AGX::Device::tryFindOrCreateDriverProgramVariant;AGXMetal13_3`VectorMap::VariantEntry, 4u>::operator[](AGX::BackgroundObjectProgramKey const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;IOSurface`IOSurfaceGetSliceCount 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`unsigned long AGX::Texture::getStride 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`AGX::Program::getOrCreateVariantEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`AGX::Framebuffer::Framebuffer;AGXMetal13_3`DYLD-STUB$$IOSurfaceGetBaseAddressOfPlane 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3_2::FramebufferGen3_2;AGXMetal13_3`void std::__1::vector::assign 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;AGXMetal13_3`AGX::PassiveResourceGroupUsage::bindPassiveResource;libsystem_malloc.dylib`nanov2_malloc 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;AGXMetal13_3`AGX::PassiveResourceGroupUsage::bindPassiveResource;libc++abi.dylib`operator new;libsystem_malloc.dylib`nanov2_allocate_outlined;libsystem_malloc.dylib`nanov2_find_block_and_allocate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;AGXMetal13_3`unsigned long AGX::Texture::getStride 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;IOSurface`IOSurfaceGetBaseAddressOfPlane 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;AGXMetal13_3`AGX::Texture::getGPUVirtualAddress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;IOSurface`IOSurfaceClientGetBytesPerRowOfPlane 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;AGXMetal13_3`AGX::Texture::sumLevelSizesTiled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`AGX::ResourceGroupUsage::setAndBindRenderTarget;IOSurface`IOSurfaceClientGetBaseAddressOfPlane 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`unsigned long AGX::Texture::getLevelOffset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage;AGXMetal13_3`unsigned long AGX::Texture::getPlaneSize 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig 7 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig;libobjc.A.dylib`objc_msgSend 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig;IOGPU`-[IOGPUMetalResource resourceOptions] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig;IOGPU`-[IOGPUMetalResource resourceOptions];IOGPU`-[IOGPUMetalTexture hazardTrackingMode] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig;IOGPU`-[IOGPUMetalTexture hazardTrackingMode] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::FramebufferDriverConfig::FramebufferDriverConfig;AGXMetal13_3`AGX::Texture::getGPUVirtualAddress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];IOGPU`-[IOGPUMetalCommandEncoder globalTraceObjectID];IOGPU`IOGPUDeviceGetNextGlobalTraceID 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];Metal`-[MTLRenderPassDescriptorInternal validate:width:height:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];Metal`-[MTLRenderPassDescriptorInternal validate:width:height:];Metal`objc_msgSend$limits 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];libsystem_platform.dylib`_platform_memmove 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];libobjc.A.dylib`objc_msgSend 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:];Metal`-[_MTLCommandEncoder initWithCommandBuffer:];libobjc.A.dylib`-[NSObject init] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:];Metal`objc_msgSend$isStatEnabled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];libsystem_platform.dylib`_platform_memset 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::Texture::getGPUVirtualAddress 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`-[AGXG13GFamilyDevice maxThreadgroupMemoryLength] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];Metal`objc_msgSend$familySupportsLayeredRendering 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];AGXMetal13_3`AGX::ClipRectContextGen3::setViewports 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];Metal`-[_MTLCommandEncoder initWithCommandBuffer:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer:];Metal`-[MTLRenderPassColorAttachmentDescriptorArrayInternal _descriptorAtIndex:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];libsystem_platform.dylib`__bzero 29 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];libsystem_platform.dylib`_platform_memset 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`AGX::FramebufferCompilerConfigGen3::buildDrawBufferState 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`AGX::ESLInstructionEncoderGen2_3::SpecLM::setFragmentImageBlockData 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];IOGPU`-[IOGPUMetalCommandEncoder initWithCommandBuffer:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`std::__1::__function::__func::destroy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`objc_msgSend$globalTraceObjectID 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];Metal`-[_MTLCommandBuffer globalTraceObjectID] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];Metal`-[MTLRenderPassDescriptorInternal _descriptorPrivate] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];libsystem_malloc.dylib`_malloc_zone_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];Metal`-[MTLRenderPassDescriptorInternal rasterizationRateMap] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:];AGXMetal13_3`AGX::FramebufferGen3::updateResourceGroupUsage 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`IOGPUDeviceGetNextGlobalTraceID 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`IOGPUMetalCommandBufferStoragePoolCreateStorage;IOGPU`_iogpuMetalCommandBufferStorageSetupShmems;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];Metal`objc_msgSend$device 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];IOGPU`DYLD-STUB$$os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];IOGPU`IOGPUMetalCommandBufferStoragePoolCreateStorage 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer initWithQueue:retainedReferences:];Metal`-[_MTLCommandBuffer initWithQueue:retainedReferences:synchronousDebugMode:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list;libsystem_malloc.dylib`tiny_free_list_add_ptr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list;libsystem_malloc.dylib`_tiny_check_and_zero_inline_meta_from_freelist 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`_objc_rootAllocWithZone;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`rack_get_thread_index 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_platform.dylib`_platform_memset 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];IOGPU`objc_msgSend$initWithQueue:retainedReferences:synchronousDebugMode: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];AGXMetal13_3`DYLD-STUB$$bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;AGXMetal13_3`-[AGXG13GFamilyCommandQueue commandBufferWithUnretainedReferences];IOGPU`-[IOGPUMetalCommandBuffer initWithQueue:retainedReferences:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;IOGPU`-[IOGPUMetalCommandBuffer setLabel:];libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;IOGPU`-[IOGPUMetalCommandBuffer setLabel:];CoreFoundation`-[__NSCFConstantString copy] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource;AppleMetalOpenGLRenderer`std::__1::__hash_iterator std::__1::__hash_table::find 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource;AppleMetalOpenGLRenderer`GLDObject::retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource;AppleMetalOpenGLRenderer`GLDDeviceRec::lookupGLRDeviceDrawableForSid;libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;Metal`MTLPixelFormatGetInfoForDevice;Metal`objc_msgSend$isFloat32FilteringSupported 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;Metal`-[MTLTextureDescriptorInternal sampleCount] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::buildRenderPassDescriptor;libobjc.A.dylib`0x0000000184f8f8b4 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;libobjc.A.dylib`objc_msgSend 9 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::addRenderPassResources;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource;AppleMetalOpenGLRenderer`GLDDeviceRec::lookupGLRDeviceDrawableForSid;libsystem_pthread.dylib`pthread_mutex_lock 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::addRenderPassResources;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource;AppleMetalOpenGLRenderer`GLDObject::retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::addRenderPassResources;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args;libsystem_malloc.dylib`nanov2_malloc 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::addRenderPassResources;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::addRenderPassResources;libobjc.A.dylib`objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::resumeCurrentQueries 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`objc_msgSend$setTexture: 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;Metal`-[MTLRenderPassDescriptorInternal depthAttachment] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;libobjc.A.dylib`objc_autorelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;Metal`-[MTLRenderPassDepthAttachmentDescriptorInternal setLevel:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`objc_msgSend$initWithCommandBuffer:descriptor:subEncoderIndex:framebuffer: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;Metal`-[MTLRenderPassDescriptorInternal setOpenGLModeEnabled:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;Metal`-[MTLRenderPassStencilAttachmentDescriptorInternal texture] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;IOGPU`DYLD-STUB$$objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`-[AGXG13GFamilyRenderContext initWithCommandBuffer:descriptor:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`gldMTLRespondsToSelector;libobjc.A.dylib`cache_getImp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AGXMetal13_3`objc_msgSend$commitEncoder 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;Metal`-[MTLRenderPassColorAttachmentDescriptorInternal setTexture:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass;AppleMetalOpenGLRenderer`objc_msgSend$setResolveTexture: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;AppleMetalOpenGLRenderer`GLDContextRec::setTexturesAndSamplersInternal(PipelineType, unsigned int, SetSamplerStateIMPCache*, SetSamplerStateLODIMPCache*, SetTextureIMPCache*)::'lambda'(unsigned int, unsigned int)::operator();AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;AppleMetalOpenGLRenderer`GLDContextRec::setTexturesAndSamplersInternal(PipelineType, unsigned int, SetSamplerStateIMPCache*, SetSamplerStateLODIMPCache*, SetTextureIMPCache*)::'lambda'(unsigned int, unsigned int)::operator();AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args;libc++abi.dylib`operator new;libsystem_malloc.dylib`nanov2_allocate_outlined;libsystem_malloc.dylib`nanov2_find_block_and_allocate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;AppleMetalOpenGLRenderer`GLDContextRec::setTexturesAndSamplersInternal(PipelineType, unsigned int, SetSamplerStateIMPCache*, SetSamplerStateLODIMPCache*, SetTextureIMPCache*)::'lambda'(unsigned int, unsigned int)::operator();AppleMetalOpenGLRenderer`GLDSamplerRec::getMetalSamplerState 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;IOGPU`-[IOGPUMetalTexture mipmapLevelCount] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderSamplersAndTextures;Metal`-[MTLSamplerDescriptorInternal magFilter] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`std::__1::__hash_iterator std::__1::__hash_table::find 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`AGX::RenderContext::setRenderPipelineStateCommon 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`AGX::RenderContext::setRenderPipelineStateCommon;AGXMetal13_3`AGX::SpillInfoGen2::checkSpillParamsForCompute 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderUniformBuffers 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;libc++abi.dylib`operator new 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderVertexBuffers;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderVertexBuffers;AppleMetalOpenGLRenderer`GLDContextRec::prepareResourceForGPUAccess;AppleMetalOpenGLRenderer`GLRResourceList::addResource;AppleMetalOpenGLRenderer`std::__1::pair std::__1::__hash_table::__emplace_unique_key_args;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`DYLD-STUB$$IOGPUResourceListAddResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`AGX::ClipRectContextGen3::setScissors 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`-[AGXG13GFamilyRenderContext setViewports:count:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`-[AGXG13GFamilyRenderContext setCullMode:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderViewports;AGXMetal13_3`-[AGXG13GFamilyRenderContext setViewports:count:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;IOGPU`IOGPUResourceListAddResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`objc_msgSend$setViewports:count: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`-[AGXG13GFamilyRenderContext setFrontFacingWinding:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AGXMetal13_3`-[AGXG13GFamilyRenderContext setDepthStencilState:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderState;AppleMetalOpenGLRenderer`GLDContextRec::setRenderPrimitiveRestart;AppleMetalOpenGLRenderer`gldMTLRespondsToSelector 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`void AGX::CommonUSCStateLoader::emitCommon 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`void AGX::CommonUSCStateLoader::emitCommon;AGXMetal13_3`void AGX::ESLStateLoadEncoderGen1::emitUscStateLoad 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;libobjc.A.dylib`objc_retain 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`AGX::Mempool::addToResourceList 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`AGX::RenderContext::bindFragmentTextureResources;IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`AGX::RenderUSCStateLoader::extractProgramVariantArgumentDirtyBits 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::RenderContext::encodeAndEmitRenderState;AGXMetal13_3`AGX::DirtyArguments AGX::getDirtyArguments 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];Metal`MTLResourceListAddResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];IOGPU`_ioGPUResourceListAddResourceEntry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:];AGXMetal13_3`AGX::Mempool::addToResourceList 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_custom_copy_helper 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;Metal`MTLDispatchListAppendBlock;libsystem_blocks.dylib`DYLD-STUB$$malloc 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;Metal`MTLDispatchListAppendBlock;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext setRenderPipelineState:] 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;libobjc.A.dylib`-[NSObject methodForSelector:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderPointSize 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;libobjc.A.dylib`object_getMethodImplementation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`objc_msgSend$methodForSelector: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderPipelineState 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::getCommandBuffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderPolygonMode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::setRenderPrimitiveRestart 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer renderCommandEncoderWithDescriptor:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AppleMetalOpenGLRenderer`GLDContextRec::resumeCurrentQueries 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldRenderVertexArray;AGXMetal13_3`-[AGXG13GFamilyRenderContext setProvokingVertexMode:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleDoDrawDispatchCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleDoDrawDispatchCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleDoDrawDispatchCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentVertexArray 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleDoDrawDispatchCoreGL3;GLEngine`gleUpdateDeferredStateGL3 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleDoDrawDispatchCoreGL3;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentVertexArray 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`GLDContextRec::beginRenderPass 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AGXMetal13_3`-[AGXG13GFamilyRenderContext drawIndexedPrimitives:indexCount:indexType:indexBuffer:indexBufferOffset:instanceCount:baseVertex:baseInstance:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;GLEngine`gleUpdateDispatchJIT 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;GLEngine`glDrawElements_ACC_GL3Exec;AppleMetalOpenGLRenderer`gldUpdateDispatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;Sample`std::__1::__compressed_pair>::first[abi:v160006]() const 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;AppleMetalOpenGLRenderer`gldRenderVertexArray 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::DrawTriangles;Sample`std::__1::unique_ptr>::operator->[abi:v160006]() const;Sample`std::__1::__compressed_pair>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator* 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator* 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*= 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call 20 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call;Sample`glm::vec::vec 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::vec::vec 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator*;Sample`glm::vec::vec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+ 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+;Sample`glm::vec& glm::vec::operator+= 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+;Sample`glm::vec& glm::vec::operator+=;Sample`glm::detail::compute_vec4_add::call 12 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+;Sample`glm::vec& glm::vec::operator+=;Sample`glm::detail::compute_vec4_add::call;Sample`glm::vec::vec 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+;Sample`DYLD-STUB$$glm::detail::compute_vec4_add::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec glm::operator+;Sample`glm::detail::compute_vec4_add::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) const 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec<4, float, (glm::qualifier)0>::operator[](int) const 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`DYLD-STUB$$glm::mat::length 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`glm::vec::length 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`DYLD-STUB$$glm::vec::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`DYLD-STUB$$glm::vec& glm::vec::operator*= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::operator*;Sample`DYLD-STUB$$glm::vec& glm::vec::operator+= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator* 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call;Sample`glm::vec::vec 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::vec::vec 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator*;Sample`glm::vec::vec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec<4, float, (glm::qualifier)0>::operator[](int) 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec<3, float, (glm::qualifier)0>::operator[](int) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator+;Sample`glm::vec& glm::vec::operator+= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::operator+;Sample`glm::vec& glm::vec::operator+=;Sample`glm::detail::compute_vec4_add::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`glm::vec glm::normalize;Sample`glm::detail::compute_normalize::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::rotate;Sample`DYLD-STUB$$glm::vec::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec glm::normalize;Sample`glm::detail::compute_normalize::call;Sample`glm::vec glm::operator* 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec glm::normalize;Sample`glm::detail::compute_normalize::call;Sample`float glm::dot 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec glm::normalize;Sample`glm::detail::compute_normalize::call;Sample`float glm::dot;Sample`glm::detail::compute_dot::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec<4, float, (glm::qualifier)0>::operator[](int) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::detail::compute_cross::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`float glm::dot;Sample`glm::detail::compute_dot::call;Sample`glm::vec glm::operator* 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec glm::cross;Sample`glm::detail::compute_cross::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`DYLD-STUB$$glm::mat::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::mat glm::lookAt;Sample`glm::mat glm::lookAtRH;Sample`glm::vec::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getViewMatrix;Sample`glm::vec glm::operator+ 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::translate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::translate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call;Sample`glm::vec::vec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::translate;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::vec::vec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::translate;Sample`glm::vec glm::operator+ 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::translate;Sample`DYLD-STUB$$glm::mat::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::vec<4, float, (glm::qualifier)0>::operator[](int) const 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getProjectionMatrix 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getProjectionMatrix;Sample`glm::mat glm::ortho;Sample`glm::mat glm::orthoRH_NO 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`CameraClass::getProjectionMatrix;Sample`glm::mat glm::ortho;Sample`glm::mat glm::orthoRH_NO;Sample`glm::vec<4, float, (glm::qualifier)0>::operator[](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) const 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::vec<3, float, (glm::qualifier)0>::operator[](int) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::scale;Sample`glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat glm::scale;Sample`glm::vec glm::operator*;Sample`glm::vec& glm::vec::operator*=;Sample`glm::detail::compute_vec4_mul::call 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::vec glm::operator+ 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::vec glm::operator* 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::vec glm::operator+ 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`DYLD-STUB$$glm::mat<4, 4, float, (glm::qualifier)0>::operator[](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Util::ConvertToUniformBufferDataUsingCameraMatrix;Sample`glm::vec::vec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineStateDescriptor 11 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineStateDescriptor;libobjc.A.dylib`class_respondsToSelector_inst 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;CoreFoundation`CFDictionaryGetValue 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;CoreFoundation`CFDictionaryGetValue;CoreFoundation`___CFBasicHashFindBucket_Linear;libsystem_platform.dylib`_platform_memcmp 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;CoreFoundation`CFDictionaryGetValue;CoreFoundation`___CFBasicHashFindBucket_Linear;AppleMetalOpenGLRenderer`_renderPipelineKeyEqual 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;AppleMetalOpenGLRenderer`DYLD-STUB$$memcmp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;CoreFoundation`CFBasicHashFindBucket 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineState;AppleMetalOpenGLRenderer`GLDDeviceRec::getRenderPipelineStateFromKey;AGXMetal13_3`-[AGXG13GFamilyDevice newRenderPipelineStateWithDescriptor:options:reflection:error:];AGXMetal13_3`AGX::UserCommonShaderFactory::createRenderPipeline(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, MTLRenderPipelineReflection**, NSError**, void ;AGXMetal13_3`AGX::G13::FragmentProgramVariant* AGX::UserCommonShaderFactory::createFragmentProgramVariant(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, AGXG13GFamilyBinaryArchive*, NSArray*, AGX::G13::FragmentProgram*, AGX::VertexProgramVaryings const*, NSObject*, bool, void ;AGXMetal13_3`invocation function for block in AGX::G13::FragmentProgramVariant* AGX::UserCommonShaderFactory::createFragmentProgramVariant(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, AGXG13GFamilyBinaryArchive*, NSArray*, AGX::G13::FragmentProgram*, AGX::VertexProgramVaryings const*, NSObject*, bool, void ;AGXMetal13_3`invocation function for block in AGX::UserCommonShaderFactory::createRenderPipeline(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, MTLRenderPipelineReflection**, NSError**, void ;AGXMetal13_3`void AGX::UserCommonShaderFactory::createVertexStageAndLinkPipeline(_MTLFunction*, AGX::G13::FragmentProgramVariant*, ReflectionKey, _MTLFunction*, _MTLFunction*, _MTLFunction*, NSArray*, NSArray*, NSArray*, NSArray*, std::__1::shared_ptr, std::__1::shared_ptr, std::__1::shared_ptr, std::__1::shared_ptr, AGXG13GFamilyDevice*, NSObject*, NSObject*, NSObject*, MTLRenderPipelineDescriptor*, unsigned long, bool, bool, unsigned long long, NSMutableDictionary*, void ;AGXMetal13_3`AGX::UserCommonShaderFactory::createVertexProgramVariant(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, AGXG13GFamilyBinaryArchive*, NSArray*, AGX::G13::VertexProgram*, AGX::G13::FragmentProgramVariant*, NSObject*, NSObject*, bool, void ;AGXMetal13_3`invocation function for block in AGX::UserCommonShaderFactory::createVertexProgramVariant(MTLRenderPipelineDescriptor*, AGXG13GFamilyDevice*, unsigned long, AGXG13GFamilyBinaryArchive*, NSArray*, AGX::G13::VertexProgram*, AGX::G13::FragmentProgramVariant*, NSObject*, NSObject*, bool, void ;AGXMetal13_3`invocation function for block in void AGX::UserCommonShaderFactory::createVertexStageAndLinkPipeline(_MTLFunction*, AGX::G13::FragmentProgramVariant*, ReflectionKey, _MTLFunction*, _MTLFunction*, _MTLFunction*, NSArray*, NSArray*, NSArray*, NSArray*, std::__1::shared_ptr, std::__1::shared_ptr, std::__1::shared_ptr, std::__1::shared_ptr, AGXG13GFamilyDevice*, NSObject*, NSObject*, NSObject*, MTLRenderPipelineDescriptor*, unsigned long, bool, bool, unsigned long long, NSMutableDictionary*, void ;AGXMetal13_3`void AGX::RenderPipelineFactory::createPipeline;AGXMetal13_3`AGX::UserCommonShaderFactory::getRenderPipelinePerformanceStatistics;AGXMetal13_3`AGX::UserShaderFactory::createPerformanceStatisticsDictionary;CoreFoundation`-[__NSDictionaryM setObject:forKey:];CoreFoundation`objc_msgSend$hash 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;libobjc.A.dylib`objc_msgSend 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;AppleMetalOpenGLRenderer`objc_msgSend$supportsUnalignedVertexFetch 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;AppleMetalOpenGLRenderer`glrConvertVertexElementType 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;Metal`-[_MTLDevice supportsUnalignedVertexFetch] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayDescriptor 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState(unsigned int, unsigned long long const*, unsigned int)::$_0::operator();AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState(unsigned int, unsigned long long const*, unsigned int)::$_0::operator();AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`MTLPixelFormatGetInfoForFeatureSetQuery 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState(unsigned int, unsigned long long const*, unsigned int)::$_0::operator();AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState;AppleMetalOpenGLRenderer`GLDContextRec::updateTextureState(unsigned int, unsigned long long const*, unsigned int)::$_0::operator();AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`adjustPixelFormatForiOSDevice 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentTextures 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentTextures;AppleMetalOpenGLRenderer`GLDSamplerRec::finalizeSamplerState 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentPipelinePrograms 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentPipelinePrograms;AppleMetalOpenGLRenderer`GLDPipelineProgramRec::update 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::updateUniformBindings 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::loadCurrentSamplers 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDContextRec::buildPipelineStateDescriptor 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;CoreFoundation`CFDictionaryGetValue 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`DYLD-STUB$$CFDictionaryGetValue 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDTextureRec::loadUnlocked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;libsystem_platform.dylib`_platform_memcmp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`gldUpdateDispatch;AppleMetalOpenGLRenderer`GLDTextureRec::setsRGBDecode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`gleUpdateVertexFallbackProgram 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`gleUpdateFragmentFallbackProgram 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`gleSelectVertexSubmitFunc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`gleCreateTelemetryData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`DYLD-STUB$$cvmHashObjectGetKey 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;libCVMSPluginSupport.dylib`cvmHashObjectGetKey 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateDeferredStateGL3;GLEngine`gleSelectPrimitiveFunc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleSelectPrimitiveFunc 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleCreateTelemetryData 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`GLDContextRec::buildVertexArrayState 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateFragmentFallbackProgram 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateContextStateData 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateVertexFallbackProgram 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;AppleMetalOpenGLRenderer`GLDContextRec::updateUniformBindings 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`glValidateProgramARB_Exec;GLEngine`gleDoSelectiveDispatchNoErrorCoreGL3;GLEngine`gleUpdateContextStateBuffers;GLEngine`gleUpdateContextStateData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Validate;GLEngine`DYLD-STUB$$os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleUpdateCurrentProgramState 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleUpdateCurrentProgramState;GLEngine`gleUpdateInverseNeeds 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleUpdateCurrentProgramState;GLEngine`gleVPChangedCore 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleUpdateCurrentProgramState;GLEngine`gleFPChanged 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLRendererFloat`gldUnbindPipelineProgram 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleVPChangedCore 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;GLEngine`gleVPChanged 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleUseProgramObject;AppleMetalOpenGLRenderer`gldUnbindPipelineProgram 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`glUseProgramObjectARB_Exec;GLEngine`gleResetSubroutineUniforms 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Program::Bind;GLEngine`gleUseProgramObject 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Texture::Bind;GLEngine`glGetIntegerv_Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Texture::Bind;GLEngine`glGetIntegerv_Exec;GLEngine`gleGetState 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Texture::Bind;GLEngine`glBindTexture_Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Texture::Bind;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::Texture::Bind;GLEngine`gleGetState 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::Bind;GLEngine`glBindVertexArray_Exec;GLEngine`gleBindVertexArray;GLEngine`gleUpdateDrawArraysFuncs 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::Bind;GLEngine`glBindVertexArray_Exec;GLEngine`gleBindVertexArray;GLEngine`gleSetCurrentVertexHashObject 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`Core::VertexArray::Bind;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;libGL.dylib`glGetIntegerv 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;libGL.dylib`glActiveTexture 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;libGL.dylib`glDrawElements 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;libGL.dylib`glBindBufferBase 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`DYLD-STUB$$Core::IndexBuffer::GetCount 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;GLEngine`glGetProgramiv_Exec 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;GLEngine`glGetIntegerv_Exec 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`DYLD-STUB$$glBindTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`DYLD-STUB$$CameraClass::getProjectionMatrix 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;GLEngine`glBindBuffer_Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;Sample`DYLD-STUB$$glGetIntegerv 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;GLEngine`glBindBufferBase_Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Util::Image::DrawUsingCamera;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`Core::VertexArray::Bind 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Update;Sample`MapScene::Update;Sample`TileClass::drawTileImage;Sample`std::__1::unique_ptr>::operator->[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`_dispatch_group_wait_slow;libsystem_kernel.dylib`__ulock_wait 22 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`_dispatch_root_queue_poke_slow;libsystem_kernel.dylib`__workq_kernreturn 13 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`dispatch_group_async;libdispatch.dylib`_dispatch_Block_copy;libsystem_blocks.dylib`_Block_copy;libsystem_blocks.dylib`_call_custom_copy_helper 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`agxaAssertBufferIsValid 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`void agxsTwiddleAddressCommon 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`AGX::Texture::isLevelTiled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::getAddressingBaseLevelWidthInBlocks 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::isLevelTiled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgInitFunctionKey 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;IOKit`IOConnectCallMethod 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;IOKit`IOConnectCallMethod;IOKit`io_connect_method;libsystem_kernel.dylib`mach_msg2_trap 18 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;CoreFoundation`_CFRuntimeCreateInstance;CoreFoundation`DYLD-STUB$$malloc_default_zone 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;CoreFoundation`DYLD-STUB$$os_unfair_lock_lock_with_options 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;CoreFoundation`CFRetain;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`objc_msgSend$initWithDevice:remoteStorageResource:options:args:argsSize: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];libobjc.A.dylib`objc_msgSend 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`AGX::TextureGen4::texBaseAddressesUpdated 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`AGX::TextureGen4::texBaseAddressesUpdated;AGXMetal13_3`unsigned long AGX::Texture::getMipmapSize;AGXMetal13_3`AGX::Texture::sumLevelSizesTwiddled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`AGX::TextureGen4::texBaseAddressesUpdated;AGXMetal13_3`unsigned long AGX::Texture::getMipmapSize;AGXMetal13_3`AGX::Texture::sumLevelSizesTiled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`-[MTLTextureDescriptorInternal validateWithDevice:];Metal`MTLPixelFormatGetInfoForDevice;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`-[MTLTextureDescriptorInternal validateWithDevice:];Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`objc_msgSend$familySupportsNonPrivateDepthStencilTextures 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`-[AGXG13GFamilyTexture initImplWithDevice:Descriptor:iosurface:plane:slice:buffer:bytesPerRow:allowNPOT:sparsePageSize:isCompressedIOSurface:isHeapBacked:];libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list;libsystem_malloc.dylib`_tiny_check_and_zero_inline_meta_from_freelist 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`-[AGXG13GFamilyTexture finalizeTextureCreation];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalDevice allocBufferSubDataWithLength:options:alignment:heapIndex:bufferIndex:bufferOffset:];IOGPU`-[IOGPUMetalDevice allocBufferSubDataWithLength:options:alignment:heapIndex:bufferIndex:bufferOffset:parentAddress:parentLength:];IOGPU`IOGPUMetalSuballocatorAllocate;Metal`MTLRangeAllocatorAllocate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`MTLPixelFormatQuery::supportsFamily 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`objc_msgSend$supportsFamily: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;libobjc.A.dylib`objc_msgSend 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDObject::operator new;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`objc_msgSend$validateWithDevice: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDContextRec::testResource 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDContextRec::testResource;IOGPU`IOGPUDeviceTestEventFast 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::load;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::load;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`objc_msgSend$supportsFamily: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;libGLImage.dylib`glgConvertType 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`glrPixelSettings;AppleMetalOpenGLRenderer`gpusPixelBytes 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;Metal`MTLPixelFormatGetInfoForFeatureSetQuery 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;GLEngine`gleEvaluateTextureImageChange;libGFXShared.dylib`gfxEvaluateTextureForGeometryChange 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;GLEngine`gleEvaluateTextureImageChange;libGFXShared.dylib`gfxEvaluateTextureCore 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;libGFXShared.dylib`gfxSynchronizeTexLevelStorage 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;GLEngine`gleDirtyTextureLevelCurrentBindPointsGeom 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;libGFXShared.dylib`gfxCreatePluginTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;libGFXShared.dylib`gfxCreatePluginTexture;AppleMetalOpenGLRenderer`gldCreateSampler;AppleMetalOpenGLRenderer`GLDSamplerRec::initWithShareGroup;Metal`-[MTLSamplerDescriptorInternal setLabel:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;libGFXShared.dylib`gfxCreatePluginTexture;AppleMetalOpenGLRenderer`gldCreateSampler;AppleMetalOpenGLRenderer`GLDSamplerRec::initWithShareGroup;Metal`-[MTLSamplerDescriptorInternal init] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;libGFXShared.dylib`gfxCreatePluginTexture;AppleMetalOpenGLRenderer`GLDObject::init 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;GLRendererFloat`DYLD-STUB$$glsmCreateSampler 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;GLRendererFloat`gldCreateTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$ 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$;Sample`std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__string_hash::operator();Sample`unsigned long std::__1::__do_string_hash[abi:v160006](char const*, char const*);Sample`std::__1::__murmur2_or_cityhash::operator();Sample`std::__1::__murmur2_or_cityhash::__hash_len_33_to_64 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$;Sample`std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__string_hash::operator();Sample`unsigned long std::__1::__do_string_hash[abi:v160006](char const*, char const*);Sample`DYLD-STUB$$std::__1::__murmur2_or_cityhash::__hash_len_33_to_64 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$;Sample`std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__string_hash::operator();Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$;Sample`std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::equal_to, std::__1::allocator>>, std::__1::hash, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::equal_to, std::__1::allocator>>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`bool std::__1::operator==[abi:v160006]>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::find[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::__hash_iterator std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::equal_to, std::__1::allocator>>, std::__1::hash, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::equal_to, std::__1::allocator>>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`bool std::__1::operator==[abi:v160006]>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::data[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__allocation_guard>>>::__allocation_guard[abi:v160006]>(std::__1::allocator, unsigned long);Sample`std::__1::__allocation_guard>>>::__allocation_guard[abi:v160006]>(std::__1::allocator, unsigned long) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$YAML::StringCharSource::operator[](unsigned long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$YAML::StringCharSource::operator[](unsigned long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`DYLD-STUB$$YAML::StringCharSource::operator bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator*[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`DYLD-STUB$$int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`YAML::StringCharSource::operator bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator*[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator*[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`DYLD-STUB$$YAML::StringCharSource::operator bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator*[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::char_traits::length;libsystem_platform.dylib`_platform_strlen 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`DYLD-STUB$$std::__1::char_traits::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`std::__1::basic_string, std::__1::allocator>::empty[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::StringCharSource::operator bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator, 0>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator, 0>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair>::type, std::__1::__unwrap_ref_decay>::type> std::__1::make_pair[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator&&, std::__1::reverse_iterator&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::vector>::__annotate_new[abi:v160006](unsigned long) const;Sample`std::__1::vector>::capacity[abi:v160006]() const;Sample`std::__1::vector>::__end_cap[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::__split_buffer::__construct_at_end 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::basic_string, std::__1::allocator>::end[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::basic_string, std::__1::allocator>::end[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter std::__1::copy[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__copy[abi:v160006], std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__copy_trivial, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__copy_trivial>, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter, 0>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::__wrap_iter std::__1::__rewrap_iter[abi:v160006], char*, std::__1::__unwrap_iter_impl, true>>(std::__1::__wrap_iter, char*);Sample`std::__1::__unwrap_iter_impl, true>::__rewrap[abi:v160006](std::__1::__wrap_iter, char*);Sample`std::__1::__wrap_iter::operator+[abi:v160006](long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter std::__1::copy[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__copy[abi:v160006], std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__copy_trivial, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__copy_trivial>, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter, 0>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::__wrap_iter std::__1::__rewrap_iter[abi:v160006], char*, std::__1::__unwrap_iter_impl, true>>(std::__1::__wrap_iter, char*);Sample`std::__1::__unwrap_iter_impl, true>::__rewrap[abi:v160006](std::__1::__wrap_iter, char*);Sample`std::__1::decay>::__call(std::declval const&>()))>::type std::__1::__to_address[abi:v160006], void>(std::__1::__wrap_iter const&);Sample`std::__1::__to_address_helper, void>::__call[abi:v160006](std::__1::__wrap_iter const&);Sample`std::__1::pointer_traits>::to_address[abi:v160006](std::__1::__wrap_iter) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter::operator+[abi:v160006](long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::EmitFromEvents::BeginNode;Sample`std::__1::stack>>::empty[abi:v160006]() const;Sample`std::__1::deque>::empty[abi:v160006]() const;Sample`std::__1::deque>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree_const_iterator std::__1::__tree::__lower_bound 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::AliasManager::AliasManager;Sample`YAML::NodeEvents::AliasManager::AliasManager;Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::__tree::__tree;Sample`std::__1::__tree::__tree;Sample`std::__1::__compressed_pair*>, std::__1::allocator, void*>>>::__compressed_pair[abi:v160006]();Sample`std::__1::__compressed_pair*>, std::__1::allocator, void*>>>::__compressed_pair[abi:v160006]();Sample`std::__1::__compressed_pair_elem*>, 0, false>::__compressed_pair_elem[abi:v160006](std::__1::__value_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::unique_ptr std::__1::__tree::__construct_node;Sample`std::__1::allocator_traits, void*>>>::allocate[abi:v160006](std::__1::allocator, void*>>&, unsigned long);Sample`std::__1::allocator, void*>>::allocate[abi:v160006](unsigned long);Sample`std::__1::__libcpp_allocate[abi:v160006](unsigned long, unsigned long);Sample`void* std::__1::__libcpp_operator_new[abi:v160006](unsigned long);libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::unique_ptr, void*>, std::__1::__tree_node_destructor, void*>>>>::get[abi:v160006]() const;Sample`std::__1::__compressed_pair, void*>*, std::__1::__tree_node_destructor, void*>>>>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](YAML::SettingChangeBase*&, std::__1::__value_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::SettingChangeBase*) const;Sample`YAML::SettingChange::~SettingChange;Sample`YAML::SettingChange::~SettingChange;Sample`YAML::SettingChange::~SettingChange 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::SettingChangeBase*) const;Sample`YAML::SettingChange::~SettingChange;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::SettingChanges::SettingChanges;Sample`YAML::SettingChanges::SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::vector[abi:v160006]();Sample`std::__1::__compressed_pair>*, std::__1::allocator>>>::__compressed_pair[abi:v160006](std::nullptr_t&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair>*, std::__1::allocator>>>::__compressed_pair[abi:v160006](std::nullptr_t&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector::__construct_at_end 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](std::nullptr_t&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem::__compressed_pair_elem[abi:v160006](std::nullptr_t&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_delete[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector::__destroy_vector::__destroy_vector 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*);libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]() 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::data[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`std::__1::__shared_count::__add_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair(char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]() 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::convert::decode;Sample`YAML::Node::IsScalar;Sample`YAML::Node::Type;Sample`YAML::detail::node::type;Sample`YAML::detail::node_data::type 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::convert::decode;Sample`YAML::Node::IsScalar;Sample`YAML::Node::Type;Sample`std::__1::shared_ptr::operator->[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;libc++.1.dylib`std::__1::basic_string::operator= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node::add_dependency;Sample`YAML::detail::node::is_defined;Sample`YAML::detail::node_ref::is_defined 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]();Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::Node::Node;Sample`YAML::Node::Node 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;libc++.1.dylib`std::__1::basic_string::insert 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_string, std::__1::allocator> std::__1::operator+[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator>&&, char const*);libc++.1.dylib`std::__1::basic_string::append 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_string, std::__1::allocator> std::__1::operator+[abi:v160006], std::__1::allocator>(char const*, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](std::__1::basic_string, std::__1::allocator>&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_ostringstream::~basic_ostringstream;Sample`std::__1::basic_ostringstream::~basic_ostringstream;Sample`std::__1::basic_stringbuf::~basic_stringbuf 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;libc++.1.dylib`DYLD-STUB$$operator delete 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAMLReader::convertYAMLTileToImage;libc++.1.dylib`std::__1::to_string 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<< 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 7 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`bool YAML::RegEx::IsValidSource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`DYLD-STUB$$int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator++[abi:v160006]() 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpRange 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$YAML::StringCharSource::operator[](unsigned long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$YAML::StringCharSource::operator+ 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`DYLD-STUB$$int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`DYLD-STUB$$int YAML::RegEx::MatchOpSeq 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::Match 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::char_traits::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::StringCharSource::operator bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`DYLD-STUB$$YAML::StringCharSource::operator++ 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator, 0>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`decltype(std::__1::__unwrap_iter_impl, false>::__unwrap(std::declval>())) std::__1::__unwrap_iter[abi:v160006], std::__1::__unwrap_iter_impl, false>, 0>(std::__1::reverse_iterator) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator, 0>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::__rewrap_iter[abi:v160006], std::__1::reverse_iterator, std::__1::__unwrap_iter_impl, false>>(std::__1::reverse_iterator, std::__1::reverse_iterator) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::vector>::__annotate_delete[abi:v160006]() const;Sample`std::__1::vector>::data[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::__split_buffer::__split_buffer;Sample`std::__1::__split_buffer::__split_buffer;Sample`std::__1::__compressed_pair&>::__compressed_pair[abi:v160006]&>(std::nullptr_t&&, std::__1::allocator&);Sample`std::__1::__compressed_pair&>::__compressed_pair[abi:v160006]&>(std::nullptr_t&&, std::__1::allocator&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::__split_buffer::__split_buffer;Sample`std::__1::__split_buffer::__split_buffer;Sample`std::__1::__allocation_result>::pointer> std::__1::__allocate_at_least[abi:v160006]>(std::__1::allocator&, unsigned long);Sample`std::__1::allocator::allocate[abi:v160006](unsigned long);Sample`std::__1::__libcpp_allocate[abi:v160006](unsigned long, unsigned long);Sample`void* std::__1::__libcpp_operator_new[abi:v160006](unsigned long);libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector>::__recommend[abi:v160006](unsigned long) const;Sample`std::__1::vector::max_size;Sample`std::__1::vector>::__alloc[abi:v160006]() const;Sample`std::__1::__compressed_pair>::second[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::__split_buffer::__construct_at_end 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::basic_string, std::__1::allocator>::end[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter std::__1::copy[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__copy[abi:v160006], std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__copy_trivial, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__copy_trivial>, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter, 0>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair std::__1::__copy_trivial::operator()[abi:v160006](char const*, char const*, char*) const;Sample`std::__1::pair std::__1::__copy_trivial_impl[abi:v160006](char const*, char const*, char*);Sample`std::__1::pair::type, std::__1::__unwrap_ref_decay::type> std::__1::make_pair[abi:v160006](char const*&, char*&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::update_pos 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Emitter::StartedScalar;Sample`YAML::EmitterState::StartedScalar;Sample`YAML::EmitterState::ClearModifiedSettings;Sample`YAML::SettingChanges::clear;Sample`std::__1::vector>, std::__1::allocator>>>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::GetStringEscapingStyle 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::EmitFromEvents::BeginNode;Sample`std::__1::stack>>::empty[abi:v160006]() const;Sample`std::__1::deque>::empty[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::end[abi:v160006]() const;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::__end_node[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::__root[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::value_comp[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::__map_const_iterator, std::__1::__tree_node, void*>*, long>>::operator->[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::detail::node::type;Sample`YAML::detail::node_data::type 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::AliasManager::~AliasManager;Sample`YAML::NodeEvents::AliasManager::~AliasManager;Sample`std::__1::map, std::__1::allocator>>::~map[abi:v160006]();Sample`std::__1::map, std::__1::allocator>>::~map[abi:v160006]();Sample`std::__1::__tree::~__tree;Sample`std::__1::__tree::~__tree;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::__root[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::AliasManager::AliasManager;Sample`YAML::NodeEvents::AliasManager::AliasManager;Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::__tree::__tree;Sample`std::__1::__tree::__tree;Sample`std::__1::__compressed_pair, std::__1::less, true>>::__compressed_pair[abi:v160006], std::__1::less, true> const&>(int&&, std::__1::__map_value_compare, std::__1::less, true> const&);Sample`std::__1::__compressed_pair_elem, std::__1::less, true>, 1, true>::__compressed_pair_elem[abi:v160006], std::__1::less, true> const&, void>(std::__1::__map_value_compare, std::__1::less, true> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::__tree_iterator, std::__1::__tree_node, void*>*, long>::__tree_iterator[abi:v160006](std::__1::__tree_node, void*>*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::__tree_node_base*& std::__1::__tree::__find_equal;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::__root[abi:v160006]() const;Sample`std::__1::__tree, std::__1::__map_value_compare, std::__1::less, true>, std::__1::allocator>>::__end_node[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::map, std::__1::allocator>>::map[abi:v160006]();Sample`std::__1::__tree::__tree;Sample`std::__1::__tree::__tree;Sample`std::__1::__compressed_pair, std::__1::less, true>>::__compressed_pair[abi:v160006], std::__1::less, true> const&>(int&&, std::__1::__map_value_compare, std::__1::less, true> const&);Sample`std::__1::__compressed_pair_elem, std::__1::less, true>, 1, true>::__compressed_pair_elem[abi:v160006], std::__1::less, true> const&, void>(std::__1::__map_value_compare, std::__1::less, true> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::EmitFromEvents::EmitFromEvents;Sample`YAML::EmitFromEvents::EmitFromEvents 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](YAML::SettingChangeBase*&, std::__1::__value_init_tag&&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](YAML::SettingChangeBase*&, std::__1::__value_init_tag&&);Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](YAML::SettingChangeBase*&, std::__1::__value_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;libc++abi.dylib`DYLD-STUB$$malloc 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*) 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::SettingChangeBase*) const;libsystem_malloc.dylib`free 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::__compressed_pair_elem::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`DYLD-STUB$$YAML::Setting::set 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::SettingChanges::SettingChanges;Sample`YAML::SettingChanges::SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::vector[abi:v160006]();Sample`std::__1::__compressed_pair>*, std::__1::allocator>>>::__compressed_pair[abi:v160006](std::nullptr_t&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector>::__vallocate[abi:v160006](unsigned long);Sample`std::__1::vector::max_size;Sample`std::__1::__libcpp_numeric_limits::max[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector>::__vallocate[abi:v160006](unsigned long);Sample`std::__1::__allocation_result>::pointer> std::__1::__allocate_at_least[abi:v160006]>(std::__1::allocator&, unsigned long) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector::__construct_at_end 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::clear;Sample`YAML::SettingChanges::restore;Sample`bool std::__1::operator!=[abi:v160006]>*>(std::__1::__wrap_iter>*> const&, std::__1::__wrap_iter>*> const&);Sample`bool std::__1::operator==[abi:v160006]>*>(std::__1::__wrap_iter>*> const&, std::__1::__wrap_iter>*> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::clear;Sample`YAML::SettingChanges::restore;Sample`std::__1::vector>, std::__1::allocator>>>::end[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__make_iter[abi:v160006](std::__1::unique_ptr>*);Sample`std::__1::__wrap_iter>*>::__wrap_iter[abi:v160006](void const*, std::__1::unique_ptr>*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::clear;Sample`std::__1::vector>, std::__1::allocator>>>::clear[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_shrink[abi:v160006](unsigned long) const;Sample`std::__1::vector>, std::__1::allocator>>>::data[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_delete[abi:v160006]() const;Sample`std::__1::vector>, std::__1::allocator>>>::data[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_delete[abi:v160006]() const;Sample`std::__1::vector>, std::__1::allocator>>>::capacity[abi:v160006]() const;Sample`std::__1::vector>, std::__1::allocator>>>::__end_cap[abi:v160006]() const;Sample`std::__1::__compressed_pair>*, std::__1::allocator>>>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>::__annotate_delete[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::allocator_traits>::deallocate[abi:v160006](std::__1::allocator&, char*, unsigned long);Sample`std::__1::allocator::deallocate[abi:v160006](char*, unsigned long) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Dump;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_short_size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_short_size[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::data[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::data[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag);Sample`std::__1::__non_trivial_if>::__non_trivial_if[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::first[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]();Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag);Sample`std::__1::allocator::allocator[abi:v160006]() 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_decrement[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::vector, std::__1::allocator>>::end[abi:v160006]();Sample`std::__1::vector, std::__1::allocator>>::__make_iter[abi:v160006](std::__1::pair*) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`bool std::__1::operator!=[abi:v160006]*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&);Sample`bool std::__1::operator==[abi:v160006]*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];CoreFoundation`_CFRelease;IOKit`iokit_user_client_trap 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];CoreFoundation`_CFRelease;CoreFoundation`CFAllocatorDeallocate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];Metal`-[_MTLObjectWithLabel dealloc] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];libobjc.A.dylib`objc_storeWeak;libobjc.A.dylib`locker_mixin::lockWith 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];CoreFoundation`-[__NSCFConstantString release] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];libsystem_malloc.dylib`_szone_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`DYLD-STUB$$objc_msgSendSuper2 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;libsystem_malloc.dylib`free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLRendererFloat`gldUnbindTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;libGL.dylib`glDeleteTextures 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`Util::Image::~Image 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_decrement[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TileClass::setTileImage;Sample`std::__1::shared_ptr::operator=[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared_weak;Sample`std::__1::__shared_ptr_emplace>::__get_alloc[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;libc++.1.dylib`std::__1::basic_string::operator= 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [6], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [6], char [6], YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [6];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [6], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [6]);Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]();Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`std::__1::__shared_count::__add_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);libsystem_platform.dylib`_platform_memcmp 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::__default_init[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`std::__1::vector, std::__1::allocator>>::end[abi:v160006]();Sample`std::__1::vector, std::__1::allocator>>::__make_iter[abi:v160006](std::__1::pair*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TerrainConfig::GetConfig;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_typ$;Sample`std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::equal_to, std::__1::allocator>>,$;Sample`std::__1::__bucket_list_deallocator, std::__1::allocator>, std::__1::shared_ptr>, void*>*>*>>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;Sample`TerrainConfig::GetConfig;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_typ$;Sample`std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::equal_to, std::__1::allocator>>, std::__1::hash, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::equal_to, std::__1::allocator>>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) const;Sample`bool std::__1::operator==[abi:v160006]>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;libc++.1.dylib`std::__1::to_string 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToTileClass;libc++.1.dylib`std::__1::to_string;libc++.1.dylib`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char*, char*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;ImageIO`IIOImageRead::CreateWithURL;ImageIO`_CFDataCreateWithMappedFile;libsystem_kernel.dylib`pread 8 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;ImageIO`IIOImageRead::CreateWithURL;ImageIO`_CFDataCreateWithMappedFile;libsystem_kernel.dylib`__mmap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;ImageIO`IIOImageRead::CreateWithURL;libsystem_kernel.dylib`__open 9 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;libsystem_pthread.dylib`pthread_mutex_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;libsystem_kernel.dylib`close 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`CGImageReadCreateWithURL;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLGetString 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;libsystem_kernel.dylib`__getattrlist 7 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;CoreServicesInternal`corePropertyProviderPrepareValues;CoreFoundation`CFURLGetFileSystemRepresentation;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringAppend;CoreFoundation`CFStringGetLength;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;CoreServicesInternal`corePropertyProviderPrepareValues;CoreFoundation`CFURLGetFileSystemRepresentation;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringAppend;CoreFoundation`__CFStringChangeSizeMultiple;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;CoreServicesInternal`corePropertyProviderPrepareValues;CoreFoundation`CFURLGetFileSystemRepresentation;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringFindWithOptionsAndLocale 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;CoreServicesInternal`corePropertyProviderPrepareValues;CoreFoundation`CFURLGetFileSystemRepresentation;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`_resolvedPath 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;CoreFoundation`CFURLCopyResourcePropertyForKey;CoreServicesInternal`_FSURLCopyResourcePropertyForKeyInternal;CoreServicesInternal`prepareValuesForBitmap;CoreServicesInternal`corePropertyProviderPrepareValues;CoreFoundation`CFURLGetFileSystemRepresentation;CoreFoundation`CFStringGetFileSystemRepresentation;CoreFoundation`_CFStringGetFileSystemRepresentationWithErrorStatus;CoreFoundation`CFUniCharDecomposeWithErrorLocation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringAppendCharacters;CoreFoundation`__CFStringChangeSizeMultiple;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringFindWithOptionsAndLocale 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::IIOImageSource;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`__CFStrConvertBytesToUnicode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;libsystem_kernel.dylib`__mac_syscall 19 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyAbsoluteURL;CoreFoundation`_CFURLCreateWithURLString;CoreFoundation`__CFStringCreateImmutableFunnel3;CoreFoundation`_CFRuntimeCreateInstance 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyAbsoluteURL;CoreFoundation`_CFURLCreateWithURLString;CoreFoundation`_parseComponents 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyAbsoluteURL;CoreFoundation`resolveAbsoluteURLString;CoreFoundation`resolveAbsoluteURLStringBuffer;CoreFoundation`__CFStringCreateImmutableFunnel3;CoreFoundation`_CFRuntimeCreateInstance 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;ImageIO`IIO_CFURLCopyResolvedFileSystemPath;CoreFoundation`CFURLCopyFileSystemPath;CoreFoundation`CFURLCreateStringWithFileSystemPath;CoreFoundation`URLPathToPOSIXPath;CoreFoundation`CFURLCreateStringByReplacingPercentEscapes;CoreFoundation`CFStringAppend;CoreFoundation`CFStringGetCharacters 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;libsystem_sandbox.dylib`rootless_check_trusted_internal;libsystem_kernel.dylib`__getattrlist 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOAnalyticsLogImageSourceCreateWithURL;ImageIO`IIOSendAnalytics;CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary* ;CoreAnalytics`CoreAnalytics::Client::isEventUsed;CoreAnalytics`FrameworkConfiguration::isEventUsed;CoreAnalytics`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*);libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::osType;ImageIO`ERROR_ImageIO_DataBufferIsNotReadable 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIOImageSource::osType;ImageIO`DYLD-STUB$$CFDataGetBytePtr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;ImageIO`CGImageSourceCreateWithURL;ImageIO`IIODictionary::IIODictionary;CoreFoundation`CFDictionaryCreateMutable;CoreFoundation`__CFAllocateObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`_CFURLCreateCurrentDirectoryURL;CoreFoundation`_CFGetCurrentDirectory;libsystem_c.dylib`__private_getcwd;libsystem_c.dylib`__getcwd;libsystem_kernel.dylib`__open_nocancel 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`_CFURLCreateCurrentDirectoryURL;CoreFoundation`_CFGetCurrentDirectory;libsystem_c.dylib`__private_getcwd;libsystem_c.dylib`__getcwd;libsystem_kernel.dylib`__fcntl_nocancel 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`_CFURLCreateCurrentDirectoryURL;CoreFoundation`_CFGetCurrentDirectory;libsystem_c.dylib`__private_getcwd;libsystem_kernel.dylib`stat 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`_CFURLCreateCurrentDirectoryURL;CoreFoundation`_CFGetCurrentDirectory;libsystem_c.dylib`__private_getcwd;libsystem_kernel.dylib`fstat 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageSourceFromFile;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`POSIXPathToURLPath;CoreFoundation`CreateStringFromFileSystemRepresentationByAddingPercentEscapes;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`png_read_row_indexed;libPng.dylib`png_read_IDAT_data;libz.1.dylib`inflate 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`png_read_row_indexed;libPng.dylib`png_read_IDAT_data;libz.1.dylib`inflate;libz.1.dylib`0x0000000191b54adc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`png_read_row_indexed;libPng.dylib`png_do_read_transformations 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`png_read_row_indexed;libPng.dylib`png_read_finish_row 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`CFDataGetLength;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`CFDataGetBytes 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;CoreFoundation`CFDataGetBytePtr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`read_fn;ImageIO`IIOImageRead::getBytesAtOffset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`IIOImageReadSession::getBytes 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`_cg_png_set_PLTE;libPng.dylib`png_free_data 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`IIOImageRead::mapData;ImageIO`IIOImageRead::createDataWithMappedFile;libsystem_kernel.dylib`__open 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`IIOImageRead::mapData;ImageIO`IIOImageRead::createDataWithMappedFile;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`IIOImageRead::mapData;ImageIO`IIOImageRead::createDataWithMappedFile;ImageIO`_CFDataCreateWithMappedFile;libsystem_kernel.dylib`__mmap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`IIOImageRead::mapData;ImageIO`IIOImageRead::createDataWithMappedFile;CoreFoundation`_CFStringGetFileSystemRepresentation;CoreFoundation`_CFStringGetFileSystemRepresentationWithErrorStatus;CoreFoundation`_CFBuildVersionForCFSystemVersion 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOSendAnalytics;CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary* ;CoreAnalytics`CoreAnalytics::Client::isEventUsed;CoreAnalytics`FrameworkConfiguration::isEventUsed 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOSendAnalytics;CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary* ;CoreAnalytics`CoreAnalytics::Client::isEventUsed;CoreAnalytics`FrameworkConfiguration::isEventUsed;libsystem_malloc.dylib`DYLD-STUB$$_platform_bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOSendAnalytics;CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary* ;CoreAnalytics`CoreAnalytics::Client::isEventUsed;CoreAnalytics`FrameworkConfiguration::isEventUsed;CoreAnalytics`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char const*);libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;libsystem_pthread.dylib`_pthread_mutex_unlock_init_slow 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGDataProviderCreateForDestination;vImage`vImageConverter_Init 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGColorTransformRelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGColorSpaceGetNumberOfComponents 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_data_lock;CoreGraphics`img_raw_read;CoreGraphics`get_chunks_direct;CoreGraphics`CGDataProviderDirectGetBytesAtPositionInternal;CoreGraphics`provider_for_destination_get_bytes_at_position_inner 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_data_lock;CoreGraphics`img_raw_read;CoreGraphics`get_chunks_direct;CoreGraphics`CGDataProviderDirectGetBytesAtPositionInternal;CoreGraphics`provider_for_destination_get_bytes_at_position_inner;CoreGraphics`vImageConverterConvert;CoreGraphics`vImageConverter_convert_internal;vImage`vImageConvert_AnyToAny;vImage`AnyToAnyBlockInternal 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_data_lock;CoreGraphics`img_raw_read;CoreGraphics`get_chunks_direct;CoreGraphics`CGDataProviderDirectGetBytesAtPositionInternal;CoreGraphics`provider_for_destination_get_bytes_at_position_inner;CoreGraphics`DYLD-STUB$$memcpy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_data_lock;CoreGraphics`img_raw_read;CoreGraphics`get_chunks_direct;CoreGraphics`CGDataProviderDirectGetBytesAtPositionInternal;CoreGraphics`provider_for_destination_get_bytes_at_position_inner;CoreGraphics`CGDataProviderDirectGetBytesAtPositionInternal;CoreGraphics`DYLD-STUB$$pthread_mutex_lock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_data_lock;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderLock;CoreFoundation`CFGetTypeID;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`data_conversion_required;CoreFoundation`_CFRelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGBitmapContextCreate;CoreGraphics`bitmap_context_create;CoreGraphics`__CGBitmapContextDelegateCreate;CoreGraphics`ripc_Initialize;CoreGraphics`RIPAddContextToContextList;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGBitmapContextCreate;CoreGraphics`bitmap_context_create;CoreGraphics`__CGBitmapContextDelegateCreate;CoreGraphics`color_transform_create;CoreGraphics`CGColorSpaceCreateWithName;CoreFoundation`CFEqual 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`CFDataGetBytes;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`CFDataGetLength;CoreFoundation`CF_IS_OBJC 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;CoreFoundation`DYLD-STUB$$memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`IIOImageRead::getCFDataBytesAtOffset;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`DYLD-STUB$$CFDataGetBytes 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;ImageIO`ERROR_ImageIO_SourceBufferRangeIsNotBigEnough 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;CoreFoundation`CFDataGetLength 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getBytesAtOffset;CoreFoundation`CFDataGetBytePtr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageReadSession::getBytes;ImageIO`IIOImageRead::getCFDataBytesAtOffset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`png_crc_read;ImageIO`pngReadCallback;ImageIO`IIOImageRead::getBytesAtOffset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;libPng.dylib`_cg_png_set_PLTE 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_handle_PLTE;ImageIO`pngReadCallback 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_info;libPng.dylib`png_crc_read 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_set_keep_unknown_chunks_sized 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`PNGReadPlugin::InitializePluginData;libPng.dylib`_cg_png_read_update_info;libPng.dylib`png_read_start_row;libPng.dylib`png_init_read_transformations 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`IIOReadPlugin::postInitialize;ImageIO`IIOReadPlugin::setupCallback;ImageIO`IIOReadPlugin::setupImageProviderCallbackV1(InfoRec*, CGImageBlockSet* (*);ImageIO`IIOImagePlus::setImageBlockProc(void*, unsigned int, CGImageBlockSet* (*)(void*, CGImageProvider*, CGRect, CGSize, __CFDictionary const*), __IOSurface* (*)(void*, CGImageProvider*, __CFDictionary const*), CGImageIOSurfaceSet* (*)(void*, CGImageProvider*, __CFDictionary const*), CGImageTextureData* (*)(void*, CGImageProvider*, __CFDictionary const*), void (*);ImageIO`IIODictionary::getBoolForKey;CoreFoundation`-[__NSDictionaryM objectForKey:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`IIO_Reader::initImageAtOffset;ImageIO`IIOReadPlugin::callInitialize;ImageIO`IIOReadPlugin::postInitialize;ImageIO`IIOReadPlugin::setupCallback;ImageIO`IIOReadPlugin::setupImageProviderCallbackV1(InfoRec*, CGImageBlockSet* (*);ImageIO`IIOReadPlugin::prepareGeometry;ImageIO`IIOImagePlus::setGeometry 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;CoreFoundation`CFStringCreateWithFormat;CoreFoundation`CFStringCreateWithFormatAndArguments;CoreFoundation`_CFStringCreateWithFormatAndArgumentsReturningMetadata;CoreFoundation`DYLD-STUB$$dyld_program_sdk_at_least 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;CoreFoundation`CFStringCreateWithFormat;CoreFoundation`CFStringCreateWithFormatAndArguments;CoreFoundation`_CFStringCreateWithFormatAndArgumentsReturningMetadata;CoreFoundation`__CFStringAppendFormatCore 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;ImageIO`CGImageMetadataGetTagWithPath;ImageIO`createPropertyPrefixFromCStrPrefix;libobjc.A.dylib`class_getMethodImplementation 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;ImageIO`CGImageMetadataGetTagWithPath;ImageIO`CGImageMetadataNamespaceForPrefix;ImageIO`CGImageMetadataNamespaceForDefaultPrefix;CoreFoundation`CFStringCompareWithOptionsAndLocale;CoreFoundation`-[NSTaggedPointerString getCharacters:range:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;ImageIO`CGImageMetadataDefaultPrefixForNamespace;CoreFoundation`CFStringCompareWithOptionsAndLocale 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOImageSource::createImageAtIndex;ImageIO`IIOImageSource::makeImagePlus;ImageIO`CopyTiffPropertiesToRoot;ImageIO`CGImageMetadataCreateFromLegacyProps;ImageIO`XMPMappingIteratePropertiesUsingBlock;ImageIO`__CGImageMetadataCreateFromLegacyProps_block_invoke;ImageIO`CGImageMetadataCreateMutable;CoreFoundation`CFDictionaryCreateMutable;CoreFoundation`__CFDictionaryCreateGeneric;CoreFoundation`CFBasicHashCreate;CoreFoundation`CFBasicHashGetPtrIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`CreateCGImageFromCGImageSource;ImageIO`CGImageSourceCreateImageAtIndex;ImageIO`IIOSendAnalytics;CoreAnalytics`AnalyticsSendEventInternal(NSString const*, NSDictionary* ;CoreAnalytics`CoreAnalytics::Client::isEventUsed;CoreAnalytics`FrameworkConfiguration::isEventUsed;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;CoreGraphics`image_finalize;CoreFoundation`_CFRelease;CoreGraphics`image_provider_finalize;ImageIO`IIOImageProviderInfo::ReleaseInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOReadPlugin::ReleaseInfo;CoreFoundation`-[__NSDictionaryM dealloc];CoreFoundation`cow_cleanup;CoreFoundation`_CFRelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;CoreGraphics`image_finalize;CoreFoundation`_CFRelease;CoreGraphics`image_provider_finalize;ImageIO`IIOImageProviderInfo::ReleaseInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOReadPlugin::ReleaseInfo;CoreFoundation`-[__NSDictionaryM dealloc];CoreFoundation`cow_cleanup;CoreFoundation`_CFRelease;ImageIO`_CGImagePlusFinalize;ImageIO`IIOImagePlus::~IIOImagePlus;ImageIO`IIOImagePlus::~IIOImagePlus;CoreFoundation`_CFRelease;ImageIO`_CGImageReadSessionFinalize;ImageIO`IIOImageReadSession::~IIOImageReadSession;ImageIO`IIOImageReadSession::~IIOImageReadSession;CoreFoundation`_CFRelease;ImageIO`_CGImageReadFinalize;ImageIO`IIOImageRead::~IIOImageRead;ImageIO`IIOImageRead::~IIOImageRead 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;CoreGraphics`image_finalize;CoreFoundation`_CFRelease;CoreGraphics`image_provider_finalize;ImageIO`IIOImageProviderInfo::ReleaseInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOReadPlugin::ReleaseInfo;CoreFoundation`-[__NSDictionaryM dealloc];CoreFoundation`cow_cleanup;CoreFoundation`_CFRelease;ImageIO`_CGImagePlusFinalize;ImageIO`IIOImagePlus::~IIOImagePlus;ImageIO`IIOImagePlus::~IIOImagePlus;ImageIO`IIODictionary::~IIODictionary;ImageIO`IIODictionary::~IIODictionary;CoreFoundation`-[__NSDictionaryM dealloc];CoreFoundation`cow_cleanup 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;CoreGraphics`image_finalize;CoreFoundation`_CFRelease;CoreGraphics`image_provider_finalize;ImageIO`IIOImageProviderInfo::ReleaseInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOImageProviderInfo::~IIOImageProviderInfo;ImageIO`IIOReadPlugin::ReleaseInfo;CoreFoundation`-[__NSDictionaryM dealloc];libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;CoreGraphics`image_finalize;libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;CoreFoundation`_CFRelease;ImageIO`_CGImageSourceFinalize;ImageIO`IIOImageSource::~IIOImageSource;ImageIO`IIOImageSource::~IIOImageSource;ImageIO`IIOImageRead::unmapData;CoreFoundation`_CFRelease;CoreFoundation`__CFDataDeallocate;libsystem_kernel.dylib`__munmap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::operator[](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::pair std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_val$ 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::find[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::__hash_iterator std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__string_hash::operator();Sample`unsigned long std::__1::__do_string_hash[abi:v160006](char const*, char const*);Sample`std::__1::__murmur2_or_cityhash::operator();Sample`unsigned long std::__1::__loadword[abi:v160006](void const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`std::__1::unordered_map, std::__1::allocator>, std::__1::shared_ptr, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, std::__1::allocator, std::__1::allocator> const, std::__1::shared_ptr>>>::find[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::__hash_iterator std::__1::__hash_table, std::__1::allocator>, std::__1::shared_ptr>, std::__1::__unordered_map_hasher, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>, std::__1::__unordered_map_equal, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::__hash_value_type, std::__1::allocator>, std::__1::shared_ptr>, std::__1::hash, std::__1::allocator>>, std::__1::equal_to, std::__1::allocator>>, true>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__string_hash::operator();Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`_dispatch_group_wait_slow;libsystem_kernel.dylib`__ulock_wait 18 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`_dispatch_root_queue_poke_slow;libsystem_kernel.dylib`__workq_kernreturn 16 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`dispatch_group_async;libdispatch.dylib`_dispatch_Block_copy;libsystem_blocks.dylib`DYLD-STUB$$_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libGLImage.dylib`glgProcessPixelsWithProcessor;libdispatch.dylib`dispatch_group_async;libdispatch.dylib`_dispatch_Block_copy;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`agxaAssertBufferIsValid 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`void agxsTwiddleAddressCommon 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AppleMetalOpenGLRenderer`invocation function for block in GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;AGXMetal13_3`-[AGXG13GFamilyTexture replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:];AGXMetal13_3`AGX::Texture::writeRegion;AGXMetal13_3`AGX::Texture::validateRegion 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;Metal`MTLGetTextureLevelInfoForDeviceWithOptions 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;Metal`MTLGetTextureLevelInfoForDeviceWithOptions;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`small_malloc_should_clear;libsystem_malloc.dylib`small_malloc_from_free_list 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::uploadTextureLevel(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, GLDBufferRec*, unsigned char*, int, int, int, id () block_pointer, void (objc_object, unsigned int) block_pointer, void (void () block_pointer) block_pointer, void (void ;libdispatch.dylib`_dispatch_root_queue_push 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];IOGPU`IOGPUResourceCreate;IOKit`IOConnectCallMethod;IOKit`io_connect_method;libsystem_kernel.dylib`mach_msg2_trap 18 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];libobjc.A.dylib`objc_storeWeak;libobjc.A.dylib`weak_register_no_lock;libobjc.A.dylib`weak_entry_for_referent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];libobjc.A.dylib`objc_storeWeak;libobjc.A.dylib`locker_mixin::unlockWith 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];IOGPU`-[IOGPUMetalResource initWithDevice:remoteStorageResource:options:args:argsSize:];libobjc.A.dylib`locker_mixin::lockWith 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalTexture initWithPrimaryBuffer:heapIndex:bufferIndex:bufferOffset:length:descriptor:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:];IOGPU`-[IOGPUMetalTexture initWithBuffer:descriptor:sysMemOffset:sysMemRowBytes:vidMemSize:vidMemRowBytes:args:argsSize:isStrideTexture:];Metal`MTLPixelFormatGetInfoForDevice;Metal`objc_msgSend$supportsFamily: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`-[AGXG13GFamilyTexture initImplWithDevice:Descriptor:iosurface:plane:slice:buffer:bytesPerRow:allowNPOT:sparsePageSize:isCompressedIOSurface:isHeapBacked:];AGXMetal13_3`AGX::TextureGen4::TextureGen4 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`-[AGXG13GFamilyTexture initImplWithDevice:Descriptor:iosurface:plane:slice:buffer:bytesPerRow:allowNPOT:sparsePageSize:isCompressedIOSurface:isHeapBacked:];AGXMetal13_3`AGX::TextureGen4::TextureGen4;AGXMetal13_3`unsigned long AGX::Texture::getPlaneSize;AGXMetal13_3`unsigned long AGX::Texture::getMipmapSize;AGXMetal13_3`AGX::Texture::sumLevelSizesTwiddled 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalDevice allocBufferSubDataWithLength:options:alignment:heapIndex:bufferIndex:bufferOffset:];libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];IOGPU`-[IOGPUMetalDevice allocBufferSubDataWithLength:options:alignment:heapIndex:bufferIndex:bufferOffset:];IOGPU`-[IOGPUMetalDevice allocBufferSubDataWithLength:options:alignment:heapIndex:bufferIndex:bufferOffset:parentAddress:parentLength:];libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`-[MTLTextureDescriptorInternal validateWithDevice:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`objc_msgSend$familySupportsNonPrivateDepthStencilTextures 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];AGXMetal13_3`AGX::TextureGen4::texBaseAddressesUpdated 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`validateMTLStorageMode 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXTexture initWithDevice:desc:isSuballocDisabled:];Metal`-[_MTLDevice supportsNonPrivateDepthStencilTextures] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`MTLPixelFormatGetInfoForFeatureSetQuery 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`adjustPixelFormatForiOSDevice 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;libobjc.A.dylib`_objc_rootAllocWithZone 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;AGXMetal13_3`-[AGXG13GFamilyTexture initImplWithDevice:Descriptor:iosurface:plane:slice:buffer:bytesPerRow:allowNPOT:sparsePageSize:isCompressedIOSurface:isHeapBacked:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::loadObj;Metal`-[MTLTextureDescriptorInternal descriptorPrivate] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;libGLImage.dylib`glgConvertType 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;IOGPU`-[IOGPUMetalTexture sampleCount] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;AppleMetalOpenGLRenderer`GLDTextureRec::load;AppleMetalOpenGLRenderer`GLDTextureRec::isValidTexture;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`gldModifyTexSubImage;Metal`MTLPixelFormatGetInfoForDevice;Metal`-[_MTLDevice supportsFamily:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;libGL.dylib`glTexImage2D;GLEngine`glTexImage2D_Exec;AppleMetalOpenGLRenderer`GLDTextureRec::getTextureResource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;GLEngine`gleCreateTextureObject;libGFXShared.dylib`gfxCreatePluginTexture;libsystem_malloc.dylib`nanov2_malloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glBindTexture_Exec;GLEngine`gleBindTexture;libGFXShared.dylib`gfxInitializeGLTexture 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](int&&, int&, int&, void*&);Sample`Core::Texture::Texture;Sample`Core::Texture::Texture;Sample`Core::Texture::UpdateData;GLEngine`glTexParameteri_Exec;GLEngine`glTexParameterI_Exec 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006], std::__1::allocator>, void>(std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], std::__1::basic_string, std::__1::allocator>, void>(std::__1::allocator const&, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006], std::__1::allocator>>(std::__1::allocator, std::__1::basic_string, std::__1::allocator>&&);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`std::__1::unique_ptr>::operator=[abi:v160006](std::__1::unique_ptr>&&);Sample`std::__1::unique_ptr>::release[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 4 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$YAML::StringCharSource::operator[](unsigned long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`DYLD-STUB$$bool YAML::RegEx::IsValidSource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 5 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`YAML::StringCharSource::operator[](unsigned long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`std::__1::__wrap_iter::operator*[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`bool YAML::RegEx::Matches;Sample`DYLD-STUB$$bool YAML::RegEx::IsValidSource 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::char_traits::length 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Utils::ComputeStringFormat;Sample`YAML::Utils::(anonymous namespace)::IsValidPlainScalar;Sample`std::__1::basic_string, std::__1::allocator>::rbegin[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::end[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector::__swap_out_circular_buffer;Sample`std::__1::reverse_iterator std::__1::__uninitialized_allocator_move_if_noexcept[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator, char, void>(std::__1::allocator&, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::reverse_iterator std::__1::move[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__move[abi:v160006], std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator, 0>(std::__1::reverse_iterator, std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::pair, std::__1::reverse_iterator> std::__1::__unwrap_range[abi:v160006], std::__1::reverse_iterator>(std::__1::reverse_iterator, std::__1::reverse_iterator);Sample`std::__1::__unwrap_iter_impl, false>::__unwrap[abi:v160006](std::__1::reverse_iterator) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::vector::resize;Sample`std::__1::vector::__append;Sample`std::__1::vector>::__recommend[abi:v160006](unsigned long) const;Sample`std::__1::vector::max_size 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter std::__1::copy[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__copy[abi:v160006], std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__copy_trivial, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__copy_trivial>, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter, 0>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::__wrap_iter std::__1::__rewrap_iter[abi:v160006], char*, std::__1::__unwrap_iter_impl, true>>(std::__1::__wrap_iter, char*);Sample`std::__1::__unwrap_iter_impl, true>::__rewrap[abi:v160006](std::__1::__wrap_iter, char*);Sample`std::__1::__wrap_iter::operator+[abi:v160006](long) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::__wrap_iter std::__1::copy[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__copy[abi:v160006], std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__copy_trivial, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair, std::__1::__wrap_iter> std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__copy_trivial>, std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter, 0>(std::__1::__wrap_iter, std::__1::__wrap_iter, std::__1::__wrap_iter);Sample`std::__1::pair>::type, std::__1::__unwrap_ref_decay>::type> std::__1::make_pair[abi:v160006], std::__1::__wrap_iter>(std::__1::__wrap_iter&&, std::__1::__wrap_iter&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::basic_string, std::__1::allocator>::begin[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_short_pointer[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`std::__1::basic_string, std::__1::allocator>::end[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::pointer_traits::pointer_to[abi:v160006](char const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::operator<<;Sample`YAML::ostream_wrapper::write;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Emitter::StartedScalar;Sample`YAML::EmitterState::StartedScalar;Sample`YAML::EmitterState::ClearModifiedSettings;Sample`YAML::SettingChanges::clear;Sample`YAML::SettingChanges::restore;Sample`std::__1::vector>, std::__1::allocator>>>::begin[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__make_iter[abi:v160006](std::__1::unique_ptr>*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::operator<<;Sample`YAML::Emitter::Write;Sample`YAML::Emitter::PrepareNode;Sample`YAML::EmitterState::HasBegunContent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::EmitFromEvents::OnScalar;Sample`YAML::EmitFromEvents::EmitProps;Sample`bool std::__1::operator!=[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::char_traits::length;libsystem_platform.dylib`_platform_strlen 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::IsAliased;Sample`std::__1::map, std::__1::allocator>>::find[abi:v160006](YAML::detail::node_ref const* const&) const;Sample`std::__1::__tree_const_iterator std::__1::__tree::find;Sample`std::__1::__tree_const_iterator std::__1::__tree::__lower_bound 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::Emit;Sample`YAML::NodeEvents::Emit;Sample`std::__1::shared_ptr::operator->[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::EmitFromEvents::~EmitFromEvents;Sample`YAML::EmitFromEvents::~EmitFromEvents;Sample`std::__1::stack::~stack;Sample`std::__1::stack::~stack;Sample`std::__1::deque>::~deque[abi:v160006]();Sample`std::__1::deque>::~deque[abi:v160006]();Sample`std::__1::deque::clear;Sample`std::__1::deque>::end[abi:v160006]();Sample`std::__1::deque>::size[abi:v160006]() const;Sample`std::__1::deque>::__size[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem::__get[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::operator<<;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::NodeEvents;Sample`YAML::NodeEvents::Setup;Sample`std::__1::map, std::__1::allocator>>::operator[](YAML::detail::node_ref const*&&);Sample`DYLD-STUB$$std::__1::__tree_node_base*& std::__1::__tree::__find_equal 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`YAML::Setting::set;Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::unique_ptr>::unique_ptr[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::__compressed_pair>::__compressed_pair[abi:v160006](YAML::SettingChangeBase*&, std::__1::__value_init_tag&&) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::EmitterState::EmitterState;Sample`YAML::EmitterState::EmitterState;Sample`YAML::Setting::Setting;Sample`YAML::Setting::Setting;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::SettingChangeBase*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::SettingChangeBase*) const;Sample`YAML::SettingChange::~SettingChange;Sample`YAML::SettingChange::~SettingChange;Sample`YAML::SettingChange::~SettingChange 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector::__construct_at_end;Sample`std::__1::vector>::__alloc[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::Emitter;Sample`YAML::Emitter::Emitter;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`YAML::ostream_wrapper::ostream_wrapper;Sample`std::__1::vector::vector;Sample`std::__1::vector::vector;Sample`std::__1::vector::__construct_at_end;Sample`std::__1::vector>::__alloc[abi:v160006]();Sample`std::__1::__compressed_pair_elem, 1, true>::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_delete[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](YAML::EmitterState*);Sample`std::__1::default_delete::operator()[abi:v160006](YAML::EmitterState*) const;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::EmitterState::~EmitterState;Sample`YAML::SettingChanges::~SettingChanges;Sample`YAML::SettingChanges::~SettingChanges;Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::vector>, std::__1::allocator>>>::__annotate_contiguous_container[abi:v160006](void const*, void const*, void const*, void const*) const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Dump;Sample`YAML::Emitter::~Emitter;Sample`YAML::Emitter::~Emitter;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`YAML::ostream_wrapper::~ostream_wrapper;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]();Sample`std::__1::allocator_traits>::deallocate[abi:v160006](std::__1::allocator&, char*, unsigned long) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&) 6 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem, std::__1::allocator>::__rep, 0, false>::__get[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair>(std::__1::basic_string, std::__1::allocator> const&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_short_size[abi:v160006]() const 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag);Sample`std::__1::allocator::allocator[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__shared_weak_count::__add_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_increment[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::detail::node& YAML::detail::node::get;Sample`YAML::detail::node& YAML::detail::node_ref::get;Sample`YAML::detail::node& YAML::detail::node_data::get;Sample`std::__1::basic_string, std::__1::allocator> std::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair)>(std::__1::basic_string, std::__1::allocator>, std::__1::basic_string, std::__1::allocator>, YAML::detail::node& YAML::detail::node_data::get, std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&, std::__1::shared_ptr)::'lambda'(std::__1::pair*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&);Sample`bool std::__1::operator==[abi:v160006]*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[], std::__1::allocator>>(std::__1::basic_string, std::__1::allocator> const&);Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*) 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [10], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [10], char [10], YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [10];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [10], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]() 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [10]);Sample`std::__1::shared_ptr::shared_ptr[abi:v160006](std::__1::shared_ptr const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`YAML::Node::Node;Sample`YAML::Node::Node;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]();Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`charstd::__1::find_if[abi:v160006]*>, YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)>(char [7], char [7], YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)) [7];Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr)::'lambda'(std::__1::pair)::operator()(std::__1::pair) const;Sample`YAML::detail::node::equals;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node YAML::Node::operator[](char const (&) [7]);Sample`YAML::detail::node& YAML::detail::node::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_ref::get(char const (&) [7], std::__1::shared_ptr);Sample`YAML::detail::node& YAML::detail::node_data::get(char const (&) [7], std::__1::shared_ptr);Sample`bool std::__1::operator==[abi:v160006]*>(std::__1::__wrap_iter*> const&, std::__1::__wrap_iter*> const&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_ostream>& std::__1::operator<<[abi:v160006], std::__1::allocator>(std::__1::basic_ostream>&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_ostream>& std::__1::__put_character_sequence[abi:v160006]>(std::__1::basic_ostream>&, char const*, unsigned long);Sample`std::__1::ostreambuf_iterator> std::__1::__pad_and_output[abi:v160006]>(std::__1::ostreambuf_iterator>, char const*, char const*, char const*, std::__1::ios_base&, char);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](unsigned long, char);libc++.1.dylib`std::__1::basic_string::__init 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_ostream>& std::__1::operator<<[abi:v160006], std::__1::allocator>(std::__1::basic_ostream>&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_ostream>& std::__1::__put_character_sequence[abi:v160006]>(std::__1::basic_ostream>&, char const*, unsigned long);Sample`std::__1::ostreambuf_iterator> std::__1::__pad_and_output[abi:v160006]>(std::__1::ostreambuf_iterator>, char const*, char const*, char const*, std::__1::ios_base&, char);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](unsigned long, char);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](unsigned long, char);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::__compressed_pair[abi:v160006](std::__1::__default_init_tag&&, std::__1::__default_init_tag&&);Sample`std::__1::__compressed_pair_elem, 1, true>::__compressed_pair_elem[abi:v160006](std::__1::__default_init_tag) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_ostream>& std::__1::operator<<[abi:v160006], std::__1::allocator>(std::__1::basic_ostream>&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::ios_base::flags[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::__iom_t4 std::__1::setfill[abi:v160006](char) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`YAML::Node::~Node;Sample`YAML::Node::~Node;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`long std::__1::__libcpp_atomic_refcount_decrement[abi:v160006](long&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_string, std::__1::allocator> std::__1::operator+[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator>&&, char const*);Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](std::__1::basic_string, std::__1::allocator>&&) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::setw[abi:v160006](int) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;libc++.1.dylib`std::__1::basic_string::~basic_string;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;libc++.1.dylib`std::__1::to_string;libc++.1.dylib`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006](char*, char*) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`YAMLReader::convertYAMLTileToImage;Sample`std::__1::basic_string, std::__1::allocator> std::__1::operator+[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator>&&, std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::append[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::basic_string, std::__1::allocator>::data[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_pointer[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__get_short_pointer[abi:v160006]() const 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec 3 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];CoreFoundation`_CFRelease;IOKit`iokit_user_client_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];IOGPU`-[IOGPUMetalResource dealloc];Metal`-[_MTLObjectWithLabel dealloc];libobjc.A.dylib`_objc_rootDealloc;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`object_cxxDestructFromClass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;AGXMetal13_3`-[AGXG13GFamilyTexture dealloc];AGXMetal13_3`-[AGXTexture dealloc];IOGPU`-[IOGPUMetalTexture dealloc];CoreFoundation`CFRelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLDTextureRec::dealloc;libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;AppleMetalOpenGLRenderer`gldDestroyTexture;AppleMetalOpenGLRenderer`GLRTextureResource::dealloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLEngine`gleFreeTextureObject;libGFXShared.dylib`gfxDestroyPluginTexture;libsystem_malloc.dylib`free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared;Sample`Util::Image::~Image;Sample`Util::Image::~Image;Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::~unique_ptr[abi:v160006]();Sample`std::__1::unique_ptr>::reset[abi:v160006](Core::Texture*);Sample`std::__1::default_delete::operator()[abi:v160006](Core::Texture*) const;Sample`Core::Texture::~Texture;Sample`Core::Texture::~Texture;GLEngine`glDeleteTextures_Exec;GLEngine`gleUnbindDeleteHashNamesAndObjects;GLRendererFloat`gldUnbindTexture 2 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::shared_ptr::~shared_ptr[abi:v160006]();Sample`std::__1::__shared_weak_count::__release_shared[abi:v160006]();Sample`std::__1::__shared_ptr_emplace::__on_zero_shared_weak;Sample`std::__1::allocator_traits>>>::deallocate[abi:v160006](std::__1::allocator>>&, std::__1::__shared_ptr_emplace>*, unsigned long) 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;libc++.1.dylib`std::__1::basic_istream::read 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::Start;Sample`MapScene::Start;Sample`MapbinReader::readBin;libc++.1.dylib`std::__1::basic_istream::read;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::loadAddress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::loadAddress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_salloc;dyld`_kernelrpc_mach_vm_allocate_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::RuntimeState::cachedDylibLoadAddress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_2_0;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 3 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_direct_state_access;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_salloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_SUN_vertex;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_SUN_vertex;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_path_rendering;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_path_rendering;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_kernelrpc_mach_vm_deallocate_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_separate_shader_objects;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_separate_shader_objects;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`Diagnostics::hasError 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_vertex_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_gpu_shader5;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_gpu_shader5;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_1_3;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_1_3;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent;dyld`dyld4::Loader::LoaderRef::loader 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_3_0;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_3_0;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_vertex_shader;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_vertex_shader;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_vertex_array;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_draw_range_elements;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ATI_vertex_streams;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_command_list;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_OES_framebuffer_object;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_INTEL_texture_scissor;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_texture_multisample;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_viewport_array;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_REGAL_extension_query;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_copy_texture;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_SGIX_fog_layers;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_SGIX_mpeg1;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_REGAL_ES1_0_compatibility;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_clip_control;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_blend_func_separate;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ANGLE_instanced_arrays;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_texture_storage;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_3_2;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_OES_texture_border_clamp;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_gpu_shader_int64;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ATI_fragment_shader;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_semaphore;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_shader_buffer_load;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_uniform_buffer_object;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_texture_integer;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NVX_progress_fence;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_MESA_window_pos;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_QCOM_extended_get;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::getExportsTrie 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_disjoint_timer_query;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_vsprintf;dyld`strlen 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_raster_multisample;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_framebuffer_object;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_1_4;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_gpu_shader4;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::Array::push_back 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_viewport_array;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_base_instance;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_IBM_vertex_array_lists;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_type_2_10_10_10_rev;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_VERSION_1_5;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_imaging;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_EXT_index_func;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_shader_objects;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent;dyld`dyld4::Loader::LoaderRef::loader 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_framebuffer_no_attachments;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent;dyld`dyld4::Loader::LoaderRef::loader 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_half_float;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::PrebuiltLoader::dependent 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_occlusion_query;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_vertex_buffer_unified_memory;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_SGI_color_table;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_shading_language_include;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_internalformat_query2;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_vdpau_interop2;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_salloc;dyld`_kernelrpc_mach_vm_allocate_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_draw_vulkan_image;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_kernelrpc_mach_vm_deallocate_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_APPLE_object_purgeable;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::OverflowSafeArray::verifySpace 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ATI_vertex_attrib_array_object;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_robustness;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_multitexture;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_polygon_mode;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_fragment_program;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_gl_spirv;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_NV_mesh_shader;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_ARB_vertex_attrib_binding;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_salloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`glewInit;Sample`glewContextInit;Sample`_glewInit_GL_AMD_framebuffer_sample_positions;Sample`NSGLGetProcAddress;dyld`dyld4::APIs::dlsym;dyld`dyld4::APIs::setErrorString;dyld`_simple_salloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;CoreAudio`HALObject::ObjectsPublishedAndDied;CoreAudio`HALDevice::ObjectPublished;CoreAudio`HALStream::IsInput;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ProxyObject::GetPropertyData;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 3 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;CoreAudio`HALObject::ObjectsPublishedAndDied;CoreAudio`HALDevice::ObjectPublished;CoreAudio`HALStream::IsInput;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;CoreAudio`HALObject::ObjectsPublishedAndDied;CoreAudio`HALObjectMap::ReleaseObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`AMCP::Utility::Dispatch_Queue::install_mach_port_death_notification(unsigned int, void ;libdispatch.dylib`_dispatch_event_loop_poke;libdispatch.dylib`_dispatch_kq_drain;libsystem_kernel.dylib`kevent_qos 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;libc++abi.dylib`operator new;libsystem_malloc.dylib`nanov2_allocate_outlined;libsystem_malloc.dylib`nanov2_find_block_and_allocate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DAI32;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALSystem::AudioObjectCreate;CoreAudio`HALObjectMap::ReleaseObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildStreamLists;CoreAudio`HALC_ProxyObject::GetPropertyDataSize;CoreAudio`HALC_Object_GetPropertyData_DAI32;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;CoreAudio`HALC_ProxyObject::GetPropertyData;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 3 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;CoreAudio`HALC_ProxyObject::GetPropertyDataSize;CoreAudio`HALC_Object_GetPropertyData_DAI32;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`AMCP::Utility::Dispatch_Queue::install_mach_port_death_notification(unsigned int, void ;libdispatch.dylib`dispatch_source_create;libdispatch.dylib`_os_object_alloc_realized;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`nanov2_allocate_outlined 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;CoreAudio`HALSystem::AudioObjectCreate;CoreAudio`HALObject::CreateOwnedObject;CoreAudio`HALObject::AddOwnedObject;CoreAudio`HALObjectMap::RetainObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;CoreAudio`HALObjectMap::CopyObjectByObjectID 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildControlList;libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::Activate;CoreAudio`HALC_ShellDevice::RebuildSubDeviceList;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::BuildIOContext;CoreAudio`HALC_ShellDevice::CreateIOContextDescription;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreFoundation`CFPropertyListCreateWithData;CoreFoundation`_CFPropertyListCreateWithData;CoreFoundation`_CFPropertyListCreateFromUTF8Data;CoreFoundation`parsePListTag;CoreFoundation`parseDictTag;CoreFoundation`parseArrayTag;CoreFoundation`parseDictTag;CoreFoundation`parseXMLElement;CoreFoundation`parseStringTag;CoreFoundation`_createUniqueStringWithUTF8Bytes;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ShellDevice::BuildIOContext;CoreAudio`HALC_ShellDevice::CreateIOContextDescription;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DPList;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ShellObjectMap::CreateObject;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DCFString;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`HALC_ShellPlugIn::_ReconcileDeviceList;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`AMCP::Utility::Dispatch_Queue::install_mach_port_death_notification(unsigned int, void ;libdispatch.dylib`_dispatch_event_loop_poke;libdispatch.dylib`_dispatch_kq_drain;libsystem_kernel.dylib`kevent_qos 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellPlugIn::ReconcileDeviceList;CoreAudio`HALSystem::AudioObjectsPublishedAndDied;CoreAudio`HALSystem::ObjectsPublishedAndDied;CoreAudio`HALDevice::Initialize;CoreAudio`HALDevice::CopyUID;CoreAudio`HALPlugIn::ObjectGetPropertyData;libsystem_trace.dylib`_os_log_impl;libsystem_trace.dylib`_os_log;libsystem_trace.dylib`_os_log_impl_flatten_and_send 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellSimpleProxyList::Reconcile;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`AMCP::Utility::Dispatch_Queue::install_mach_port_death_notification(unsigned int, void 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellSimpleProxyList::Reconcile;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`HALC_ProxyObject::GetPropertyDataSize;CoreAudio`HALC_Object_GetPropertyData_DAI32;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellSimpleProxyList::Reconcile;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;CoreAudio`HALC_ProxyObject::HALC_ProxyObject;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DAI32;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeDevices;CoreAudio`HALPlugInManagement::CreateHALPlugIn;CoreAudio`HAL_HardwarePlugIn_InitializeWithObjectID;CoreAudio`HALC_ShellPlugIn::ConnectToServer;CoreAudio`HALC_ShellSimpleProxyList::Reconcile;CoreAudio`HALC_ProxyObjectMap::CopyObjectByObjectID;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_Init;CoreAudio`AudioObjectAddPropertyListener_mac_imp;CoreAudio`HALSystem::CheckOutInstance;CoreAudio`HALSystem::InitializeShell;CoreFoundation`_CFBundleCreate;CoreFoundation`CFBundleGetInfoDictionary;CoreFoundation`_CFBundleRefreshInfoDictionaryAlreadyLocked;CoreFoundation`_CFBundleCopyInfoDictionaryInDirectoryWithVersion;CoreFoundation`_CFIterateDirectory;libsystem_c.dylib`readdir;libsystem_kernel.dylib`__getdirentries64 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_DetectDevices;Sample`build_device_list;CoreAudio`AudioObjectGetPropertyData_mac_imp;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`invocation function for block in HALC_ShellObject::GetPropertyData;CoreFoundation`_CFBundleCreate;CoreFoundation`CFBundleGetInfoDictionary;CoreFoundation`_CFBundleRefreshInfoDictionaryAlreadyLocked;CoreFoundation`_CFBundleCopyInfoDictionaryInDirectoryWithVersion;CoreFoundation`CFPropertyListCreateWithData;CoreFoundation`_CFPropertyListCreateWithData;CoreFoundation`_CFPropertyListCreateFromUTF8Data;CoreFoundation`parsePListTag;CoreFoundation`parseDictTag;CoreFoundation`parseXMLElement;CoreFoundation`parseStringTag;CoreFoundation`_createUniqueStringWithUTF8Bytes;CoreFoundation`-[__NSArrayM insertObject:atIndex:];libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_DetectDevices;Sample`build_device_list;CoreAudio`AudioObjectGetPropertyData_mac_imp;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`invocation function for block in HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DCFString;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_DetectDevices;Sample`build_device_list;CoreAudio`AudioObjectGetPropertyData_mac_imp;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ShellObject::ExecuteCommand(void ;CoreAudio`HALB_CommandGate::ExecuteCommand(void ;CoreAudio`invocation function for block in HALC_ShellObject::GetPropertyData;CoreFoundation`_CFURLCreateWithFileSystemPath;CoreFoundation`POSIXPathToURLPath;CoreFoundation`CFStringGetFileSystemRepresentation;CoreFoundation`_CFStringGetFileSystemRepresentationWithErrorStatus;dyld`dyld4::APIs::dyld_get_active_platform 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_DetectDevices;Sample`build_device_list;CoreAudio`AudioObjectGetPropertyData_mac_imp;CoreAudio`HALPlugIn::ObjectGetPropertyData;CoreAudio`HAL_HardwarePlugIn_ObjectGetPropertyData;CoreAudio`HALC_ShellObject::GetPropertyData;CoreAudio`HALC_ProxyObject::GetPropertyData;CoreAudio`HALC_Object_GetPropertyData_DCFString;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`Mix_OpenAudio;Sample`Mix_OpenAudioDevice;Sample`SDL_InitSubSystem;Sample`SDL_InitSubSystem_REAL;Sample`SDL_AudioInit_REAL;Sample`COREAUDIO_DetectDevices;Sample`build_device_list;CoreAudio`AudioObjectGetPropertyData_mac_imp;CoreAudio`HALPlugIn::ObjectHasProperty;CoreAudio`HAL_HardwarePlugIn_ObjectHasProperty;CoreAudio`HALC_ShellObject::HasProperty;CoreAudio`HALC_ProxyObject::HasProperty;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`-[NSMenuBarPresentationInstance _isVisible];AppKit`_NSGetAggregateUIMode;AppKit`-[NSMenuBarPresentationInstance _getAggregateUIMode:withOptions:];HIServices`GetCurrentProcess;HIServices`_RegisterApplication;LaunchServices`_LSApplicationCheckIn;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;LaunchServices`_LSInstallSystemLevelOPTCAppleEventHandler;AE`_AEInstallEventSecurityHandler;libdispatch.dylib`dispatch_once 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`-[NSMenuBarPresentationInstance _isVisible];AppKit`_NSGetAggregateUIMode;AppKit`-[NSMenuBarPresentationInstance _getAggregateUIMode:withOptions:];HIServices`GetCurrentProcess;HIServices`_RegisterApplication;LaunchServices`_LSApplicationCheckIn;LaunchServices`_MyCFXPCCreateCFObjectFromXPCObject;CoreFoundation`CFDictionaryCreate;CoreFoundation`__NSDictionaryI_new;CoreFoundation`__CFAllocateObject;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_should_clear;libsystem_malloc.dylib`tiny_malloc_from_free_list 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`-[NSMenuBarPresentationInstance _isVisible];AppKit`_NSGetAggregateUIMode;AppKit`-[NSMenuBarPresentationInstance _getAggregateUIMode:withOptions:];HIServices`GetCurrentProcess;HIServices`_RegisterApplication;SkyLight`_SLPSRegisterWithServer;Security`SessionGetInfo;libdispatch.dylib`dispatch_once_f 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`-[NSMenuBarPresentationInstance _isVisible];AppKit`_NSGetAggregateUIMode;AppKit`-[NSMenuBarPresentationInstance _getAggregateUIMode:withOptions:];HIServices`GetCurrentProcess;HIServices`_RegisterApplication;LaunchServices`_LSSetApplicationInformationItem;LaunchServices`_LSSetApplicationInformation;LaunchServices`_MyCFXPCCreateXPCObjectFromCFObject;LaunchServices`CFDictionaryApplyBlock(__CFDictionary const*, bool ;LaunchServices`invocation function for block in _MyCFXPCCreateXPCObjectFromCFObject;LaunchServices`_MyCFXPCCreateXPCObjectFromCFObject;CoreFoundation`_CFXPCCreateXPCObjectFromCFObject 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`+[NSMenuBarPresentationInstance activeOrUserMenuBar];AppKit`+[NSMenuBarPresentationInstance activeMenuBar];AppKit`+[NSMenuBarPresentationInstance _userSpaceMenuBar];AppKit`-[NSWorkspaceNotificationCenter addObserver:selector:name:object:];AppKit`-[NSWorkspaceNotificationCenter _addOrRemoveObserver:forName:isAdding:];AppKit`-[NSWorkspaceNotificationCenter _createSubsystemIfNecessary:];AppKit`createActiveDisplaySubsystem;SkyLight`SLSMainConnectionID;SkyLight`SLSMainConnection;SkyLight`SLSNewConnection;QuartzCore`+[CAContext remoteContextWithOptions:];QuartzCore`-[CAContext initRemoteWithOptions:];QuartzCore`CA::Context::connect_remote;QuartzCore`CARenderServerGetServerPort;libxpc.dylib`bootstrap_look_up;libxpc.dylib`bootstrap_look_up3;libxpc.dylib`_xpc_interface_routine;libxpc.dylib`_xpc_pipe_routine;libxpc.dylib`xpc_receive_mach_msg;libxpc.dylib`_xpc_graph_unpack_impl;libxpc.dylib`_xpc_dictionary_create_from_received_message;libxpc.dylib`_xpc_dictionary_apply_wire_f;libxpc.dylib`_xpc_dictionary_deserialize_apply;libobjc.A.dylib`object_getClass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`_NSInitializeAppContext;AppKit`+[NSMenuBarPresentationInstance _isMenuBarVisible];AppKit`+[NSMenuBarPresentationInstance activeOrUserMenuBar];AppKit`+[NSMenuBarPresentationInstance activeMenuBar];AppKit`+[NSMenuBarPresentationInstance _userSpaceMenuBar];AppKit`-[NSWorkspaceNotificationCenter addObserver:selector:name:object:];AppKit`-[NSWorkspaceNotificationCenter _addOrRemoveObserver:forName:isAdding:];AppKit`-[NSWorkspaceNotificationCenter _createSubsystemIfNecessary:];AppKit`createActiveDisplaySubsystem;SkyLight`SLSMainConnectionID;SkyLight`SLSMainConnection;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;SkyLight`__SLSInitialize_block_invoke;SkyLight`CGSDisplayInitialize;libc++.1.dylib`std::__1::__next_prime 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications];AppKit`+[NSSystemAppearanceProxy systemProxy];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__38+[NSSystemAppearanceProxy systemProxy]_block_invoke;AppKit`-[NSSystemAppearanceProxy init];AppKit`+[NSAppearance appearanceNamed:];AppKit`+[NSAppearance _darkAquaAppearance];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__33+[NSAppearance _initializeCoreUI]_block_invoke;Foundation`_NSFaultInObject;AppKit`-[NSBuiltinAppearance initWithBundleResourceName:publicName:catalystName:];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__NSAppearanceGetDefaultSystemAppearanceBundle_block_invoke;Foundation`-[NSBundle initWithPath:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications];AppKit`+[NSSystemAppearanceProxy systemProxy];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__38+[NSSystemAppearanceProxy systemProxy]_block_invoke;AppKit`-[NSSystemAppearanceProxy init];AppKit`+[NSAppearance appearanceNamed:];AppKit`+[NSAppearance _darkAquaAppearance];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__33+[NSAppearance _initializeCoreUI]_block_invoke;Foundation`_NSFaultInObject;AppKit`-[NSBuiltinAppearance initWithBundleResourceName:publicName:catalystName:];AppKit`-[NSAppearance initWithAppearanceNamed:bundle:];AppKit`NSCreateCoreUIRenderer;CoreUI`CUIRenderer::Create;CoreUI`CUICoreThemeRenderer::CUICoreThemeRenderer;CoreUI`-[CUIStructuredThemeStore catalogGlobals];Foundation`+[NSKeyedUnarchiver unarchivedObjectOfClasses:fromData:error:];Foundation`-[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:];libobjc.A.dylib`objc_alloc_init 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications];AppKit`+[NSSystemAppearanceProxy systemProxy];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__38+[NSSystemAppearanceProxy systemProxy]_block_invoke;AppKit`-[NSSystemAppearanceProxy init];AppKit`+[NSAppearance appearanceNamed:];AppKit`+[NSAppearance _vibrantDarkAppearance];Foundation`_NSFaultInObject;AppKit`-[NSBuiltinAppearance initWithBundleResourceName:publicName:catalystName:];AppKit`-[NSAppearance initWithAppearanceNamed:bundle:];AppKit`NSCreateCoreUIRenderer;CoreUI`CUIRenderer::Create;CoreUI`CUICoreThemeRenderer::CUICoreThemeRenderer;CoreUI`+[CUIThemeFacet themeNamed:forBundleIdentifier:error:];CoreUI`PerformBlockWithThemeRefCache;CoreUI`__RunTimeThemeRefForBundleIdentifierAndName_block_invoke;CoreUI`-[CUIStructuredThemeStore initWithPath:];CoreUI`-[CUICommonAssetStorage initWithPath:forWriting:];CoreUI`BOMStorageOpenWithSys;CoreUI`BomSys_open;libsystem_kernel.dylib`__open 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSApplication(ScreenHandling) _registerForDisplayChangedNotifications];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`___NSScreenConfigurationEnsureInitialUpdateOccurred_block_invoke;AppKit`_NSScreenConfigurationUpdateSharedInfoForReason;AppKit`_NSCGSDisplayConfigurationGetCurrent;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`_NSCGSDisplayConfigurationUpdate;AppKit`_NSCGSCreateArrayUsingBlock;AppKit`___NSCGSCreateDisplaysFromDisplayIDsUsingPredicate_block_invoke;AppKit`-[NSCGSDisplay initWithDisplayID:flipOffset:];SkyLight`SLSCopyDisplayColorSpace;SkyLight`CGSColorSpaceRegistryCopyColorSpace;CoreGraphics`CGColorSpaceFromICCDataCacheGetRetained;CoreGraphics`CGColorSpaceCreateWithICCDataInternal;CoreGraphics`colorspace_with_name_from_icc_data;ColorSync`verify_BT709_PQ;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;ColorSync`__pre_cicp_BT709_PQProfile_block_invoke;ColorSync`create;ColorSync`computeMD5;libcommonCrypto.dylib`CC_MD5_Update;libcorecrypto.dylib`ccdigest_update;libcorecrypto.dylib`md5_compress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSApplication(ScreenHandling) _registerForDisplayChangedNotifications];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`___NSScreenConfigurationEnsureInitialUpdateOccurred_block_invoke;AppKit`_NSScreenConfigurationUpdateSharedInfoForReason;AppKit`+[NSCGSDock currentDockForDisplayConfiguration:];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`_NSCGSDockUpdate;HIServices`CoreDockGetRectAndOrientation;dyld`dyld4::APIs::dlsym;dyld`dyld4::RuntimeLocks::withLoadersReadLock(void ;dyld`invocation function for block in dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`+[NSFrontmostDocumentWindowObserver registerForInterestedFileProviders];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__71+[NSFrontmostDocumentWindowObserver registerForInterestedFileProviders]_block_invoke;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::RuntimeState::notifyLoad;libobjc.A.dylib`map_images;libobjc.A.dylib`map_images_nolock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`+[NSFrontmostDocumentWindowObserver registerForInterestedFileProviders];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__71+[NSFrontmostDocumentWindowObserver registerForInterestedFileProviders]_block_invoke;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::RuntimeState::notifyLoad;libobjc.A.dylib`map_images;libobjc.A.dylib`map_images_nolock;libobjc.A.dylib`load_categories_nolock;libobjc.A.dylib`load_categories_nolock(header_info*)::$_12::operator();libobjc.A.dylib`attachCategories;libobjc.A.dylib`attachCategories(objc_class*, locstamped_category_t const*, unsigned int, int)::$_11::operator()(attachCategories;libobjc.A.dylib`flushCaches(objc_class*, char const*, bool ;libobjc.A.dylib`foreach_realized_class_and_subclass(objc_class*, bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];Foundation`-[NSObject(NSKeyValueObserverRegistration) addObserver:forKeyPath:options:context:];Foundation`-[NSObject(NSKeyValueObserverRegistration) _addObserver:forProperty:options:context:];Foundation`-[NSKeyValueUnnestedProperty isaForAutonotifying];Foundation`-[NSKeyValueUnnestedProperty _isaForAutonotifying];Foundation`_NSKVONotifyingEnableForInfoAndKey;Foundation`_NSKeyValueMutableArrayGetterForIsaAndKey;Foundation`+[NSObject(NSKeyValueCoding) _createMutableArrayValueGetterWithContainerClassID:key:];Foundation`NSKeyValueMethodForPattern;Foundation`NSResolvedSelectorForName;libobjc.A.dylib`sel_lookUpByName;dyld`dyld4::APIs::_dyld_get_objc_selector;dyld`objc::StringHashTable::tryGetIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];SkyLight`SLSSetSymbolicHotKeyWithOptions;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`+[NSApplication sharedApplication];AppKit`-[NSApplication init];AppKit`-[NSResponder init];AppKit`_NSDPClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`initializePropertyInfo;AppKit`+[NSResponder automaticallyTracksDependenciesOnValueForKey:];dyld`dyld4::APIs::dyld_image_header_containing_address;dyld`dyld4::APIs::findImageMappedAt;dyld`dyld4::RuntimeLocks::withLoadersReadLock(void ;dyld`invocation function for block in dyld4::APIs::findImageMappedAt;dyld`dyld4::Loader::contains 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;Sample`CreateApplicationMenus;AppKit`+[NSMenuItem separatorItem];AppKit`-[NSMenuItem _configureAsSeparatorItem];AppKit`-[NSMenuItem setTitle:];Foundation`_NSFaultInObject;AppKit`-[NSExtraMIData init];AppKit`+[NSImage imageNamed:];AppKit`+[NSImage _systemImageNamed:];AppKit`+[NSImage(NSSymbolImages) _symbolCompatibilityImageNamed:];AppKit`catalogWithSystemSymbolName;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__NSImageGetCoreGlyphsCatalog_block_invoke;CoreUI`+[CUICatalog defaultUICatalogForBundle:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;CoreUI`__40+[CUICatalog defaultUICatalogForBundle:]_block_invoke.5;CoreUI`-[CUICatalog initWithName:fromBundle:error:];CoreUI`+[CUIThemeFacet themeNamed:forBundleIdentifier:error:];CoreUI`PerformBlockWithThemeRefCache;CoreUI`__RunTimeThemeRefForBundleIdentifierAndName_block_invoke;CoreUI`-[CUIStructuredThemeStore initWithPath:];CoreUI`-[CUICommonAssetStorage initWithPath:forWriting:];CoreUI`-[CUICommonAssetStorage _commonInitWithStorage:forWritting:];CoreUI`BOMTreeOpenWithName;CoreUI`_tocGet 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;Sample`CreateApplicationMenus;AppKit`+[NSMenuItem separatorItem];AppKit`-[NSMenuItem _configureAsSeparatorItem];AppKit`-[NSMenuItem setTitle:];Foundation`_NSFaultInObject;AppKit`-[NSExtraMIData init];AppKit`+[NSImage imageNamed:];AppKit`+[NSImage _systemImageNamed:];AppKit`+[NSImage(NSSymbolImages) _symbolCompatibilityImageNamed:];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__58+[NSImage(NSSymbolImages) _symbolCompatibilityImageNamed:]_block_invoke;Foundation`-[NSBundle URLForResource:withExtension:subdirectory:];CoreFoundation`CFBundleCopyResourceURL;CoreFoundation`_CFBundleCopyFindResources;CoreFoundation`_copyResourceURLsFromBundle;CoreFoundation`_copyQueryTable;CoreFoundation`_createQueryTableAtPath;CoreFoundation`_CFBundleReadDirectory;CoreFoundation`_CFIterateDirectory;CoreFoundation`___CFBundleReadDirectory_block_invoke;CoreFoundation`-[__NSDictionaryM __setObject:forKey:];CoreFoundation`__CFStringHash 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;Sample`CreateApplicationMenus;AppKit`+[NSMenuItem separatorItem];AppKit`-[NSMenuItem _configureAsSeparatorItem];AppKit`-[NSMenuItem setTitle:];Foundation`_NSFaultInObject;AppKit`-[NSExtraMIData init];AppKit`+[NSImage imageNamed:];AppKit`+[NSImage _systemImageNamed:];AppKit`+[NSImage(NSSymbolImages) _imageWithSymbolName:inCatalog:variableValue:accessibilityDescription:createdWithCompatibilityImageName:];AppKit`-[NSImage bestRepresentationForHints:];AppKit`__38-[NSImage bestRepresentationForHints:]_block_invoke;AppKit`-[NSImageSymbolRepProvider bestRepresentationForImage:hints:];AppKit`-[_NSSimpleLRUCache objectForKey:creationBlock:];AppKit`-[NSImageSymbolRepProvider _bestRepresentationForImage:hints:];AppKit`-[CUICatalog(NSAppearanceNamesForVectorGlyph) NS_appearanceNamesForVectorGlyphWithName:];CoreUI`-[CUICatalog namedVectorGlyphWithName:scaleFactor:deviceIdiom:layoutDirection:glyphSize:glyphWeight:glyphPointSize:appearanceName:];CoreUI`-[CUICatalog namedVectorGlyphWithName:scaleFactor:deviceIdiom:layoutDirection:glyphSize:glyphWeight:glyphPointSize:appearanceName:locale:];CoreUI`-[CUICatalog _resolvedRenditionKeyFromThemeRef:withBaseKey:scaleFactor:deviceIdiom:deviceSubtype:displayGamut:layoutDirection:sizeClassHorizontal:sizeClassVertical:memoryClass:graphicsClass:graphicsFallBackOrder:deviceSubtypeFallBackOrder:locale:adjustRenditionKeyWithBlock:];CoreUI`-[CUICatalog _private_resolvedRenditionKeyFromThemeRef:withBaseKey:scaleFactor:deviceIdiom:deviceSubtype:displayGamut:layoutDirection:sizeClassHorizontal:sizeClassVertical:memoryClass:graphicsClass:graphicsFallBackOrder:deviceSubtypeFallBackOrder:localizationIdentifier:adjustRenditionKeyWithBlock:];CoreUI`-[CUIStructuredThemeStore canGetRenditionWithKey:];CoreUI`-[CUIStructuredThemeStore assetExistsForKey:];CoreUI`-[CUICommonAssetStorage assetExistsForKeyData:length:];CoreUI`BOMTreeValueExists;libsystem_platform.dylib`_platform_memcmp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;Sample`CreateApplicationMenus;AppKit`-[NSMenu insertItemWithTitle:action:keyEquivalent:atIndex:];AppKit`-[NSMenu insertItem:atIndex:];AppKit`+[NSMenu(KeyEvents) _updateMenuKeyCacheForInsertion:firstItem:itemCount:];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`initializeAndMaybeRelock;libobjc.A.dylib`realizeClassMaybeSwiftMaybeRelock;libobjc.A.dylib`class_data_bits_t::setData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`initializeAndMaybeRelock;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`CALLING_SOME_+initialize_METHOD;AppKit`+[NSApplication initialize];AppKit`+[NSApplication _initializeRegisteredDefaults];Foundation`-[NSUserDefaults(NSUserDefaults) boolForKey:];CoreFoundation`_CFPreferencesGetAppBooleanValueWithContainer;CoreFoundation`_CFPreferencesCopyAppValueWithContainerAndConfiguration;CoreFoundation`-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:];CoreFoundation`-[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:];CoreFoundation`__108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke;CoreFoundation`-[_CFXPreferences withSearchLists:];CoreFoundation`__108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke.155;CoreFoundation`-[CFPrefsSearchListSource addSourceForIdentifier:user:byHost:container:];CoreFoundation`-[_CFXPreferences withSourceForIdentifier:user:byHost:container:cloud:perform:];CoreFoundation`__96-[_CFXPreferences(SourceAdditions) withSourceForIdentifier:user:byHost:container:cloud:perform:]_block_invoke.217;CoreFoundation`_CFCopyHomeDirURLForUser;CoreFoundation`_CFURLCreateWithFileSystemRepresentation;CoreFoundation`CreateStringFromFileSystemRepresentationByAddingPercentEscapes;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`initializeAndMaybeRelock;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`CALLING_SOME_+initialize_METHOD;AppKit`+[NSApplication initialize];AppKit`+[NSApplication _initializeRegisteredDefaults];Foundation`-[NSUserDefaults(NSUserDefaults) boolForKey:];CoreFoundation`_CFPreferencesGetAppBooleanValueWithContainer;CoreFoundation`_CFPreferencesCopyAppValueWithContainerAndConfiguration;CoreFoundation`-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:];CoreFoundation`-[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:];CoreFoundation`__108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke;CoreFoundation`__76-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:]_block_invoke;CoreFoundation`-[CFPrefsSource copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_getDictionary:];CoreFoundation`-[CFPrefsSource mergeIntoDictionary:sourceDictionary:cloudKeyEvaluator:];CoreFoundation`-[__NSFrozenDictionaryM __apply:context:];CoreFoundation`__72-[CFPrefsSource mergeIntoDictionary:sourceDictionary:cloudKeyEvaluator:]_block_invoke;CoreFoundation`-[__NSDictionaryM __setObject:forKey:];CoreFoundation`__CFStringHash 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`initializeAndMaybeRelock;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`CALLING_SOME_+initialize_METHOD;AppKit`+[NSApplication initialize];AppKit`+[NSApplication _initializeRegisteredDefaults];Foundation`-[NSUserDefaults(NSUserDefaults) registerDefaults:];CoreFoundation`_CFXPreferencesRegisterDefaultValues;CoreFoundation`-[_CFXPreferences registerDefaultValues:];CoreFoundation`withKeysAndValues;CoreFoundation`__41-[_CFXPreferences registerDefaultValues:]_block_invoke;CoreFoundation`-[_CFXPreferences withNamedVolatileSourceForIdentifier:perform:];CoreFoundation`__81-[_CFXPreferences(SourceAdditions) withNamedVolatileSourceForIdentifier:perform:]_block_invoke;CoreFoundation`_addBackstopValuesForIdentifierAndSource;CoreFoundation`-[CFPrefsSource setValues:forKeys:count:copyValues:removeValuesForKeys:count:from:];CoreFoundation`createDeepCopyOfValueForKey;libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libsystem_malloc.dylib`_malloc_zone_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`-[NSApplication finishLaunching];AppKit`+[NSDocumentController sharedDocumentController];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`-[NSApplication finishLaunching];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`___NSAccessibilityInit_block_invoke;HIServices`_AXUIElementRegisterServerWithRunLoop;CoreFoundation`CFNotificationCenterAddObserver;CoreFoundation`_CFXNotificationRegisterObserver;libdispatch.dylib`_dispatch_mach_send_push;libdispatch.dylib`_dispatch_event_loop_poke;libsystem_kernel.dylib`kevent_id 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_CreateDevice;Sample`Cocoa_RegisterApp;AppKit`-[NSApplication finishLaunching];AppKit`-[NSApplication(NSMenuUpdating) _customizeMainMenu];AppKit`-[NSApplication(NSMenuUpdating) _addTextInputMenuItems:];AppKit`_NSFindEditMenu;Foundation`-[NSBundle localizedStringForKey:value:table:];CoreFoundation`_CFBundleCopyLocalizedStringForLocalizationTableURLAndMarkdownOption;CoreFoundation`_copyStringTable;CoreFoundation`_CFBundleGetStringsSources;CoreFoundation`CFBundleCopyResourceURL;CoreFoundation`_CFBundleCopyFindResources;CoreFoundation`_copyResourceURLsFromBundle;CoreFoundation`_copyQueryTable;CoreFoundation`_createQueryTableAtPath;CoreFoundation`_CFBundleReadDirectory;CoreFoundation`_CFIterateDirectory;libsystem_c.dylib`readdir;libsystem_kernel.dylib`__getdirentries64 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_VideoInit;Sample`Cocoa_InitKeyboard;Sample`UpdateKeymap;HIToolbox`TISCopyCurrentKeyboardLayoutInputSource;HIToolbox`TSMCurrentKeyboardLayoutInputSourceRefCreate;HIToolbox`TSMCurrentKeyboardInputSourceRefCreate;HIToolbox`isCreateCurrentKeyboardInputSourceRef;HIToolbox`_HaveOnlyOneKeyboardInputSource;HIToolbox`islGetInputSourceListWithAdditions;HIToolbox`isPrefsCreateCacheFromEnabledAndDefaultInputSources;HIToolbox`GetInputSourceEnabledPrefsIncludingThirdParty;HIToolbox`CopyInputSourceEnabledPrefs;HIToolbox`ValidateEnabledInputSourceIDs;HIToolbox`islcGetInputMethodIndexFromBundleID;HIToolbox`GetInputSourceCacheHeader;HIToolbox`InitializeInputSourceCache;CarbonCore`IntlFCOpenComponentData;CarbonCore`CacheFMMapData;CoreFoundation`CFPasteboardCopyData;libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;CoreFoundation`__CFPasteboardCopyData_block_invoke;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;CoreFoundation`____kCFPasteboardFilenamesFlavor_block_invoke;LaunchServices`UTTypeCreatePreferredIdentifierForTag;LaunchServices`+[UTTypeRecord typeRecordWithTag:ofClass:conformingToIdentifier:];LaunchServices`LaunchServices::Database::Context::_get;LaunchServices`_LSContextInitCommon;LaunchServices`_LSCopyServerStore;Foundation`_NSXPCDistantObjectSimpleMessageSend1;Foundation`-[NSXPCConnection _sendSelector:withProxy:arg1:];Foundation`-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:];Foundation`__88-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:]_block_invoke_3;Foundation`-[NSXPCConnection _decodeAndInvokeReplyBlockWithEvent:sequence:replyInfo:];Foundation`-[NSXPCDecoder _decodeReplyFromXPCObject:forSelector:];Foundation`-[NSXPCDecoder __decodeXPCObject:allowingSimpleMessageSend:outInvocation:outArguments:outArgumentsMaxCount:outMethodSignature:outSelector:isReply:replySelector:];Foundation`_NSXPCSerializationDecodeInvocationArgumentArray;Foundation`_NSXPCSerializationDecodeTypedObjCValuesFromArray;Foundation`-[NSXPCDecoder _decodeObjectOfClasses:atObject:];Foundation`_decodeObject;LaunchServices`-[FSNode initWithCoder:];LaunchServices`-[NSCoder(LaunchServicesAdditions) ls_decodeObjectOfClass:forKey:];LaunchServices`-[NSCoder(LaunchServicesAdditions) ls_decodeObjectOfClasses:forKey:];Foundation`-[NSXPCDecoder decodeObjectOfClasses:forKey:];Foundation`_decodeObjectAfterSettingAllowListForKey;Foundation`_decodeObject;Foundation`-[NSURL(NSURL) initWithCoder:];Foundation`-[NSURL(NSURL) initWithString:relativeToURL:encodingInvalidCharacters:];Foundation`-[__NSConcreteURLComponents URL];CoreFoundation`_CFURLComponentsCopyURLRelativeToURL;CoreFoundation`_CFURLComponentsCopyString;CoreFoundation`_CFURLComponentsCopyHost 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_VideoInit;Sample`Cocoa_InitKeyboard;Sample`UpdateKeymap;HIToolbox`TISCopyCurrentKeyboardLayoutInputSource;HIToolbox`TSMCurrentKeyboardLayoutInputSourceRefCreate;HIToolbox`TSMCurrentKeyboardInputSourceRefCreate;HIToolbox`isCreateCurrentKeyboardInputSourceRef;HIToolbox`_HaveOnlyOneKeyboardInputSource;HIToolbox`islGetInputSourceListWithAdditions;HIToolbox`isPrefsCreateCacheFromEnabledAndDefaultInputSources;HIToolbox`GetInputSourceEnabledPrefsIncludingThirdParty;HIToolbox`CopyInputSourceEnabledPrefs;CoreFoundation`_CFPreferencesCopyAppValueWithContainerAndConfiguration;CoreFoundation`-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:];CoreFoundation`-[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:];CoreFoundation`__108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke;CoreFoundation`__76-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:]_block_invoke;CoreFoundation`-[CFPrefsSource copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_getDictionary:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_generationCountFromListOfSources:count:];CoreFoundation`-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:];CoreFoundation`CFPREFERENCES_IS_WAITING_FOR_SYSTEM_AND_USER_CFPREFSDS;CoreFoundation`__103-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:]_block_invoke.52;libdispatch.dylib`dispatch_apply;libdispatch.dylib`_dispatch_apply_with_attr_f;libdispatch.dylib`_dispatch_apply_invoke_and_wait;libdispatch.dylib`_dispatch_client_callout2;CoreFoundation`__103-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:]_block_invoke;CoreFoundation`-[_CFXPreferences withConnectionForRole:andUserIdentifier:performBlock:];CoreFoundation`__103-[CFPrefsSearchListSource synchronouslySendSystemMessage:andUserMessage:andDirectMessage:replyHandler:]_block_invoke_2;libxpc.dylib`xpc_connection_send_message_with_reply_sync;libdispatch.dylib`dispatch_mach_send_with_result_and_wait_for_reply;libdispatch.dylib`_dispatch_mach_send_and_wait_for_reply;libdispatch.dylib`_dispatch_mach_send_msg;libdispatch.dylib`_dispatch_mach_send_drain;libdispatch.dylib`_dispatch_mach_msg_send;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`Cocoa_VideoInit;Sample`Cocoa_InitKeyboard;Sample`UpdateKeymap;HIToolbox`TISCopyCurrentKeyboardLayoutInputSource;HIToolbox`TSMCurrentKeyboardLayoutInputSourceRefCreate;HIToolbox`TSMCurrentKeyboardInputSourceRefCreate;HIToolbox`isCreateCurrentKeyboardInputSourceRef;HIToolbox`_HaveOnlyOneKeyboardInputSource;HIToolbox`islGetInputSourceListWithAdditions;HIToolbox`isPrefsCreateCacheFromEnabledAndDefaultInputSources;HIToolbox`isPrefsCreateDefaultASCIIInputSourceForLocale;HIToolbox`islcCreateKeyboardLayoutNameForID;HIToolbox`TISGetAppleKeyLayoutIndexForNumericID;HIToolbox`TISMapAppleKeyLayoutData;CoreFoundation`CFBundleCopyResourceURLInDirectory;CoreFoundation`_CFBundleCopyFindResources;CoreFoundation`_CFBundleCopyLanguageSearchListInDirectory;CoreFoundation`_CFBundleCopyInfoDictionaryInDirectory;CoreFoundation`_CFBundleGetBundleVersionForURL;CoreFoundation`_CFIterateDirectory;libsystem_c.dylib`readdir;libsystem_c.dylib`_readdir_unlocked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`SDL_StartTextInput_REAL;Sample`Cocoa_StartTextInput;AppKit`-[NSView initWithFrame:];AppKit`-[NSResponder init];AppKit`_NSDPClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`initializePropertyInfo;AppKit`+[NSResponder automaticallyTracksDependenciesOnValueForKey:];dyld`dyld4::APIs::dyld_image_header_containing_address;dyld`dyld4::APIs::findImageMappedAt;dyld`dyld4::RuntimeLocks::withLoadersReadLock(void ;dyld`invocation function for block in dyld4::APIs::findImageMappedAt;dyld`dyld4::PrebuiltLoader::contains 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`SDL_StartTextInput_REAL;Sample`Cocoa_StartTextInput;AppKit`-[NSView initWithFrame:];AppKit`-[NSResponder init];AppKit`_NSDPClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`createSelectorMap;CoreFoundation`CFDictionaryCreate;CoreFoundation`__CFBasicHashRehash;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`small_malloc_should_clear;libsystem_malloc.dylib`small_malloc_from_free_list 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init;Sample`SDL_Init_REAL;Sample`SDL_InitSubSystem_REAL;Sample`SDL_VideoInit_REAL;Sample`SDL_StartTextInput_REAL;Sample`Cocoa_StartTextInput;AppKit`-[NSView initWithFrame:];AppKit`-[NSResponder init];AppKit`_NSDPClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`lockedClassInfoForClass;libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSFrameView initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _updateTitleProperties:animated:];AppKit`-[NSThemeFrame setRepresentedURL:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSWindow showsFullScreenButton];AppKit`-[NSWindow(NSFullScreen) canEnterFullScreenMode];AppKit`-[NSWindow _effectiveCollectionBehavior];AppKit`-[NSWindow _cacheAndSetPropertiesForCollectionBehavior:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSThemeFrame newZoomButton];AppKit`+[_NSThemeZoomWidget zoomWidgetInView:withButtonID:action:];AppKit`-[_NSThemeWidget initWithButtonID:];AppKit`-[NSControl sizeToFit];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`getMethodFromRelativeList 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSFrameView initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _updateTitleProperties:animated:];AppKit`-[NSThemeFrame setRepresentedURL:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSWindow showsFullScreenButton];AppKit`-[NSWindow(NSFullScreen) canEnterFullScreenMode];AppKit`-[NSWindow _effectiveCollectionBehavior];AppKit`-[NSWindow _cacheAndSetPropertiesForCollectionBehavior:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSThemeFrame _tileTitlebarAndRedisplay:];AppKit`-[NSThemeFrame _updateTitleTextField];AppKit`-[NSThemeFrame _addKnownSubview:];AppKit`-[NSThemeFrame addSubview:];AppKit`-[NSFrameView addSubview:];AppKit`-[NSView addSubview:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSFrameView initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _updateTitleProperties:animated:];AppKit`-[NSThemeFrame setRepresentedURL:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSWindow showsFullScreenButton];AppKit`-[NSWindow(NSFullScreen) canEnterFullScreenMode];AppKit`-[NSWindow _effectiveCollectionBehavior];AppKit`-[NSWindow _cacheAndSetPropertiesForCollectionBehavior:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSThemeFrame newCloseButton];AppKit`+[_NSThemeCloseWidget closeWidgetInView:withButtonID:action:];AppKit`-[_NSThemeWidget initWithButtonID:];AppKit`-[NSButton initWithFrame:];AppKit`-[NSControl initWithFrame:];AppKit`-[NSButtonCell init];AppKit`-[NSButtonCell initTextCell:];AppKit`-[NSButtonCell _convertToText:];AppKit`-[NSCell _convertToText:];UIFoundation`+[NSFont systemFontOfSize:width:];UIFoundation`__NSGetMetaFontInstanceWithType;UIFoundation`+[__NSFontTypefaceInfo typefaceInfoForFontDescriptor:];Foundation`-[NSConcreteMapTable setObject:forKey:];Foundation`probeGC;CoreText`TDescriptor::Hash;CoreText`TDescriptor::InitBaseFont;CoreText`TDescriptor::CreateMatchingDescriptorInternal;CoreText`TDescriptorSource::CopySplicedDescriptorForName;CoreText`TDescriptorSource::CopySpliceFontForName;CoreText`MakeSpliceDescriptor;CoreText`setOpticalSizeComponent(__CFString const*, ;CoreFoundation`__CFStringHash 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSFrameView initWithFrame:styleMask:owner:];AppKit`-[NSView initWithFrame:];AppKit`-[NSView _commonAwake];Foundation`-[NSNotificationCenter addObserverForName:object:queue:usingBlock:];CoreFoundation`_CFAppVersionCheck;CoreFoundation`__CFCheckCFInfoPACSignature_Bridged 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _floatTitlebarAndToolbarFromInit:];AppKit`+[NSAnimationContext runAnimationGroup:];AppKit`__49-[NSThemeFrame _floatTitlebarAndToolbarFromInit:]_block_invoke;AppKit`-[NSThemeFrame _makeTitlebarViewWithFrame:];AppKit`-[NSTitlebarView initWithFrame:];AppKit`-[NSTitlebarView _installBackdropLayer];QuartzCore`+[CALayer layer];QuartzCore`-[CALayer init];QuartzCore`CA::Layer::class_state;QuartzCore`classDescription;QuartzCore`classDescription_locked;QuartzCore`+[CABackdropLayer defaultValueForKey:];QuartzCore`+[CALayer defaultValueForKey:];QuartzCore`_CAInternAtomWithCString 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _floatTitlebarAndToolbarFromInit:];AppKit`+[NSAnimationContext runAnimationGroup:];AppKit`__49-[NSThemeFrame _floatTitlebarAndToolbarFromInit:]_block_invoke;AppKit`-[NSTitlebarContainerView initWithFrame:];AppKit`-[NSWindowSectionController init];AppKit`-[NSTrackingSeparatorToolbarItem initWithItemIdentifier:];AppKit`-[NSToolbarItem _forceSetView:];libobjc.A.dylib`class_respondsToSelector_inst;libobjc.A.dylib`resolveMethod_locked 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSThemeFrame initWithFrame:styleMask:owner:];AppKit`-[NSThemeFrame _floatTitlebarAndToolbarFromInit:];AppKit`+[NSAnimationContext runAnimationGroup:];AppKit`-[NSThemeFrame _moveTitlebarViewsToView:];AppKit`-[NSThemeFrame _updateButtons];AppKit`-[NSThemeFrame _updateButtonState];AppKit`-[_NSThemeWidget update];AppKit`-[NSWindow _userInterfaceItemIsTemporarilyDisabled:];AppKit`_NSDockAllowsMinimize;AppKit`+[NSMenuBarPresentationInstance _getActiveSystemUIMode:];LaunchServices`_LSCopyMetaApplicationInformationItem;LaunchServices`_LSCopyMetaApplicationInformation;libsystem_trace.dylib`DYLD-STUB$$voucher_get_activity_id 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`Cocoa_CreateWindow;AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:screen:];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSResponder init];AppKit`_NSDPClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`lockedClassInfoForClass;AppKit`initializePropertyInfo;Foundation`+[NSObject(NSKeyValueObservingCustomization) keyPathsForValuesAffectingValueForKey:];Foundation`__84+[NSObject(NSKeyValueObservingCustomization) keyPathsForValuesAffectingValueForKey:]_block_invoke;Foundation`NSResolvedSelectorForName;libobjc.A.dylib`sel_lookUpByName;libobjc.A.dylib`bool objc::DenseMapBase::LookupBucketFor;libobjc.A.dylib`objc::DenseMapInfo::isEqual 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`SDL_SetWindowTitle_REAL;Sample`Cocoa_SetWindowTitle;AppKit`-[NSWindow _dosetTitle:andDefeatWrap:];AppKit`-[NSWindowTitleController _propertiesChanged:];Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:];CoreFoundation`_CFXNotificationPost;CoreFoundation`_CFXRegistrationPost;CoreFoundation`___CFXRegistrationPost_block_invoke;CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__;AppKit`-[NSThemeFrame _updateTitleProperties:animated:];AppKit`-[NSFrameView _updateTitleProperties:animated:];AppKit`-[NSThemeFrame setTitle:];AppKit`-[NSTitledFrame setTitle:subtitle:];AppKit`-[NSTitledFrame _titleDidChange];AppKit`-[NSThemeFrame _tileTitlebarAndRedisplay:];AppKit`-[NSThemeFrame _updateTitleTextFieldFrame:];AppKit`-[NSThemeFrame _titlebarTitleRect];AppKit`-[NSThemeFrame _defaultTitlebarTitleRect];AppKit`-[NSThemeFrame _titleCellSize];AppKit`-[NSThemeFrame _size:ofCell:withTitle:];AppKit`-[NSTextFieldCell cellSizeForBounds:];AppKit`-[NSCell cellSizeForBounds:];AppKit`_NSGetTextCellBoundingRect;AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`___NSGetTextCellBoundingRect_block_invoke;AppKit`__NSGetStringAndAttributesFromTextCell;AppKit`-[NSTextFieldCell _textAttributes];AppKit`-[NSCell _textAttributesWithInteriorBackgroundStyle:];CoreFoundation`-[__NSDictionaryM objectForKey:];CoreFoundation`__CFStringEqual 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_CreateWindow;Sample`SDL_CreateWindow_REAL;Sample`SDL_GL_LoadLibrary_REAL;Sample`SDL_LoadObject_REAL 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;OpenGL`0x00000001edb62208;OpenGL`0x00000001edb62334;GLEngine`gliInitializeLibrary;libGFXShared.dylib`gfxInitializeLibrary;AppleMetalOpenGLRenderer`gldCreateDevice;AppleMetalOpenGLRenderer`GLDDeviceRec::initWithDisplayMask;AppleMetalOpenGLRenderer`GLDPixelConverter::init;Metal`-[_MTLDevice newLibraryWithURL:error:];Metal`MTLLibraryBuilder::newLibraryWithFile;Metal`MTLLibraryBuilder::newLibraryWithArchive(MTLUINT256_t const&, NSError**, MTLLibraryData* ;Metal`MTLLibraryCache::newLibraryData(MTLUINT256_t const&, NSError**, MTLLibraryData* ;libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`invocation function for block in MTLLibraryCache::newLibraryData(MTLUINT256_t const&, NSError**, MTLLibraryData* ;Metal`invocation function for block in MTLLibraryBuilder::newLibraryWithFile;Metal`MTLLibraryDataWithArchive::parseArchive;libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`invocation function for block in MTLLibraryDataWithArchive::parseArchive;Metal`MTLLibraryDataWithArchive::parseArchiveSync;Metal`LibraryWithFile::readBytes;libsystem_c.dylib`fread;libsystem_kernel.dylib`__error 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;OpenGL`0x00000001edb62208;OpenGL`0x00000001edb62334;GLEngine`gliInitializeLibrary;libGFXShared.dylib`gfxInitializeLibrary;AppleMetalOpenGLRenderer`gldCreateDevice;AppleMetalOpenGLRenderer`GLDDeviceRec::initWithDisplayMask;Metal`MTLCopyAllDevices;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;Metal`invocation function for block in MTLDeviceArrayInitialize;Metal`MTLRegisterDevices;libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`+[MTLIOAccelService registerService:];Metal`-[MTLIOAccelService initWithAcceleratorPort:];AGXMetal13_3`-[AGXG13GDevice initWithAcceleratorPort:];AGXMetal13_3`-[AGXG13GFamilyDevice initWithAcceleratorPort:simultaneousInstances:];IOGPU`-[IOGPUMetalDevice initWithAcceleratorPort:options:];IOGPU`IOGPUDeviceCreateWithAPIProperty;IOKit`IOServiceOpen;IOKit`io_service_open_extended;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;OpenGL`0x00000001edb62208;OpenGL`0x00000001edb62334;GLEngine`gliInitializeLibrary;libGFXShared.dylib`gfxInitializeLibrary;AppleMetalOpenGLRenderer`gldCreateDevice;AppleMetalOpenGLRenderer`GLDDeviceRec::initWithDisplayMask;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppleMetalOpenGLRenderer`invocation function for block in GLDDeviceRec::initWithDisplayMask;CoreFoundation`_CFPreferencesGetAppBooleanValueWithContainer;CoreFoundation`_CFPreferencesCopyAppValueWithContainerAndConfiguration;CoreFoundation`-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:];CoreFoundation`-[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:];CoreFoundation`__108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke;CoreFoundation`__76-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:]_block_invoke;CoreFoundation`-[CFPrefsSource copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_copyValueForKey:];CoreFoundation`-[CFPrefsSearchListSource alreadylocked_getDictionary:];CoreFoundation`-[CFPrefsSource mergeIntoDictionary:sourceDictionary:cloudKeyEvaluator:];CoreFoundation`-[__NSFrozenDictionaryM __apply:context:];CoreFoundation`__72-[CFPrefsSource mergeIntoDictionary:sourceDictionary:cloudKeyEvaluator:]_block_invoke;CoreFoundation`-[__NSDictionaryM __setObject:forKey:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;OpenGL`0x00000001edb62208;OpenGL`0x00000001edb62334;GLEngine`gliInitializeLibrary;libGFXShared.dylib`gfxInitializeLibrary;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::APIs::dlopen_from(char const*, int, void*)::$_1::operator();dyld`dyld4::JustInTimeLoader::applyFixups;dyld`dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld3::MachOAnalyzer::withVMLayout(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`dyld3::MachOFile::forEachChainedFixupTarget(Diagnostics&, dyld_chained_fixups_header const*, linkedit_data_command const*, void ;dyld`invocation function for block in mach_o::Fixups::forEachBindTarget_ChainedFixups(Diagnostics&, void ;dyld`invocation function for block in dyld4::Loader::forEachBindTarget(Diagnostics&, dyld4::RuntimeState&, void (unsigned int, unsigned int, dyld4::Loader::ResolvedSymbol const&) block_pointer, bool, void (dyld4::Loader::ResolvedSymbol const&, bool&) block_pointer, void ;dyld`dyld4::Loader::resolveSymbol(Diagnostics&, dyld4::RuntimeState&, int, char const*, bool, bool, void ;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;OpenGL`0x00000001edb62208;OpenGL`0x00000001edb62334;GLEngine`gliInitializeLibrary;libGFXShared.dylib`gfxInitializeLibrary;IOKit`IORegistryEntryCreateCFProperties;IOKit`io_registry_entry_get_properties_bin_buf;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`glcPluginCount;OpenGL`0x00000001edb61ecc;libsystem_kernel.dylib`stat 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`glcPluginCount;OpenGL`0x00000001edb61ecc;libGFXShared.dylib`gfxLoadPluginData;SkyLight`SLSAcceleratorForDisplayAlias;SkyLight`get_current_display_system_state;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;AppKit`-[NSOpenGLPixelFormat initWithAttributes:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;libGFXShared.dylib`gfxPreferRemovable;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;libGFXShared.dylib`__apply_selection_policy_block_invoke;IOSurface`IOSurfaceClientCopyGPUPolicies;libsystem_pthread.dylib`pthread_once;libsystem_platform.dylib`_os_once_callout;libsystem_pthread.dylib`__pthread_once_handler;IOSurface`_iosConnectInitalize;IOKit`IOServiceGetMatchingService;IOKit`io_service_get_matching_service_bin;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_GL_CreateContext;Sample`SDL_GL_CreateContext_REAL;Sample`Cocoa_GL_CreateContext;Sample`-[SDLOpenGLContext initWithFormat:shareContext:];AppKit`-[NSOpenGLContext initWithFormat:shareContext:];OpenGL`CGLCreateContext;GLEngine`gliCreateContextWithShared;libGFXShared.dylib`gfxCreateSharedState;AppleMetalOpenGLRenderer`gldCreateShareGroup;AppleMetalOpenGLRenderer`GLDShareGroupRec::initWithDevice;AGXMetal13_3`-[AGXG13GFamilyDevice newCommandQueue];AGXMetal13_3`-[AGXG13GFamilyCommandQueue initWithDevice:descriptor:];IOGPU`-[IOGPUMetalCommandQueue initWithDevice:descriptor:];IOGPU`IOGPUCommandQueueCreateWithQoS;libsystem_kernel.dylib`__proc_info 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplOpenGL3_Init;Sample`imgl3wInit;Sample`imgl3wInit2;Sample`load_procs(void (* (*)(char const*));Sample`get_proc;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplOpenGL3_Init;Sample`imgl3wInit;Sample`imgl3wInit2;Sample`load_procs(void (* (*)(char const*));Sample`get_proc;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld4::Loader::hasExportedSymbol 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplOpenGL3_Init;Sample`imgl3wInit;libsystem_c.dylib`atexit;dyld`dyld4::APIs::dladdr;dyld`dyld3::MachOLoaded::findClosestSymbol 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplSDL2_InitForOpenGL;Sample`ImGui_ImplSDL2_Init;Sample`SDL_CreateSystemCursor;Sample`SDL_CreateSystemCursor_REAL;Sample`Cocoa_CreateSystemCursor;Sample`LoadHiddenSystemCursor;AppKit`-[NSImage initWithContentsOfURL:];AppKit`+[NSImageRep _imageRepsWithContentsOfURL:expandImageContentNow:giveUpOnNetworkURLsWithoutGoodExtensions:];AppKit`+[NSImageRep _imageRepClassForFileNameExtension:andHFSFileType:];AppKit`imageRepFor;Foundation`_NSFaultInObject;AppKit`__NSBitmapUnfilteredFileTypes_block_invoke;ImageIO`CGImageSourceCopyTypeExtensions;ImageIO`IIO_ReaderHandler::GetReaderHandler;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;ImageIO`invocation function for block in IIO_ReaderHandler::GetReaderHandler;ImageIO`IIO_ReaderHandler::IIO_ReaderHandler;ImageIO`IIO_ReaderHandler::buildPluginList;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::APIs::dlopen_from(char const*, int, void*)::$_1::operator();dyld`dyld4::Loader::getLoader;dyld`dyld4::ProcessConfig::canonicalDylibPathInCache;dyld`dyld4::SyscallDelegate::realpath;dyld`dyld3::open;dyld`open_with_subsystem;dyld`__open 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplSDL2_InitForOpenGL;Sample`ImGui_ImplSDL2_Init;Sample`SDL_CreateSystemCursor;Sample`SDL_CreateSystemCursor_REAL;Sample`Cocoa_CreateSystemCursor;Sample`LoadHiddenSystemCursor;AppKit`-[NSImage initWithContentsOfURL:];AppKit`+[NSImageRep _imageRepsWithContentsOfURL:expandImageContentNow:giveUpOnNetworkURLsWithoutGoodExtensions:];AppKit`+[NSImageRep _imageRepClassForFileNameExtension:andHFSFileType:];AppKit`imageRepFor;Foundation`_NSFaultInObject;AppKit`__NSBitmapUnfilteredFileTypes_block_invoke;ImageIO`CGImageSourceCopyTypeExtensions;ImageIO`IIO_ReaderHandler::GetReaderHandler;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;ImageIO`invocation function for block in IIO_ReaderHandler::GetReaderHandler;ImageIO`IIO_ReaderHandler::IIO_ReaderHandler;ImageIO`IIO_ReaderHandler::buildPluginList;ImageIO`CreateReader_AVCI;ImageIO`IIODetermineHEIFSupport;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;ImageIO`IIOLoadCMPhotoSymbols;dyld`dyld4::APIs::dlsym;dyld`dyld4::Loader::hasExportedSymbol;dyld`dyld3::MachOFile::trieWalk 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplSDL2_InitForOpenGL;Sample`ImGui_ImplSDL2_Init;Sample`SDL_CreateSystemCursor;Sample`SDL_CreateSystemCursor_REAL;Sample`Cocoa_CreateSystemCursor;Sample`LoadHiddenSystemCursor;AppKit`-[NSImage initWithContentsOfURL:];AppKit`+[NSImageRep _imageRepsWithContentsOfURL:expandImageContentNow:giveUpOnNetworkURLsWithoutGoodExtensions:];AppKit`NSImageRepNewDataFromFileURL;Foundation`-[NSURL(NSURL) standardizedURL];CoreFoundation`_CFURLCreateFromComponents;CoreFoundation`_CFURLCreateWithURLString;libobjc.A.dylib`object_setClass 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`ImGui_ImplSDL2_InitForOpenGL;Sample`ImGui_ImplSDL2_Init;Sample`SDL_CreateSystemCursor;Sample`SDL_CreateSystemCursor_REAL;Sample`Cocoa_CreateSystemCursor;Sample`LoadHiddenSystemCursor;AppKit`-[NSImage initWithContentsOfURL:];AppKit`+[NSImageRep _imageRepsWithContentsOfURL:expandImageContentNow:giveUpOnNetworkURLsWithoutGoodExtensions:];LaunchServices`UTTypeCopyPreferredTagWithClass;LaunchServices`UTTypeCopyAllTagsWithClass;LaunchServices`objc_object* __strong __LSRECORD_GETTER__;LaunchServices`-[_UTDeclaredTypeRecord tagSpecificationWithContext:tableID:unitID:unitBytes:];LaunchServices`_LSBindingListGetEntryAtIndex;CoreServicesStore`CSStoreGetUnit;CoreServicesStore`CSStore2::Store::getUnit 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`TTF_Init;Sample`FT_Init_FreeType;Sample`FT_New_Library;Sample`ft_mem_qalloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`Core::Context::Context;Sample`SDL_Init_REAL 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::GetInstance;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Core::Context::Context;Sample`glewInit 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::display_if_needed;AppKit`-[NSTextLayer display];AppKit`-[NSFocusStack performWithFocusView:inWindow:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke;AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke_2;QuartzCore`-[CALayer _display];QuartzCore`invocation function for block in CA::Layer::display_;QuartzCore`CABackingStoreUpdate_;CoreGraphics`CGDisplayListDrawInContextDelegate;CoreGraphics`CG::DisplayList::execute;CoreGraphics`CG::DisplayList::executeEntries;CoreGraphics`CG::DisplayListExecutor::drawGlyphs;CoreGraphics`CGContextDelegateDrawGlyphs;CoreGraphics`ripc_DrawGlyphs;CoreGraphics`draw_glyph_bitmaps;CoreGraphics`render_glyphs;CoreGraphics`CGGlyphBuilder::lock_glyph_bitmaps;CoreGraphics`CGGlyphBuilder::create_missing_bitmaps;CoreGraphics`CGFontCreateGlyphBitmapWithDilation;CoreGraphics`CGGlyphBitmapCreateWithPathAndDilation_8;CoreGraphics`aa_cache_render 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::display_if_needed;AppKit`-[NSTextLayer display];AppKit`-[NSFocusStack performWithFocusView:inWindow:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke;AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke_2;QuartzCore`-[CALayer _display];QuartzCore`invocation function for block in CA::Layer::display_;QuartzCore`CABackingStoreUpdate_;CoreGraphics`CGDisplayListDrawInContextDelegate;CoreGraphics`CG::DisplayList::execute;CoreGraphics`CG::DisplayList::executeEntries;CoreGraphics`CG::DisplayListExecutor::drawGlyphs;CoreGraphics`CGContextDelegateDrawGlyphs;CoreGraphics`ripc_DrawGlyphs;CoreGraphics`draw_glyph_bitmaps;CoreGraphics`render_glyphs;CoreGraphics`CGGlyphBuilder::lock_glyph_bitmaps;CoreGraphics`CGGlyphBuilder::create_missing_bitmaps;CoreGraphics`CGFontCreateGlyphBitmapWithDilation;CoreGraphics`CGGlyphBitmapCreateWithPathAndDilation_8;CoreGraphics`CGGlyphBitmapCreate;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::display_if_needed;AppKit`-[NSTextLayer display];AppKit`-[NSFocusStack performWithFocusView:inWindow:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke;AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`__22-[NSTextLayer display]_block_invoke_2;QuartzCore`-[CALayer _display];QuartzCore`invocation function for block in CA::Layer::display_;QuartzCore`CABackingStoreUpdate_;CoreGraphics`CGDisplayListDrawInContextDelegate;CoreGraphics`CG::DisplayList::execute;CoreGraphics`CG::DisplayList::executeEntries;CoreGraphics`CG::DisplayListExecutor::drawGlyphs;CoreGraphics`CGContextDelegateDrawGlyphs;CoreGraphics`ripc_DrawGlyphs;CoreGraphics`draw_glyph_bitmaps;CoreGraphics`render_glyphs;CoreGraphics`render_glyph_list;CoreGraphics`ripc_GetColor;CoreGraphics`CGColorTransformConvertColorComponents;CoreGraphics`CGCMSConverterConvertColorComponents;CoreGraphics`CGCMSConverterConvert;CoreGraphics`convert_icc;CoreGraphics`convert_using_vImageConverter;CoreGraphics`CGCMSConverterCreateCachedCGvImageConverter;CoreGraphics`CGvImageConverterCacheGetRetained;CoreGraphics`CGvImageConverterInitializeShared;vImage`vImageConverter_CreateWithCGColorConversionInfo;vImage`vImageConverter_CreateCGPassListWithCGColorConversionInfo;libCGInterfaces.dylib`GetColorspaceTransformsWithTransformWithCGColorConversionInfo;CoreGraphics`CGColorConversionInfoIterateFunctionsWithCallbacks;ColorSync`ColorSyncTransformIterate;ColorSync`ColorSyncTransformGetIterator;ColorSync`ColorSyncTransformIteratorCreate;ColorSync`ColorSyncTransformInternalCopyProperty;ColorSync`AppleCMMCreateTransformProperty;libcommonCrypto.dylib`CC_MD5_Update;libcorecrypto.dylib`ccdigest_update;libcorecrypto.dylib`md5_compress 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::display_if_needed;AppKit`-[NSViewBackingLayer display];AppKit`-[NSFocusStack performWithFocusView:inWindow:usingBlock:];AppKit`__29-[NSViewBackingLayer display]_block_invoke;AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`_NSViewUpdateLayer;AppKit`-[_NSThemeWidgetCell updateLayerWithFrame:inView:];AppKit`-[NSLayerContentsProvider facetForIdentifier:scale:colorSpace:drawingRect:flipped:appearanceIdentifier:drawHandler:];AppKit`-[NSImage recommendedLayerContentsScale:];AppKit`-[NSImage bestRepresentationForRect:context:hints:];AppKit`0x0000000188f9df70;Foundation`static Dictionary._unconditionallyBridgeFromObjectiveC;libobjc.A.dylib`objc_release 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::display_if_needed;AppKit`-[NSViewBackingLayer display];AppKit`0x0000000188fc71d8;AppKit`0x0000000188fc6b8c;AppKit`0x0000000188fe6948;AppKit`0x0000000188fe8df4;AppKit`__swift_instantiateConcreteTypeFromMangledName;libswiftCore.dylib`swift_getTypeByMangledNameInContextImpl;libswiftCore.dylib`swift_getTypeByMangledName;libswiftCore.dylib`swift_getTypeByMangledNameImpl;libswiftCore.dylib`swift_getTypeByMangledNode;libswiftCore.dylib`swift_getTypeByMangledNodeImpl;libswiftCore.dylib`swift::Demangle::__runtime::TypeDecoder::decodeMangledType;libswiftCore.dylib`(anonymous namespace)::DecodedMetadataBuilder::createBoundGenericType;libswiftCore.dylib`__swift_instantiateCanonicalPrespecializedGenericMetadata;libswiftCore.dylib`_swift_getGenericMetadata;libswiftCore.dylib`swift::MetadataCacheEntryBase::doInitialization;libswiftCore.dylib`type metadata completion function for _ContiguousArrayStorage;libswiftCore.dylib`_swift_initClassMetadataImpl;libobjc.A.dylib`objc_readClassPair;libobjc.A.dylib`realizeClassWithoutSwift;libobjc.A.dylib`realizeClassWithoutSwift;libobjc.A.dylib`DYLD-STUB$$malloc_size 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`__39+[_NSCGSTransaction currentTransaction]_block_invoke.26;AppKit`NSCGSTransactionRunPreCommitActions_;AppKit`NSCGSTransactionRunPreCommitActionsForOrder_;AppKit`__NSCGSWindowMarkProperty__block_invoke;AppKit`_NSCGSWindowEnumerateForCommit;AppKit`__NSCGSWindowMarkProperty__block_invoke_2;AppKit`SoftSLSTransactionClearWindowCornerRadius;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;AppKit`__SoftSLSTransactionClearWindowCornerRadius_block_invoke;Foundation`_NSSoftLinkingLoadFramework;Foundation`_NSPathForSystemFramework;libsystem_kernel.dylib`stat 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`__39+[_NSCGSTransaction currentTransaction]_block_invoke.26;AppKit`NSCGSTransactionRunPreCommitActions_;SkyLight`SLSConnectionSetLastSLSCATransaction 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Layer::commit_if_needed(CA::Transaction*, void ;QuartzCore`CA::Layer::commit_if_needed(CA::Transaction*, void ;QuartzCore`invocation function for block in CA::Context::commit_transaction;QuartzCore`-[CABackdropLayer _copyRenderLayer:layerFlags:commitFlags:];QuartzCore`-[CALayer(CALayerPrivate) _copyRenderLayer:layerFlags:commitFlags:];QuartzCore`CA::Render::convert_cgcolor_to_float;QuartzCore`CA_CGColorGetRGBComponents;CoreGraphics`CGColorTransformConvertColorComponents;CoreGraphics`CGColorTransformCacheGetConversionType;CoreGraphics`CGCMSConverterCreate;CoreGraphics`CGColorSyncTransformCacheGetRetained;ColorSync`ColorSyncTransformCreate;ColorSync`AppleCMMInitializeTransform;ColorSync`ColorSyncTransformInternalSetCMMStorage;CoreFoundation`-[__NSCFData retain] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`NSDisplayCycleFlush;AppKit`NSDisplayCycleObserverInvoke;AppKit`__NSWindowGetDisplayCycleObserverForUpdateStructuralRegions_block_invoke;AppKit`-[_NSTrackingAreaAKManager displayCycleUpdateStructuralRegions];AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`-[NSView isHiddenOrHasHiddenAncestor] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`NSDisplayCycleFlush;AppKit`NSDisplayCycleObserverInvoke;AppKit`__NSWindowGetDisplayCycleObserverForUpdateStructuralRegions_block_invoke;AppKit`-[_NSTrackingAreaAKManager displayCycleUpdateStructuralRegions];AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`_NSViewSubViewMutationSafeApply;AppKit`-[_NSTrackingAreaAKViewHelper updateTrackingAreasWithInvalidCursorRects:];AppKit`-[NSControl updateTrackingAreas];AppKit`-[_NSThemeZoomWidgetCell _setMouseTrackingInRect:ofView:];AppKit`-[NSButtonCell _setMouseTrackingInRect:ofView:];AppKit`-[NSCell(NSPrivate_CellMouseTracking) _setMouseTrackingInRect:ofView:withConfiguration:];AppKit`-[_NSTrackingAreaAKViewHelper removeTrackingArea:];CoreFoundation`-[__NSOrderedSetM indexOfObject:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`NSDisplayCycleFlush;AppKit`NSDisplayCycleObserverInvoke;AppKit`__NSWindowGetDisplayCycleObserverForUpdateStructuralRegions_block_invoke;AppKit`-[_NSTrackingAreaAKManager displayCycleUpdateStructuralRegions];AppKit`-[_NSTrackingAreaAKManager setCursorForMouseLocation:];AppKit`-[NSWindow(NSWindowResizing) _edgeResizingCursorUpdate:atLocation:];AppKit`-[NSWindow(NSWindowResizing) _resizeDirectionForMouseLocation:];AppKit`-[NSWindow(NSWindowResizing) _getEdgeResizingRects:allowedEdges:];AppKit`styleMaskSaysResizable;AppKit`-[NSWindow(NSFullScreen) _currentDividerResizeDirections];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`NSDisplayCycleFlush;AppKit`NSDisplayCycleObserverInvoke;AppKit`__NSWindowGetDisplayCycleObserverForDisplay_block_invoke;AppKit`-[NSWindow displayIfNeeded];AppKit`NSViewUpdateVibrancyForSubtree;AppKit`-[NSView _updateVibrancy];AppKit`-[NSView _effectiveVibrancyFilter];AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`__34-[NSView _effectiveVibrancyFilter]_block_invoke;AppKit`NSViewGetEffectiveVibrantBlendingStyle;AppKit`-[NSVisualEffectView _vibrantBlendingStyleForSubtree];AppKit`NSVisualEffectViewGetMetadataValue;AppKit`-[NSAppearance _copyMeasurements:context:options:requestedMeasurements:];AppKit`-[NSCompositeAppearance _callCoreUIWithBlock:options:requireBezelTintColor:];AppKit`__72-[NSAppearance _copyMeasurements:context:options:requestedMeasurements:]_block_invoke;CoreUI`CUICopyMeasurements;CoreUI`CUIRenderer::CopyMeasurements;CoreUI`+[CUIThemeFacet _facetWithKeyList:andRenditionKeyClass:orRenditionKey:fromTheme:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];TextInputUIMacHelper`-[TUINSCursorUIController activate:];ViewBridge`+[NSRemoteViewController requestViewController:connectionHandler:];ViewBridge`+[NSRemoteViewController _onAppKitThreadRequestViewController:withBlock:];ViewBridge`-[NSRemoteView advanceToRunPhaseIfNeeded:];ViewBridge`-[NSRemoteView advanceToConfigPhaseIfNeeded:];ViewBridge`+[NSXPCSharedListener connectToService:instanceIdentifier:listener:queue:completion:];ViewBridge`+[NSXPCSharedListener listenerEndpointForService:instanceIdentifier:listener:queue:completion:];libdispatch.dylib`_dispatch_root_queue_poke_slow;libsystem_kernel.dylib`__workq_kernreturn 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];TextInputUIMacHelper`-[TUINSCursorUIController activate:];ViewBridge`+[NSRemoteViewController requestViewController:connectionHandler:];ViewBridge`+[NSRemoteViewController _onAppKitThreadRequestViewController:withBlock:];ViewBridge`-[NSRemoteView initWithFrame:];AppKit`-[NSView initWithFrame:];AppKit`NSViewCommonPreInitialization;AppKit`+[NSView clipsToBounds];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`getMethodNoSuper_nolock 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];TextInputUIMacHelper`+[TUINSCursorUIController sharedInstance];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;TextInputUIMacHelper`__41+[TUINSCursorUIController sharedInstance]_block_invoke;TextInputUIMacHelper`-[TUINSCursorUIController init];TextInputUIMacHelper`-[TUINSWindow init];AppKit`-[NSWindow setContentViewController:];AppKit`NSPerformVisuallyAtomicChange;AppKit`-[NSWindow _contentViewControllerChanged];AppKit`-[NSWindow _setFrameCommon:display:fromServer:];AppKit`-[NSWindow(NSDrawerSupportPrivate) _sizeAllDrawersWithRect:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];TextInputUIMacHelper`+[TUINSCursorUIController sharedInstance];libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;TextInputUIMacHelper`__41+[TUINSCursorUIController sharedInstance]_block_invoke;TextInputUIMacHelper`-[TUINSCursorUIController init];TextInputUIMacHelper`-[TUINSWindow init];AppKit`-[NSWindow initWithContentRect:styleMask:backing:defer:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSWindow _commonAwake];AppKit`_NXCreateWindow;AppKit`+[NSCGSWindow(NSCGSWindowCreation) windowWithConnectionID:flags:];AppKit`-[NSCGSWindow initWithConnectionID:flags:];AppKit`-[NSCGSWindow _createRootLayerAndContextIfNeededUsingAsyncBehavior:];AppKit`-[NSCGSWindow _createContext];QuartzCore`+[CAContext contextWithCGSConnection:options:];QuartzCore`-[CAContext initWithCGSConnection:options:];QuartzCore`CA::Context::connect_remote;QuartzCore`CA::Context::connect_remote;QuartzCore`_CASRegisterClient;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];HIToolbox`MyActivateTSMDocument;HIToolbox`utOpenActivateAllSelectedIMInDoc;CoreFoundation`CFArrayApplyFunction;HIToolbox`utOpenActivateAllSelectedIMInDocIterator;HIToolbox`utOpenActivateSelectedInputMethodInDoc;HIToolbox`ActivateInputMethodInstance;HIToolbox`IMKInputSessionActivate;HIToolbox`-[IMKInputSession activate];HIToolbox`-[IMKClient(IMKClientConnection_XPC) remoteXPCProxyForSession:fromCaller:];HIToolbox`-[IMKClient _startServer_AllowingSandboxExtension:];HIToolbox`-[IMKClient(IMKClientConnection_XPC) startServerSetupForEndpoint];Foundation`+[NSXPCInterface interfaceWithProtocol:];Foundation`-[NSXPCInterface setProtocol:];Foundation`setProtocolMetadata;Foundation`setProtocolMetdataWithMethods;libobjc.A.dylib`class_getInstanceMethod;libobjc.A.dylib`resolveMethod_locked;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`cache_t::insert(objc_selector*, void (*);libsystem_malloc.dylib`szone_malloc_should_clear;libsystem_malloc.dylib`small_malloc_should_clear;libsystem_malloc.dylib`small_malloc_from_free_list;libsystem_malloc.dylib`small_free_list_remove_ptr_no_clear 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext activate];HIToolbox`MyActivateTSMDocument;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;HIToolbox`__InitTSMUISetup_block_invoke;HIToolbox`SyncHandwritingHotKey;HIToolbox`TISSetGestureHandwritingState;HIToolbox`CopyInputSourceRefForInputSourceID;HIToolbox`TISCreateInputSourceList;HIToolbox`TSMGetInputSourceCountWithFilteredAdditions;HIToolbox`islGetInputSourceListWithAdditions;HIToolbox`islcCopyInputSourceDataInCacheAtIndex;HIToolbox`GetInputSourceCacheArray;CoreFoundation`CFStringCompareWithOptionsAndLocale 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke;AppKit`__38-[NSApplication setWindowsNeedUpdate:]_block_invoke_2;AppKit`-[NSApplication updateWindows];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`lookUpImpOrForward;libobjc.A.dylib`initializeAndMaybeRelock;libobjc.A.dylib`initializeNonMetaClass;libobjc.A.dylib`CALLING_SOME_+initialize_METHOD;AppKit`+[NSKeyBindingManager sharedKeyBindingManager];Foundation`+[NSDictionary(NSDictionary) dictionaryWithContentsOfFile:];Foundation`+[NSDictionary(NSDictionary) newWithContentsOf:immutable:];Foundation`-[NSData(NSData) initWithContentsOfFile:options:maxLength:error:];Foundation`_NSReadBytesFromFileWithExtendedAttributes;libsystem_kernel.dylib`read 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoBlocks;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__;ViewBridge`deferredBlockOpportunity_block_invoke_2;ViewBridge`__wrapBlockWithVoucher_block_invoke;ViewBridge`__deferNSXPCInvocationOntoMainThread_block_invoke;CoreFoundation`-[NSInvocation invoke];CoreFoundation`__invoking___;ViewBridge`-[NSRemoteView _lastCallImpliedByAdvancingToPhase:];ViewBridge`-[NSRemoteViewControllerAuxiliary viewDidAdvanceToRunPhase:];TextInputUIMacHelper`__36-[TUINSCursorUIController activate:]_block_invoke.120;TextInputUIMacHelper`-[TUINSWindow setRemoteViewController:];TextInputUIMacHelper`-[TUINSWindow setInsets:];AppKit`-[NSViewController view];AppKit`NSPerformVisuallyAtomicChange;ViewBridge`-[NSRemoteView retain] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoBlocks;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__;ViewBridge`deferredBlockOpportunity_block_invoke_2;ViewBridge`__wrapBlockWithVoucher_block_invoke;ViewBridge`__deferNSXPCInvocationOntoMainThread_block_invoke;CoreFoundation`-[NSInvocation invoke];CoreFoundation`__invoking___;ViewBridge`-[NSRemoteView _lastCallImpliedByAdvancingToPhase:];ViewBridge`-[NSRemoteViewControllerAuxiliary viewDidAdvanceToRunPhase:];TextInputUIMacHelper`__36-[TUINSCursorUIController activate:]_block_invoke.120;TextInputUIMacHelper`-[TUINSWindow setRemoteViewController:];AppKit`-[NSView addSubview:];ViewBridge`-[NSRemoteView _setSuperview:];ViewBridge`__30-[NSRemoteView _setSuperview:]_block_invoke;AppKit`-[NSView _setSuperview:];AppKit`-[NSView _informContainerThatSubviewsNeedUpdateConstraints];AppKit`-[NSView _informContainerThatSubviewsNeedUpdateConstraints];AppKit`-[NSWindow(NSDisplayCycle) _postWindowNeedsUpdateConstraintsUnlessPostingDisabled];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoBlocks;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__;ViewBridge`deferredBlockOpportunity_block_invoke_2;ViewBridge`__wrapBlockWithVoucher_block_invoke;ViewBridge`__45-[NSRemoteView advanceToConfigPhaseIfNeeded:]_block_invoke_2;ViewBridge`-[NSRemoteView _configureAndRetainServiceMarshalConnection:];Foundation`+[NSXPCInterface interfaceWithProtocol:];Foundation`-[NSXPCInterface setProtocol:];Foundation`setProtocolMetadata;Foundation`setProtocolMetdataWithMethods;CoreFoundation`+[NSMethodSignature signatureWithObjCTypes:];CoreFoundation`__NSMethodFrameArgInfoDestroy 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoBlocks;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__;AppKit`___NSMainRunLoopPerformBlockInModes_block_invoke;AppKit`__NSSyncEmojiDFRInputMethodWithDynamicFunctionRowAvailable;AppKit`__NSCopyPaletteInputSourceRefForInputSourceID;HIToolbox`TISCreateInputSourceList;HIToolbox`TSMGetInputSourceProperty;HIToolbox`islGetInputSourceProperty 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;HIServices`mshMIGPerform;HIServices`_XCopyAttributeValue;HIServices`_AXXMIGCopyAttributeValue;HIServices`loadAccessibilityBundles;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;HIServices`__loadAccessibilityBundles_block_invoke;HIServices`AccessibilityBundlesLibraryCore;SoftLinking`_sl_dlopen;dyld`dyld4::APIs::dlopen_from;dyld`dyld4::RuntimeState::notifyLoad;libobjc.A.dylib`map_images;libobjc.A.dylib`map_images_nolock;libobjc.A.dylib`load_categories_nolock;libobjc.A.dylib`load_categories_nolock(header_info*)::$_12::operator();libobjc.A.dylib`attachCategories;libobjc.A.dylib`attachCategories(objc_class*, locstamped_category_t const*, unsigned int, int)::$_11::operator()(attachCategories;libobjc.A.dylib`flushCaches(objc_class*, char const*, bool ;libobjc.A.dylib`foreach_realized_class_and_subclass(objc_class*, bool ;libobjc.A.dylib`invocation function for block in flushCaches(objc_class*, char const*, bool 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSources0;CoreFoundation`__CFRunLoopDoSource0;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__;Foundation`__NSThreadPerformPerform;AppKit`-[_NSTrackingAreaAKManager invalidateCursorRectsForView:];AppKit`-[NSWindow(NSDisplayCycle) _updateStructuralRegionsOnNextDisplayCycle];AppKit`+[NSDisplayCycle currentDisplayCycle];AppKit`NSCGSTransactionEnsureAttachment;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoTimers;CoreFoundation`__CFRunLoopDoTimer;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__;AppKit`-[NSApplication(NSQuietSafeQuit) _updateCanQuitQuietlyAndSafely] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__;libdispatch.dylib`_dispatch_main_queue_callback_4CF;libdispatch.dylib`_dispatch_main_queue_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;CoreAudio`invocation function for block in HALSystem::IOHasStarted;RunningBoardServices`-[RBSAssertion acquireWithError:];RunningBoardServices`-[RBSConnection acquireAssertion:error:];libobjc.A.dylib`objc_retainAutoreleaseReturnValue 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;QuartzCore`CA::Transaction::flush_as_runloop_observer;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Render::Encoder::send_message;QuartzCore`CA::Render::Message::send_message;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 2 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`RunCurrentEventLoopInMode;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopDoObservers;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__;QuartzCore`CA::Transaction::flush_as_runloop_observer;QuartzCore`CA::Transaction::commit;QuartzCore`CA::Context::commit_transaction;QuartzCore`CA::Transaction::run_commit_handlers;AppKit`__39+[_NSCGSTransaction currentTransaction]_block_invoke.26;AppKit`NSCGSTransactionRunPreCommitActions_;AppKit`NSCGSTransactionRunPreCommitActionsForOrder_;AppKit`__54-[NSWMWindowCoordinator performTransactionUsingBlock:]_block_invoke;WindowManagement`-[WMClientWindowManager performWindowTransaction:];WindowManagement`-[WMClientWindowManager _performXPCTransaction:];Foundation`_NSXPCDistantObjectSimpleMessageSend1;Foundation`-[NSXPCConnection _sendSelector:withProxy:arg1:];Foundation`-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:];Foundation`-[NSXPCEncoder _encodeInvocationObjectArgumentsOnly:count:typeString:selector:isReply:into:];Foundation`_NSXPCSerializationAddInvocationWithOnlyObjectArgumentsArray;Foundation`-[NSXPCEncoder _encodeObject:];Foundation`_NSXPCSerializationAddObjectRef;CoreFoundation`CFDictionaryCreateMutable;CoreFoundation`__CFDictionaryCreateGeneric;CoreFoundation`CFBasicHashCreate;CoreFoundation`CFBasicHashGetPtrIndex 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter;HIToolbox`ReceiveNextEventCommon;HIToolbox`AcquireEventFromQueue;HIToolbox`_NotifyEventLoopObservers;HIToolbox`HIApplication::EventObserver;HIToolbox`GetEventKind 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`_DPSNextEvent;HIToolbox`AEProcessAppleEvent;AE`aeProcessAppleEvent;AE`0x000000018c3a66bc;AE`0x000000018c3a6768;Foundation`_NSAppleEventManagerGenericHandler;Foundation`-[NSAppleEventManager dispatchRawAppleEvent:withRawReply:handlerRefCon:];AppKit`-[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:];AppKit`-[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:];AppKit`-[NSApplication _reopenWindowsAsNecessaryIncludingRestorableState:withFullFidelity:completionHandler:];AppKit`-[NSDocumentController(NSInternal) _autoreopenDocumentsIgnoringExpendable:withCompletionHandler:];AppKit`-[NSDocumentController(NSInternal) _autoreopenRecordsBeingReopened];Foundation`+[NSArray(NSArray) newWithContentsOf:immutable:];Foundation`-[NSData(NSData) initWithContentsOfFile:options:maxLength:error:];Foundation`_NSReadBytesFromFileWithExtendedAttributes;libsystem_kernel.dylib`__open 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:];AppKit`-[NSEvent _initWithCGEvent:eventRef:];AppKit`_initTouches;AppKit`-[NSEvent _initMTTouchesFromIOHidEvent:];MultitouchSupport`_mthid_getDeviceIDForRegistryEntryID;MultitouchSupport`_mthid_getDeviceIDForService;IOKit`IORegistryEntrySearchCFProperty;IOKit`io_registry_entry_get_property_bin_buf;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleActivatedEvent:];AppKit`+[NSMenuBarPresentationInstance _setMenuBarObscured:];AppKit`+[NSMenuBarPresentationInstance _updateMenuBarObscured:];AppKit`-[NSMenuBarPresentationInstance _showMenuBarWithAnimation:postingEvent:orderWindow:forAutoShow:noteVisibility:];AppKit`-[NSMenuBarPresentationInstance _setBoundsAndUpdateResolution];AppKit`-[NSMenuBarPresentationInstance _forEachWindowDo:withBlock:];AppKit`__62-[NSMenuBarPresentationInstance _setBoundsAndUpdateResolution]_block_invoke;AppKit`-[NSMenuBarDisplayWindow _ensureReplicantWindows];AppKit`-[NSMenuBarImpl backingViewsForDisplayID:completionHandler:];AppKit`__49-[NSMenuBarDisplayWindow _ensureReplicantWindows]_block_invoke;AppKit`-[NSMenuBarDisplayWindow _replicantWindowWithView:];AppKit`-[NSMenuBarReplicantWindow initWithView:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSWindow _commonAwake];SkyLight`SLSSetWindowProperty;SkyLight`CGSPropertyListPerformWithSerializedBytes;SkyLight`CGSPropertyListCreateSerializedBytes;SkyLight`CGSPropertyListCreateSerializedData;CoreFoundation`CFPropertyListCreateData;CoreFoundation`CFPropertyListWrite;CoreFoundation`__CFBinaryPlistWriteOrPresize;CoreFoundation`_flattenPlist;CoreFoundation`_CFArrayReplaceValues 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleActivatedEvent:];AppKit`+[NSMenuBarPresentationInstance _setMenuBarObscured:];AppKit`+[NSMenuBarPresentationInstance _updateMenuBarObscured:];AppKit`-[NSMenuBarPresentationInstance _showMenuBarWithAnimation:postingEvent:orderWindow:forAutoShow:noteVisibility:];AppKit`-[NSMenuBarPresentationInstance _setBoundsAndUpdateResolution];AppKit`-[NSMenuBarPresentationInstance _forEachWindowDo:withBlock:];AppKit`__62-[NSMenuBarPresentationInstance _setBoundsAndUpdateResolution]_block_invoke;AppKit`-[NSMenuBarDisplayWindow _ensureReplicantWindows];AppKit`-[NSMenuBarImpl backingViewsForDisplayID:completionHandler:];AppKit`__49-[NSMenuBarDisplayWindow _ensureReplicantWindows]_block_invoke;AppKit`-[NSMenuBarDisplayWindow _replicantWindowWithView:];AppKit`-[NSMenuBarReplicantWindow initWithView:];AppKit`-[NSWindow _initContent:styleMask:backing:defer:contentView:];AppKit`-[NSWindow _commonInitFrame:styleMask:backing:defer:];AppKit`-[NSNextStepFrame initWithFrame:styleMask:owner:];AppKit`-[NSView _setWindow:] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleActivatedEvent:];AppKit`_NXShowKeyAndMain;AppKit`-[NSWindow becomeKeyWindow];Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:];CoreFoundation`_CFXNotificationPost;CoreFoundation`_CFXRegistrationPost;CoreFoundation`___CFXRegistrationPost_block_invoke;CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__;Sample`-[SDL_WindowData window] 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleActivatedEvent:];AppKit`_NXShowKeyAndMain;AppKit`+[NSWindow _enableKeyStateChangeNotifications];AppKit`-[NSThemeFrame _windowChangedKeyState];AppKit`-[NSView _windowChangedKeyState];AppKit`-[NSTitlebarContainerView _windowChangedKeyState];AppKit`-[NSView _windowChangedKeyState];AppKit`-[NSView _windowChangedKeyState];AppKit`-[NSButton _windowChangedKeyState];AppKit`-[NSControl _windowChangedKeyState];AppKit`+[NSAppearance _performWithCurrentAppearance:usingBlock:];AppKit`__35-[NSControl _windowChangedKeyState]_block_invoke;AppKit`-[NSButtonCell _windowChangedKeyStateWithFrame:inView:];AppKit`-[NSButtonCell _updateMouseTracking];AppKit`-[NSButtonCell _hasRolloverBezelArt];libobjc.A.dylib`_objc_msgSend_uncached;libobjc.A.dylib`cache_getImp 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleDeactivateEvent:];AppKit`_NXEndKeyAndMain;AppKit`-[NSWindow resignKeyWindow];Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:];CoreFoundation`_CFXNotificationPost;CoreFoundation`_CFXRegistrationPost;CoreFoundation`___CFXRegistrationPost_block_invoke;CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__;Sample`-[Cocoa_WindowListener windowDidResignKey:];Sample`SDL_SetKeyboardFocus;Sample`Cocoa_StopTextInput;AppKit`-[NSView removeFromSuperview];AppKit`-[NSView _setWindow:];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext deactivate];TextInputUIMacHelper`-[TUINSCursorUIController deactivate:];AppKit`-[NSWindow setContentViewController:];AppKit`NSPerformVisuallyAtomicChange;AppKit`-[NSWindow setContentView:];AppKit`-[NSView removeFromSuperview];AppKit`-[NSView _setWindow:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`-[NSApplication _handleDeactivateEvent:];AppKit`_NXEndKeyAndMain;AppKit`-[NSWindow resignKeyWindow];Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:];CoreFoundation`_CFXNotificationPost;CoreFoundation`_CFXRegistrationPost;CoreFoundation`___CFXRegistrationPost_block_invoke;CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__;Sample`-[Cocoa_WindowListener windowDidResignKey:];Sample`SDL_SetKeyboardFocus;Sample`Cocoa_StopTextInput;AppKit`-[NSView removeFromSuperview];AppKit`-[NSView _setWindow:];AppKit`+[NSTextInputContext currentInputContext_withFirstResponderSync:];AppKit`-[NSTextInputContext deactivate];TextInputUIMacHelper`-[TUINSCursorUIController deactivate:];TextInputUIMacHelper`-[TUINSCursorUIController serviceViewControllerProxy];ViewBridge`-[NSRemoteView serviceViewControllerProxyWithErrorHandler:];ViewBridge`objc_msgSend$proxyWithTarget: 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`routeGestureEvent;Sample`-[SDLWindow sendEvent:];AppKit`-[NSWindow(NSEventRouting) sendEvent:];AppKit`-[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:];AppKit`_routeTouchEvent;AppKit`-[NSEvent touchesMatchingPhase:inView:];AppKit`-[NSEvent _touchesMatchingPhase:inView:includeResting:];CoreFoundation`DYLD-STUB$$objc_autorelease 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];AppKit`routeGestureEvent;Sample`-[SDLWindow sendEvent:];AppKit`-[NSWindow(NSEventRouting) sendEvent:];AppKit`-[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:];AppKit`_routeTouchEvent;AppKit`-[NSResponder _touchesMovedWithEvent:];AppKit`objc_msgSend$allowedTouchTypes 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;Sample`Cocoa_PumpEventsUntilDate;Sample`-[SDLApplication sendEvent:];AppKit`-[NSApplication(NSEventRouting) sendEvent:];Sample`-[SDLWindow sendEvent:];AppKit`-[NSWindow(NSEventRouting) sendEvent:];AppKit`-[NSWindow(NSEventRouting) _reallySendEvent:isDelayedEvent:];AppKit`-[NSWindow _internalHandleAppKitDefinedEvent:];AppKit`-[NSWindow _windowMoved:];AppKit`-[NSWindow _windowMovedToRect:dueToMoveEvent:];AppKit`-[NSWindow _setFrameAfterMove:];AppKit`-[NSWindow _setFrameCommon:display:fromServer:];AppKit`-[NSWindow _oldPlaceWindow:fromServer:];AppKit`-[_NSTrackingAreaAKViewHelper setTrackingAreasDirty:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`Util::Input::Update;Sample`SDL_PollEvent;Sample`SDL_PollEvent_REAL;Sample`SDL_WaitEventTimeout_REAL;Sample`SDL_PumpEventsInternal;Sample`Cocoa_PumpEvents;libobjc.A.dylib`objc_autoreleasePoolPop;libobjc.A.dylib`AutoreleasePoolPage::releaseUntil;CoreFoundation`-[__NSSetM dealloc];libsystem_platform.dylib`_platform_memset 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];AppKit`-[NSIOAccelSurface frontBuffer];AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandBuffer commitAndWaitUntilSubmitted];AGXMetal13_3`-[AGXG13GFamilyCommandBuffer commit];IOGPU`-[IOGPUMetalCommandBuffer commit];Metal`-[_MTLCommandQueue commitCommandBuffer:wake:];Metal`createContextTelemetryDataWithQueueLabelAndCallstack;CoreFoundation`CFBundleGetValueForInfoDictionaryKey;CoreFoundation`CFBundleGetLocalInfoDictionary;CoreFoundation`_CFBundleGetStringsSources;CoreFoundation`CFBundleCopyResourceURL;CoreFoundation`_CFBundleCopyFindResources;libobjc.A.dylib`objc_msgSend 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];AppKit`-[NSIOAccelSurface frontBuffer];AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOKit`iokit_user_client_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];AppKit`-[NSIOAccelSurface frontBuffer];GLEngine`glFramebufferTexture2DEXT_Exec;GLEngine`gleSetUnknownFramebufferCompleteness 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];AppKit`-[NSIOAccelSurface frontBuffer];GLEngine`glDrawArrays_Exec;GLEngine`gleDrawArraysOrElements_Entries_Body;GLEngine`gleDoDrawDispatchCore;GLEngine`gleUpdateDeferredState;GLEngine`gleUpdateFragmentFallbackProgram;GLEngine`gleCallFragmentStateToLLVMIR;libGLProgrammability.dylib`glpFragmentStateToPPStream;libGLProgrammability.dylib`PPStreamFree;libGLProgrammability.dylib`PPStreamChunkListFree;libsystem_malloc.dylib`DYLD-STUB$$_platform_bzero 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];libGLU.dylib`gluCheckExtension 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];QuartzCore`CAImageQueueRegisterIOSurfaceBuffer;QuartzCore`CA::Render::Surface::Surface;QuartzCore`CA::Render::iosurface_load_attachments;libdispatch.dylib`_dispatch_once_callout;libdispatch.dylib`_dispatch_client_callout;QuartzCore`__CADeviceSupportsFilmGrain_block_invoke;QuartzCore`scaler_has_capability;IOKit`IOServiceGetMatchingService;IOKit`IOCFSerialize;IOKit`DoCFSerializeBinary;IOKit`IOCFSerializeBinaryAddObject;CoreFoundation`CFDictionarySetValue;CoreFoundation`__CFBasicHashAddValue;CoreFoundation`___CFBasicHashFindBucket_Linear_NoCollision 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;AppKit`-[NSCGLSurface flushRect:];AppKit`-[NSIOAccelSurface initWithGPURegistryID:surfaceID:];OpenGL`CGLChoosePixelFormat;OpenGL`0x00000001edb68cc4;OpenGL`0x00000001edb61fbc;GLEngine`gliChoosePixelFormat;AppleMetalOpenGLRenderer`gldChoosePixelFormat;AppleMetalOpenGLRenderer`GLDDeviceRec::dealloc 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppKit`NSCGLSurfaceFlush;SkyLight`SLSGetDisplaysWithOpenGLDisplayMask 1 +thread with id 4179785;dyld`start;Sample`main;Sample`Core::Context::Update;Sample`SDL_GL_SwapWindow;Sample`SDL_GL_SwapWindow_REAL;Sample`SDL_GL_SwapWindowWithResult;Sample`Cocoa_GL_SwapWindow;AppKit`-[NSOpenGLContext flushBuffer];OpenGL`CGLFlushDrawable;GLEngine`glSwap_Exec;AppleMetalOpenGLRenderer`gldPresentFramebufferData;AppleMetalOpenGLRenderer`GLDContextRec::flushContext;Metal`-[_MTLCommandQueue submitCommandBuffer:];libdispatch.dylib`_dispatch_lane_barrier_sync_invoke_and_complete;libdispatch.dylib`_dispatch_client_callout;Metal`__40-[_MTLCommandQueue submitCommandBuffer:]_block_invoke;Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers];IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:];IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:];IOKit`iokit_user_client_trap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`PowerPlants::PowerPlants;Sample`PowerPlants::PowerPlants;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](char const (&) [34]);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::Image::InitProgram;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](char const (&) [28], char const (&) [28]);Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::Shader;Sample`Core::Shader::Shader;Sample`Core::Shader::Compile;GLEngine`glCompileShaderIncludeARB_Exec;GLEngine`gleShaderParse;libGLProgrammability.dylib`ShCompile;libGLProgrammability.dylib`glpCompileShader;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSATopLevel;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionDefinition;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSABlock;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAExpressionStatement;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAMultiply;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAMultiply;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableIdentifier;libGLProgrammability.dylib`glpCheckIBDeref;libGLProgrammability.dylib`glpMakeTemporary;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclaration;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAArrayAccess;libGLProgrammability.dylib`glpIndirectArrayElement;libGLProgrammability.dylib`glpMakeArrayIndexOffsetFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAdd;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpAnalyzeBinaryMathOp;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionCall;libGLProgrammability.dylib`glpLookUpAndAnalyzeCall;libGLProgrammability.dylib`glpNameTableGet;libGLProgrammability.dylib`getAndRemapBuiltinFromScope;libGLProgrammability.dylib`remap;libGLProgrammability.dylib`getAndRemapBuiltinFromScope;libGLProgrammability.dylib`deserialize_GLPNameTableEntry;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke;libGLProgrammability.dylib`deserialize_pointer;libGLProgrammability.dylib`__deserialize_GLPOverload_block_invoke 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`PowerPlants::PowerPlants;Sample`PowerPlants::PowerPlants;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](char const (&) [34]);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::Image::InitVertexArray;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006]>, int>(std::__1::vector>&&, int&&);Sample`Core::VertexBuffer::VertexBuffer;Sample`Core::VertexBuffer::VertexBuffer;GLEngine`glBufferData_Exec;GLEngine`gleAcquireBufferData 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`PowerPlants::PowerPlants;Sample`PowerPlants::PowerPlants;Sample`std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](char const (&) [34]);Sample`Util::Image::Image;Sample`Util::Image::Image;Sample`Util::AssetStore::Get;Sample`Util::AssetStore::Load;Sample`std::__1::function::operator();Sample`std::__1::__function::__value_func (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&) const;Sample`std::__1::__function::__func::operator();Sample`std::__1::__function::__alloc_func (*)(std::__1::basic_string, std::__1::allocator> const&), std::__1::allocator (*)(std::__1::basic_string, std::__1::allocator> const&)>, std::__1::shared_ptr (std::__1::basic_string, std::__1::allocator> const&)>::operator()[abi:v160006](std::__1::basic_string, std::__1::allocator> const&);Sample`std::__1::shared_ptr std::__1::__invoke_void_return_wrapper::__call(std::__1::shared_ptr (*&);Sample`decltype(std::declval (*&)(std::__1::basic_string, std::__1::allocator> const&)>()(std::declval, std::__1::allocator> const&>())) std::__1::__invoke[abi:v160006] (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&>(std::__1::shared_ptr (*&)(std::__1::basic_string, std::__1::allocator> const&), std::__1::basic_string, std::__1::allocator> const&);Sample`Util::LoadSurface;Sample`IMG_Load;Sample`LoadImageFromFile;Sample`Create_SDL_Surface_From_CGImage;Sample`Create_SDL_Surface_From_CGImage_RGB;CoreGraphics`CGContextDrawImageWithOptions;CoreGraphics`ripc_DrawImage;CoreGraphics`ripc_AcquireRIPImageData;CoreGraphics`RIPImageCacheGetRetained;CoreGraphics`RIPImageDataInitializeShared;CoreGraphics`CGSImageDataLock;CoreGraphics`img_image;CoreGraphics`CGDataProviderCreateForDestinationWithImage;CoreGraphics`CGImageGetDataProviderInternal;CoreGraphics`CGDataProviderCopyData;CoreGraphics`CGAccessSessionCreate;CoreGraphics`CGDataProviderRetainData;CoreGraphics`imageProvider_retain_data;ImageIO`IIOImageProviderInfo::CopyImageBlockSetWithOptions;ImageIO`IIOImageProviderInfo::copyImageBlockSetWithOptions;ImageIO`IIO_Reader::CopyImageBlockSetProc;ImageIO`IIOReadPlugin::callDecodeImage;ImageIO`PNGReadPlugin::decodeImageImp;ImageIO`PNGReadPlugin::copyImageBlockSet;ImageIO`PNGReadPlugin::copyImageBlockSetStandard;ImageIO`PNGReadPlugin::DecodeUncomposedFrames;ImageIO`PNGReadPlugin::DecodeFrameStandard;libPng.dylib`png_read_row_indexed;libPng.dylib`png_read_IDAT_data;libz.1.dylib`inflate 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`Barracks::Barracks;Sample`Barracks::Barracks;Sample`Grid::Grid;Sample`Grid::Grid;Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::Shader;Sample`Core::Shader::Shader;Sample`Core::Shader::Compile;GLEngine`glCompileShaderIncludeARB_Exec;GLEngine`gleShaderParse;libGLProgrammability.dylib`ShCompile;libGLProgrammability.dylib`glpCompileShader;libGLProgrammability.dylib`glpPaParseStrings;libGLProgrammability.dylib`yyparse;libGLProgrammability.dylib`glpPaIdentOrType 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`WarFactory::WarFactory;Sample`WarFactory::WarFactory;Sample`Grid::Grid;Sample`Grid::Grid;Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::Shader;Sample`Core::Shader::Shader;Sample`Core::Shader::Compile;GLEngine`glCompileShaderIncludeARB_Exec;GLEngine`gleShaderParse;libGLProgrammability.dylib`ShCompile;libGLProgrammability.dylib`glpDestroyCompiler;libsystem_kernel.dylib`__munmap 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`UIClass::UIClass;Sample`UIClass::UIClass;Sample`std::__1::shared_ptr std::__1::make_shared[abi:v160006]();Sample`std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], void>(std::__1::allocator const&);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]<>(std::__1::allocator);Sample`OreRefinery::OreRefinery;Sample`OreRefinery::OreRefinery;Sample`Grid::Grid;Sample`Grid::Grid;Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::Shader;Sample`Core::Shader::Shader;Sample`Core::Shader::Compile;GLEngine`glCompileShaderIncludeARB_Exec;GLEngine`gleShaderParse;libGLProgrammability.dylib`ShCompile;libGLProgrammability.dylib`glpCompileShader;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSATopLevel;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionDefinition;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSABlock;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAExpressionStatement;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclarationGroup;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclaration;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAMultiply;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAMultiply;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableIdentifier;libGLProgrammability.dylib`glpCheckIBDeref;libGLProgrammability.dylib`glpMakeTemporary;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclaration;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAArrayAccess;libGLProgrammability.dylib`glpIndirectArrayElement;libGLProgrammability.dylib`glpMakeArrayIndexOffsetFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpAnalyzeBinaryMathOp;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionCall;libGLProgrammability.dylib`glpGetPrimitiveType 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`Grid::Grid;Sample`Grid::Grid;Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::Shader;Sample`Core::Shader::Shader;Sample`Core::Shader::Compile;GLEngine`glCompileShaderIncludeARB_Exec;GLEngine`gleShaderParse;libGLProgrammability.dylib`ShCompile;libGLProgrammability.dylib`glpCompileShader;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSATopLevel;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionDefinition;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSABlock;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAExpressionStatement;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclarationGroup;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclaration;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAMultiply;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpAnalyzeBinaryMathOp;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionCall;libGLProgrammability.dylib`glpInlineFunction;libGLProgrammability.dylib`glpMakeTemporary;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAVariableDeclaration;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpMakeAssignFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAAssign;libGLProgrammability.dylib`glpSABinaryOperator;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAArrayAccess;libGLProgrammability.dylib`glpIndirectArrayElement;libGLProgrammability.dylib`glpMakeArrayIndexOffsetFragment;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpAnalyzeBinaryMathOp;libGLProgrammability.dylib`glpSANode;libGLProgrammability.dylib`glpSAFunctionCall;libGLProgrammability.dylib`glpLowerCallToBodilessPPStreamOp;libGLProgrammability.dylib`glpMakeMutableValue;libGLProgrammability.dylib`glpPrimitiveTypeGetNumVec4s 1 +thread with id 4179785;dyld`start;Sample`main;Sample`App::App;Sample`App::App;Sample`MapScene::MapScene;Sample`MapScene::MapScene;Sample`Grid::Grid;Sample`Grid::Grid;Sample`Core::Program::Program;Sample`Core::Program::Program;Sample`Core::Shader::~Shader;Sample`Core::Shader::~Shader;GLEngine`glDeleteObjectARB_Exec;GLEngine`gleUnbindDeleteHashNameAndObject;GLEngine`gleFreeShaderObject;libGLProgrammability.dylib`ShDestruct 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`bool YAML::RegEx::IsValidSource;Sample`YAML::StreamCharSource::operator bool;Sample`YAML::Stream::ReadAheadTo 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch;Sample`YAML::StreamCharSource::operator[](unsigned long) const;Sample`YAML::Stream::CharAt;Sample`std::__1::deque>::operator[](unsigned long) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`std::__1::__wrap_iter::base[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`std::__1::basic_string, std::__1::allocator>::find_last_not_of[abi:v160006](char const*, unsigned long) const;Sample`unsigned long std::__1::__str_find_last_not_of[abi:v160006], 18446744073709551615ul>(char const*, unsigned long, char const*, unsigned long, unsigned long);Sample`std::__1::char_traits::find;libsystem_platform.dylib`_platform_memchr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::Stream::eat;Sample`YAML::Stream::get;Sample`YAML::Stream::AdvanceCurrent;Sample`std::__1::deque::pop_front;Sample`std::__1::deque>::__maybe_remove_front_spare[abi:v160006](bool) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::Stream::column 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`DYLD-STUB$$int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::~RegEx;Sample`YAML::RegEx::~RegEx;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;Sample`YAML::detail::node::node;Sample`YAML::detail::node::node;Sample`YAML::detail::node_ref::node_ref;Sample`YAML::detail::node_ref::node_ref;Sample`YAML::detail::node_data::node_data;Sample`YAML::detail::node_data::node_data;Sample`YAML::Mark::null_mark;Sample`YAML::Mark::Mark 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::peek;Sample`std::__1::queue>>::front[abi:v160006]();Sample`std::__1::__split_buffer>::begin[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::pop;Sample`std::__1::queue>>::pop[abi:v160006]();Sample`std::__1::deque::pop_front;Sample`void std::__1::allocator_traits>::destroy[abi:v160006](std::__1::allocator&, YAML::Token*);Sample`std::__1::allocator::destroy[abi:v160006](YAML::Token*);Sample`YAML::Token::~Token;Sample`YAML::Token::~Token;Sample`std::__1::vector, std::__1::allocator>, std::__1::allocator, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector, std::__1::allocator>, std::__1::allocator, std::__1::allocator>>>::~vector[abi:v160006]();Sample`std::__1::vector, std::__1::allocator>, std::__1::allocator, std::__1::allocator>>>::__destroy_vector::operator()[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::char_traits::length;libsystem_platform.dylib`_platform_strlen 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::~RegEx;Sample`YAML::RegEx::~RegEx;Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::~vector[abi:v160006]();Sample`std::__1::vector>::__destroy_vector::operator()[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanValue;Sample`YAML::Stream::eat;Sample`YAML::Stream::get;Sample`YAML::Stream::peek;Sample`std::__1::deque>::empty[abi:v160006]() const;Sample`std::__1::deque>::size[abi:v160006]() const;Sample`std::__1::deque>::__size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanValue;Sample`YAML::Scanner::VerifySimpleKey;Sample`std::__1::stack>>::pop[abi:v160006]();Sample`DYLD-STUB$$void std::__1::allocator_traits>::destroy[abi:v160006](std::__1::allocator&, YAML::Scanner::SimpleKey*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Stream::peek;Sample`std::__1::deque>::empty[abi:v160006]() const;Sample`std::__1::deque>::size[abi:v160006]() const;Sample`std::__1::deque>::__size[abi:v160006]() const;Sample`std::__1::__compressed_pair>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Stream::peek;Sample`std::__1::deque>::operator[](unsigned long) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch;Sample`YAML::StreamCharSource::operator[](unsigned long) const;Sample`YAML::Stream::CharAt;Sample`std::__1::deque>::operator[](unsigned long) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch;Sample`YAML::StreamCharSource::operator[](unsigned long) const;Sample`YAML::Stream::CharAt;Sample`std::__1::__split_buffer>::begin[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::PopIndentToHere;Sample`YAML::Scanner::PopIndent;Sample`std::__1::queue>>::push[abi:v160006](YAML::Token&&);Sample`std::__1::deque::push_back 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::pop;Sample`std::__1::queue>>::empty[abi:v160006]() const;Sample`std::__1::deque>::empty[abi:v160006]() const;Sample`std::__1::deque>::size[abi:v160006]() const;Sample`std::__1::deque>::__size[abi:v160006]() const;Sample`std::__1::__compressed_pair_elem::__get[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`DYLD-STUB$$int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`bool YAML::RegEx::IsValidSource;Sample`YAML::StreamCharSource::operator bool;Sample`YAML::Stream::ReadAheadTo;Sample`YAML::Stream::_ReadAheadTo;Sample`std::__1::deque>::size[abi:v160006]() const;Sample`std::__1::deque>::__size[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::Stream::get;Sample`YAML::Stream::AdvanceCurrent;Sample`YAML::Stream::ReadAheadTo;Sample`YAML::Stream::_ReadAheadTo;Sample`YAML::Stream::StreamInUtf8;Sample`std::__1::deque::push_back;Sample`std::__1::deque>::__size[abi:v160006]();Sample`std::__1::__compressed_pair_elem::__get[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::Stream::get;Sample`YAML::Stream::AdvanceCurrent;Sample`YAML::Stream::ReadAheadTo;Sample`YAML::Stream::_ReadAheadTo;Sample`YAML::Stream::StreamInUtf8;Sample`YAML::Stream::GetNextByte 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::Stream::eat 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;Sample`std::__1::set, std::__1::less>, std::__1::allocator>>::insert[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__tree, std::__1::less>, std::__1::allocator>>::__insert_unique[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::unique_ptr std::__1::__tree::__construct_node;Sample`std::__1::unique_ptr, void*>, std::__1::__tree_node_destructor, void*>>>>::operator->[abi:v160006]() const;Sample`std::__1::__compressed_pair, void*>*, std::__1::__tree_node_destructor, void*>>>>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;Sample`std::__1::set, std::__1::less>, std::__1::allocator>>::insert[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::__tree, std::__1::less>, std::__1::allocator>>::__insert_unique[abi:v160006](std::__1::shared_ptr const&);Sample`std::__1::pair std::__1::__tree::__emplace_unique_key_args;Sample`std::__1::unique_ptr std::__1::__tree::__construct_node;Sample`std::__1::unique_ptr, void*>, std::__1::__tree_node_destructor, void*>>>>::unique_ptr[abi:v160006](std::__1::__tree_node, void*>*, std::__1::__dependent_type, void*>>>>, true>::__good_rval_ref_type);Sample`std::__1::unique_ptr, void*>, std::__1::__tree_node_destructor, void*>>>>::unique_ptr[abi:v160006](std::__1::__tree_node, void*>*, std::__1::__dependent_type, void*>>>>, true>::__good_rval_ref_type) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;Sample`YAML::detail::node::node;Sample`YAML::detail::node::node;Sample`std::__1::shared_ptr::shared_ptr;Sample`std::__1::shared_ptr::shared_ptr;libc++abi.dylib`DYLD-STUB$$malloc 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::detail::memory_holder::create_node;Sample`YAML::detail::memory::create_node;libsystem_malloc.dylib`_malloc_zone_malloc 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::IsNullString;Sample`bool std::__1::operator==[abi:v160006], std::__1::allocator>(std::__1::basic_string, std::__1::allocator> const&, char const*);Sample`std::__1::basic_string, std::__1::allocator>::size[abi:v160006]() const;Sample`std::__1::basic_string, std::__1::allocator>::__is_long[abi:v160006]() const;Sample`std::__1::__compressed_pair, std::__1::allocator>::__rep, std::__1::allocator>::first[abi:v160006]() const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 2 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::begin[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpMatch;Sample`YAML::StreamCharSource::operator[](unsigned long) const;Sample`YAML::Stream::CharAt;Sample`std::__1::deque>::operator[](unsigned long) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`std::__1::basic_string, std::__1::allocator>::find_last_not_of[abi:v160006](char, unsigned long) const 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::Scanner::InsertPotentialSimpleKey;Sample`std::__1::queue>>::push[abi:v160006](YAML::Token&&);Sample`std::__1::deque::push_back;Sample`std::__1::deque::__add_back_capacity;Sample`std::__1::__split_buffer>::push_back[abi:v160006](YAML::Token* const&);Sample`YAML::Token** std::__1::move[abi:v160006](YAML::Token**, YAML::Token**, YAML::Token**);Sample`std::__1::pair std::__1::__move[abi:v160006](YAML::Token**, YAML::Token**, YAML::Token**);Sample`std::__1::pair std::__1::__dispatch_copy_or_move[abi:v160006], std::__1::__move_trivial, YAML::Token**, YAML::Token**, YAML::Token**>(YAML::Token**, YAML::Token**, YAML::Token**);Sample`std::__1::pair std::__1::__unwrap_and_dispatch[abi:v160006], std::__1::__move_trivial>, YAML::Token**, YAML::Token**, YAML::Token**, 0>(YAML::Token**, YAML::Token**, YAML::Token**);Sample`std::__1::pair std::__1::__unwrap_range[abi:v160006](YAML::Token**, YAML::Token**);Sample`std::__1::pair::type, std::__1::__unwrap_ref_decay::type> std::__1::make_pair[abi:v160006](YAML::Token**&&, YAML::Token**&&) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&);Sample`bool std::__1::operator==[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpNot;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`std::__1::vector>::end[abi:v160006]() const;Sample`std::__1::vector>::__make_iter[abi:v160006](YAML::RegEx const*) const;Sample`std::__1::__wrap_iter::__wrap_iter[abi:v160006](void const*, YAML::RegEx const*) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::pop;Sample`std::__1::queue>>::pop[abi:v160006]();Sample`std::__1::deque::pop_front;Sample`void std::__1::allocator_traits>::destroy[abi:v160006](std::__1::allocator&, YAML::Token*);Sample`std::__1::allocator::destroy[abi:v160006](YAML::Token*);Sample`YAML::Token::~Token;Sample`YAML::Token::~Token 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpOr;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`int YAML::RegEx::Match;Sample`DYLD-STUB$$YAML::StreamCharSource::operator bool 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`std::__1::basic_string, std::__1::allocator>::basic_string[abi:v160006]() 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanPlainScalar;Sample`YAML::ScanScalar;Sample`YAML::Stream::operator!;Sample`YAML::Stream::operator bool 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::Scanner::ScanToNextToken;Sample`YAML::Stream::eat;Sample`YAML::Stream::get;Sample`YAML::Stream::AdvanceCurrent;Sample`std::__1::deque::pop_front;Sample`std::__1::deque>::__maybe_remove_front_spare[abi:v160006](bool) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::NodeBuilder::OnScalar;Sample`YAML::NodeBuilder::Push;Sample`YAML::NodeBuilder::Push;Sample`std::__1::pair& std::__1::vector::emplace_back;Sample`void std::__1::vector, std::__1::allocator>>::__construct_one_at_end[abi:v160006](YAML::detail::node*&&, bool&&);Sample`void std::__1::allocator_traits>>::construct[abi:v160006], YAML::detail::node*, bool, void>(std::__1::allocator>&, std::__1::pair*, YAML::detail::node*&&, bool&&);Sample`void std::__1::allocator>::construct[abi:v160006], YAML::detail::node*, bool>(std::__1::pair*, YAML::detail::node*&&, bool&&);Sample`std::__1::pair::pair[abi:v160006](YAML::detail::node*&&, bool&&) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::JustInTimeLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();Sample`_GLOBAL__sub_I_YAMLReader.cpp;Sample`__cxx_global_var_init.8;Sample`YAML::LoadFile;Sample`YAML::Load;Sample`YAML::Parser::HandleNextDocument;Sample`YAML::SingleDocParser::HandleDocument;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::SingleDocParser::HandleNode;Sample`YAML::SingleDocParser::HandleMap;Sample`YAML::SingleDocParser::HandleBlockMap;Sample`YAML::Scanner::empty;Sample`YAML::Scanner::EnsureTokensInQueue;Sample`YAML::Scanner::ScanNextToken;Sample`YAML::RegEx::Matches;Sample`YAML::RegEx::Match;Sample`int YAML::RegEx::Match;Sample`int YAML::RegEx::MatchUnchecked;Sample`int YAML::RegEx::MatchOpSeq;Sample`bool std::__1::operator!=[abi:v160006](std::__1::__wrap_iter const&, std::__1::__wrap_iter const&) 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::RuntimeState::notifyObjCInit;libobjc.A.dylib`load_images;AppKit`+[NSApplication load];Foundation`+[NSBundle mainBundle];Foundation`-[NSBundle initWithPath:];Foundation`-[NSString hasSuffix:];Foundation`-[NSString rangeOfString:options:range:locale:];CoreFoundation`CFStringFindWithOptionsAndLocale 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::RuntimeState::notifyObjCInit;libobjc.A.dylib`load_images;AppKit`+[NSApplication load];Foundation`+[NSBundle mainBundle];CoreFoundation`CFBundleGetMainBundle;CoreFoundation`_CFBundleCreate;CoreFoundation`_CFBundleGetBundleVersionForURL;CoreFoundation`_CFIterateDirectory;CoreFoundation`___CFBundleGetBundleVersionForURL_block_invoke;CoreFoundation`CFUniCharGetBitmapPtrForPlane 1 +thread with id 4179785;dyld`start;dyld`dyld4::prepare;dyld`dyld4::APIs::runAllInitializersForMain;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks;dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_1::operator();dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::Loader::runInitializersBottomUp;dyld`dyld4::PrebuiltLoader::runInitializers;dyld`dyld4::Loader::findAndRunAllInitializers;dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`dyld3::MachOFile::forEachSection(void ;dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void ;dyld`invocation function for block in dyld3::MachOFile::forEachSection(void ;dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void ;dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator();CoreFoundation`__CFInitialize;CoreFoundation`_CFGetHandleForLoadedLibrary;libsystem_c.dylib`strrchr 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread 26 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 23 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear;libsystem_malloc.dylib`_nanov2_free 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libsystem_malloc.dylib`free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushContextInternal;AppleMetalOpenGLRenderer`GLDObject::release 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;AppleMetalOpenGLRenderer`std::__1::__hash_table::clear 19 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::flushPreprocessingCommandEncoders;AppleMetalOpenGLRenderer`GLRResourceList::makeResourcesNotBusyAndReset;libc++abi.dylib`DYLD-STUB$$free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r48r56r;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r48r56r;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AppleMetalOpenGLRenderer`__destroy_helper_block_e8_32r40r;libsystem_blocks.dylib`_Block_object_dispose 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`bool objc::DenseMapBase::LookupBucketFor 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;AppleMetalOpenGLRenderer`DYLD-STUB$$_Block_object_dispose 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_Block_release;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_malloc.dylib`nanov2_try_free_default 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`DYLD-STUB$$free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`objc_msgSend$error 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;Metal`-[_MTLCommandBuffer error] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_blocks.dylib`_call_dispose_helpers_excp 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::drawCore 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_platform.dylib`os_unfair_lock_lock 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;AppleMetalOpenGLRenderer`GLDShareGroupRec::signalUsage 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLDispatchListApply;libsystem_malloc.dylib`free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_malloc.dylib`free 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];AppleMetalOpenGLRenderer`invocation function for block in GLDContextRec::drawCore 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];AppleMetalOpenGLRenderer`GLDObject::release 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`MTLTraceEnabled 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;libsystem_kernel.dylib`mach_absolute_time 11 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;IOGPU`_iogpuMetalCommandBufferStorageReleaseCurrentResources;IOGPU`IOGPUMetalPooledResourceRelease 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalCommandBufferStorageReset;libsystem_platform.dylib`_platform_memset 4 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];IOGPU`IOGPUMetalCommandBufferStorageDealloc;IOGPU`IOGPUMetalDeviceShmemUpdateTrimLevel 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`objc_msgSend$signalCommandBufferAvailable 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];IOGPU`-[IOGPUMetalCommandBuffer didCompleteWithStartTime:endTime:error:];Metal`DYLD-STUB$$pthread_mutex_lock 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[NSMutableArray removeObject:];CoreFoundation`-[__NSArrayM objectAtIndex:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`objc_msgSend$objectAtIndex: 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_msgSend 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];libobjc.A.dylib`objc_msgSendSuper2 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];Metal`-[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:];CoreFoundation`-[__NSArrayM removeObjectsInRange:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];Metal`-[_MTLObjectWithLabel dealloc];libsystem_malloc.dylib`free_tiny;libsystem_malloc.dylib`tiny_free_no_lock 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`-[_MTLCommandBuffer dealloc];libsystem_pthread.dylib`pthread_mutex_destroy 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyCommandBuffer dealloc];IOGPU`-[IOGPUMetalCommandBuffer dealloc];Metal`objc_msgSend$executeSynchronizationNotifications: 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`-[AGXG13GFamilyDevice alertCommandBufferActivityComplete] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`objc_msgSend$deferredEndEncoding: 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;AGXMetal13_3`DYLD-STUB$$objc_release 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libsystem_blocks.dylib`_call_dispose_helpers_excp;libsystem_platform.dylib`os_unfair_lock_unlock 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;libobjc.A.dylib`objc_destructInstance;libobjc.A.dylib`_object_remove_associations;libobjc.A.dylib`bool objc::DenseMapBase, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapValueInfo, objc::DenseMapInfo, objc::detail::DenseMapPair>>, objc::DenseMapInfo>, objc::detail::DenseMapPair, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>>>, DisguisedPtr, objc::DenseMap, objc::DenseMapInfo, objc::detail::DenseMapPair>, objc::DenseMapV$ 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`_Block_release;IOGPU`__destroy_helper_block_e8_32o40o 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`DYLD-STUB$$pthread_mutex_lock 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didSchedule:error:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_blocks.dylib`DYLD-STUB$$free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libsystem_pthread.dylib`pthread_mutex_unlock 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;IOKit`DYLD-STUB$$memcpy 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;libobjc.A.dylib`objc_destructInstance 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:];libsystem_pthread.dylib`_pthread_mutex_lock_init_slow;libsystem_pthread.dylib`_pthread_mutex_check_init_slow 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;libsystem_blocks.dylib`_Block_release 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`IOGPUDeviceCheckAndLogSoftFaultCount 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOKit`__IODataQueueDequeue 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;IOGPU`__62-[IOGPUMetalCommandBuffer fillCommandBufferArgs:commandQueue:]_block_invoke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke;Metal`-[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:] 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`DYLD-STUB$$dispatch_mach_msg_get_msg 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_client_callout4;IOGPU`IOGPUNotificationQueueDispatchAvailableCompletionNotifications 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose;libsystem_malloc.dylib`_nanov2_free 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_dispatch_dispose;libobjc.A.dylib`_object_remove_associations 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;IOGPU`__IOGPUNotificationQueueSetDispatchQueue_block_invoke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_invoke;libdispatch.dylib`_os_object_release_internal 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`objc_msgSend$dealloc 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_dispose 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 31 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOKit`IODispatchCalloutFromCFMessage;libdispatch.dylib`_dispatch_semaphore_signal_slow;libsystem_kernel.dylib`semaphore_signal_trap 14 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;AppleMetalOpenGLRenderer`iosurfaceUseCountIsZeroCallback 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;IOKit`_IODispatchCalloutWithDispatch;IOSurface`IOSurfaceNotifierNotifyFunc 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`dispatch_mig_server;libsystem_kernel.dylib`mach_msg_overwrite 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_platform.dylib`_platform_memset 7 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`_dispatch_client_callout;libsystem_kernel.dylib`mach_msg 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;IOKit`__IONotificationPortSetDispatchQueue_block_invoke 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_source_latch_and_call;libdispatch.dylib`_dispatch_continuation_pop;libdispatch.dylib`dispatch_mig_server 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_latch_and_call 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_os_object_release_internal_n 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_mach_msg_async_reply_invoke;libdispatch.dylib`_dispatch_client_callout3;libxpc.dylib`_xpc_connection_call_reply_async;libxpc.dylib`_xpc_connection_reply_callout;Foundation`__88-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:]_block_invoke_3;Foundation`-[NSXPCConnection _decodeAndInvokeReplyBlockWithEvent:sequence:replyInfo:];Foundation`-[NSXPCDecoder _decodeReplyFromXPCObject:forSelector:];Foundation`-[NSXPCDecoder __decodeXPCObject:allowingSimpleMessageSend:outInvocation:outArguments:outArgumentsMaxCount:outMethodSignature:outSelector:isReply:replySelector:];CoreFoundation`+[NSMethodSignature signatureWithObjCTypes:];CoreFoundation`CFDictionaryGetValue;CoreFoundation`___CFBasicHashFindBucket_Linear;libsystem_platform.dylib`_platform_strcmp 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`DYLD-STUB$$objc_autoreleasePoolPush 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_invoke;libobjc.A.dylib`objc_autoreleasePoolPush 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_workloop_invoke;libdispatch.dylib`_dispatch_lane_invoke;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;AudioToolbox`AQ::API::V2Impl::ClientNotificationsAvailable 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_workloop_invoke;libdispatch.dylib`_dispatch_client_callout;libdispatch.dylib`_dispatch_call_block_and_release;AudioToolbox`invocation function for block in AQ::API::Queue::DispatchFetchAndDeliverPendingCallbacks;CoreFoundation`CFRunLoopWakeUp;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_lane_serial_drain 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh;libdispatch.dylib`_dispatch_last_resort_autorelease_pool_push 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libobjc.A.dylib`class_createInstance;libsystem_malloc.dylib`nanov2_calloc 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`dispatch_mach_msg_create;libdispatch.dylib`_os_object_alloc_realized;libsystem_malloc.dylib`nanov2_calloc 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_mach_merge_msg;libdispatch.dylib`_dispatch_event_loop_poke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_queue_wakeup 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_lane_push 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_mach_msg_recv 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_voucher_create_with_mach_msgv 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_lane_wakeup 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_voucher_create_with_mach_voucher 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_kevent_mach_msg_drain 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_event_loop_merge;libdispatch.dylib`_dispatch_event_loop_poke 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_source_merge_evt 3 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_kevent_drain 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libdispatch.dylib`_dispatch_queue_wakeup 2 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread;libsystem_platform.dylib`_platform_memmove 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_kevent_worker_thread;libdispatch.dylib`_dispatch_mgr_queue_drain;libdispatch.dylib`_dispatch_lane_serial_drain;libdispatch.dylib`_dispatch_source_invoke;libdispatch.dylib`_dispatch_root_queue_poke_slow;libsystem_kernel.dylib`__workq_kernreturn 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`_pthread_wqthread;libdispatch.dylib`_dispatch_event_loop_merge 1 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_kernel.dylib`__workq_kernreturn 232 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libsystem_pthread.dylib`DYLD-STUB$$__workq_kernreturn 5 +thread with id 4180012;libsystem_pthread.dylib`start_wqthread;libdispatch.dylib`_dispatch_workloop_worker_thread 2 +thread with id 4180012;libsystem_kernel.dylib`__workq_kernreturn 2 +thread with id 4180012;libsystem_pthread.dylib`_pthread_wqthread 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;SkyLight`SLEventCreateNextEvent;SkyLight`SLSGetNextEventRecordInternal;SkyLight`CGSSnarfAndDispatchDatagrams;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 6 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;SkyLight`SLEventCreateNextEvent;SkyLight`SLSGetNextEventRecordInternal;SkyLight`CGSSnarfAndDispatchDatagrams;SkyLight`event_datagram_handler;SkyLight`CGSDecodeEventRecord;SkyLight`SLEventRecordCreateWithBytesAndSource;SkyLight`SLEventGetFieldDecodeDescriptor(SLEventToken)::$_21::__invoke;SkyLight`SLEventRecordSetIntegerValue 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;SkyLight`SLEventCreateNextEvent;SkyLight`SLSGetNextEventRecordInternal;SkyLight`CGSEventLogEvent;CoreFoundation`DYLD-STUB$$clock_gettime 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;SkyLight`SLEventCreateNextEvent;SkyLight`SLSGetNextEventRecordInternal;SkyLight`CGSEventLogEvent;SkyLight`(anonymous namespace)::MouseEventLog::getLogString;SkyLight`(anonymous namespace)::EventLog::getLogString;libsystem_c.dylib`snprintf;libsystem_c.dylib`_vsnprintf;libsystem_c.dylib`__vfprintf;libsystem_c.dylib`__dtoa 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;SkyLight`SLEventCreateNextEvent;SkyLight`SLSGetNextEventRecordInternal;libc++.1.dylib`std::__1::mutex::lock 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;HIToolbox`PullEventsFromWindowServerOnConnection;HIToolbox`DYLD-STUB$$pthread_mutex_lock 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;HIToolbox`MessageHandler;SkyLight`SLEventCreateNextEvent 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;CoreFoundation`_CFRelease;CoreFoundation`__CFMachPortBoostDeallocate;libdispatch.dylib`voucher_decrement_importance_count4CF;libsystem_kernel.dylib`mach_voucher_attr_command;libsystem_kernel.dylib`mach_msg2_trap 2 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopDoSource1;CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__;CoreFoundation`__CFMachPortPerform;CoreFoundation`_CFMachPortBoostCreate;CoreFoundation`_CFRuntimeCreateInstance 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopServiceMachPort;libsystem_kernel.dylib`mach_msg;libsystem_kernel.dylib`mach_msg_overwrite;libsystem_kernel.dylib`mach_msg2_trap 6 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`__CFRunLoopServiceMachPort;libdispatch.dylib`voucher_mach_msg_adopt;libdispatch.dylib`_voucher_create_with_mach_voucher;libdispatch.dylib`_voucher_dealloc_mach_voucher;libsystem_kernel.dylib`_kernelrpc_mach_port_deallocate_trap 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopRun;CoreFoundation`CFSetApplyFunction 1 +thread with id 4180015;libsystem_pthread.dylib`thread_start;libsystem_pthread.dylib`_pthread_start;AppKit`_NSEventThread;CoreFoundation`CFRunLoopRunSpecific;CoreFoundation`__CFRunLoopModeIsEmpty;CoreFoundation`CFSetGetCount;CoreFoundation`CF_IS_OBJC 1 diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 00000000..bcf6514a Binary files /dev/null and b/assets/.DS_Store differ diff --git a/assets/BGM/Cults-A_Low.mp3 b/assets/BGM/Cults-A_Low.mp3 new file mode 100644 index 00000000..27ad0daf Binary files /dev/null and b/assets/BGM/Cults-A_Low.mp3 differ diff --git a/assets/BGM/Jimmy_Scott-Sycamore_Trees.mp3 b/assets/BGM/Jimmy_Scott-Sycamore_Trees.mp3 new file mode 100644 index 00000000..546187b9 Binary files /dev/null and b/assets/BGM/Jimmy_Scott-Sycamore_Trees.mp3 differ diff --git a/assets/BGM/RA3-Soviet_March.mp3 b/assets/BGM/RA3-Soviet_March.mp3 new file mode 100644 index 00000000..2ade982b Binary files /dev/null and b/assets/BGM/RA3-Soviet_March.mp3 differ diff --git a/assets/Button/Button_Exit.png b/assets/Button/Button_Exit.png new file mode 100644 index 00000000..2c7d9230 Binary files /dev/null and b/assets/Button/Button_Exit.png differ diff --git a/assets/Button/Button_Extras.png b/assets/Button/Button_Extras.png new file mode 100644 index 00000000..04dec735 Binary files /dev/null and b/assets/Button/Button_Extras.png differ diff --git a/assets/Button/Button_Setting.png b/assets/Button/Button_Setting.png new file mode 100644 index 00000000..d33e3738 Binary files /dev/null and b/assets/Button/Button_Setting.png differ diff --git a/assets/Button/Button_Singleplayer.png b/assets/Button/Button_Singleplayer.png new file mode 100644 index 00000000..0fdead7c Binary files /dev/null and b/assets/Button/Button_Singleplayer.png differ diff --git a/assets/fonts/sackersgothicstd-heavy.otf b/assets/fonts/sackersgothicstd-heavy.otf new file mode 100644 index 00000000..89573d5d Binary files /dev/null and b/assets/fonts/sackersgothicstd-heavy.otf differ diff --git a/assets/fonts/sackersgothicstd-light.otf b/assets/fonts/sackersgothicstd-light.otf new file mode 100644 index 00000000..358c9433 Binary files /dev/null and b/assets/fonts/sackersgothicstd-light.otf differ diff --git a/assets/fonts/sackersgothicstd-medium.otf b/assets/fonts/sackersgothicstd-medium.otf new file mode 100644 index 00000000..ec470352 Binary files /dev/null and b/assets/fonts/sackersgothicstd-medium.otf differ diff --git a/assets/map/.DS_Store b/assets/map/.DS_Store new file mode 100644 index 00000000..44c7dfdb Binary files /dev/null and b/assets/map/.DS_Store differ diff --git a/assets/map/20/map.bin b/assets/map/20/map.bin new file mode 100644 index 00000000..1ba55c30 Binary files /dev/null and b/assets/map/20/map.bin differ diff --git a/assets/map/20/map.png b/assets/map/20/map.png new file mode 100644 index 00000000..ecf6509d Binary files /dev/null and b/assets/map/20/map.png differ diff --git a/assets/map/20/map.yaml b/assets/map/20/map.yaml new file mode 100644 index 00000000..db24b96e --- /dev/null +++ b/assets/map/20/map.yaml @@ -0,0 +1,30 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: Name your map here + +Author: Your name here + +Tileset: TEMPERAT + +MapSize: 22,22 + +Bounds: 1,1,20,20 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + +Actors: diff --git a/assets/map/255/map.bin b/assets/map/255/map.bin new file mode 100644 index 00000000..d95cc01a Binary files /dev/null and b/assets/map/255/map.bin differ diff --git a/assets/map/255/map.png b/assets/map/255/map.png new file mode 100644 index 00000000..8dfd0c46 Binary files /dev/null and b/assets/map/255/map.png differ diff --git a/assets/map/255/map.yaml b/assets/map/255/map.yaml new file mode 100644 index 00000000..dc5136e0 --- /dev/null +++ b/assets/map/255/map.yaml @@ -0,0 +1,30 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: test + +Author: Your name here + +Tileset: TEMPERAT + +MapSize: 4,4 + +Bounds: 1,1,2,2 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + +Actors: diff --git a/assets/map/CIFSTE/map.bin b/assets/map/CIFSTE/map.bin new file mode 100644 index 00000000..11a1f49a Binary files /dev/null and b/assets/map/CIFSTE/map.bin differ diff --git a/assets/map/CIFSTE/map.png b/assets/map/CIFSTE/map.png new file mode 100644 index 00000000..144576df Binary files /dev/null and b/assets/map/CIFSTE/map.png differ diff --git a/assets/map/CIFSTE/map.yaml b/assets/map/CIFSTE/map.yaml new file mode 100644 index 00000000..03d7b736 --- /dev/null +++ b/assets/map/CIFSTE/map.yaml @@ -0,0 +1,2067 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: City In Flames (Single Tank Edition) + +Author: Arazoid + +Tileset: TEMPERAT + +MapSize: 71,71 + +Bounds: 1,1,69,69 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7, Multi8, Multi9, Multi10, Multi11, Multi12, Multi13, Multi14, Multi15, Multi16, Multi17, Multi18, Multi19, Multi20, Multi21 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi8: + Name: Multi8 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi9: + Name: Multi9 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi10: + Name: Multi10 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi11: + Name: Multi11 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi12: + Name: Multi12 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi13: + Name: Multi13 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi14: + Name: Multi14 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi15: + Name: Multi15 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi16: + Name: Multi16 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi17: + Name: Multi17 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi18: + Name: Multi18 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi19: + Name: Multi19 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi20: + Name: Multi20 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi21: + Name: Multi21 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor0: rushouse + Owner: Neutral + Location: 11,20 + Actor1: rushouse + Owner: Neutral + Location: 12,20 + Actor2: rushouse + Owner: Neutral + Location: 13,20 + Actor3: rushouse + Owner: Neutral + Location: 14,20 + Actor4: rushouse + Owner: Neutral + Location: 15,20 + Actor5: rushouse + Owner: Neutral + Location: 16,20 + Actor6: rushouse + Owner: Neutral + Location: 17,20 + Actor7: rushouse + Owner: Neutral + Location: 18,20 + Actor8: rushouse + Owner: Neutral + Location: 19,20 + Actor9: rushouse + Owner: Neutral + Location: 20,20 + Actor10: rushouse + Owner: Neutral + Location: 21,20 + Actor11: rushouse + Owner: Neutral + Location: 22,20 + Actor12: rushouse + Owner: Neutral + Location: 23,20 + Actor13: rushouse + Owner: Neutral + Location: 10,20 + Actor14: rushouse + Owner: Neutral + Location: 9,20 + Actor15: rushouse + Owner: Neutral + Location: 8,20 + Actor16: rushouse + Owner: Neutral + Location: 7,20 + Actor17: rushouse + Owner: Neutral + Location: 6,20 + Actor18: rushouse + Owner: Neutral + Location: 26,20 + Actor19: rushouse + Owner: Neutral + Location: 27,20 + Actor20: rushouse + Owner: Neutral + Location: 28,20 + Actor21: rushouse + Owner: Neutral + Location: 29,20 + Actor22: rushouse + Owner: Neutral + Location: 30,20 + Actor23: rushouse + Owner: Neutral + Location: 31,20 + Actor24: rushouse + Owner: Neutral + Location: 32,20 + Actor25: rushouse + Owner: Neutral + Location: 33,20 + Actor26: rushouse + Owner: Neutral + Location: 34,20 + Actor27: rushouse + Owner: Neutral + Location: 35,20 + Actor28: rushouse + Owner: Neutral + Location: 35,21 + Actor29: rushouse + Owner: Neutral + Location: 35,22 + Actor30: rushouse + Owner: Neutral + Location: 35,23 + Actor31: rushouse + Owner: Neutral + Location: 35,24 + Actor32: rushouse + Owner: Neutral + Location: 35,25 + Actor33: rushouse + Owner: Neutral + Location: 35,26 + Actor34: rushouse + Owner: Neutral + Location: 35,27 + Actor35: rushouse + Owner: Neutral + Location: 35,28 + Actor36: rushouse + Owner: Neutral + Location: 35,29 + Actor37: rushouse + Owner: Neutral + Location: 35,31 + Actor38: rushouse + Owner: Neutral + Location: 35,30 + Actor39: rushouse + Owner: Neutral + Location: 35,32 + Actor40: rushouse + Owner: Neutral + Location: 34,32 + Actor41: rushouse + Owner: Neutral + Location: 33,32 + Actor42: rushouse + Owner: Neutral + Location: 32,32 + Actor43: rushouse + Owner: Neutral + Location: 31,32 + Actor44: rushouse + Owner: Neutral + Location: 30,32 + Actor45: rushouse + Owner: Neutral + Location: 29,32 + Actor46: rushouse + Owner: Neutral + Location: 28,32 + Actor47: rushouse + Owner: Neutral + Location: 27,32 + Actor48: rushouse + Owner: Neutral + Location: 26,32 + Actor49: rushouse + Owner: Neutral + Location: 23,32 + Actor50: rushouse + Owner: Neutral + Location: 22,32 + Actor51: rushouse + Owner: Neutral + Location: 21,32 + Actor52: rushouse + Owner: Neutral + Location: 20,32 + Actor53: rushouse + Owner: Neutral + Location: 19,32 + Actor54: rushouse + Owner: Neutral + Location: 18,32 + Actor55: rushouse + Owner: Neutral + Location: 17,32 + Actor56: rushouse + Owner: Neutral + Location: 16,32 + Actor57: rushouse + Owner: Neutral + Location: 14,32 + Actor58: rushouse + Owner: Neutral + Location: 15,32 + Actor59: rushouse + Owner: Neutral + Location: 13,32 + Actor60: rushouse + Owner: Neutral + Location: 12,32 + Actor61: rushouse + Owner: Neutral + Location: 11,32 + Actor62: rushouse + Owner: Neutral + Location: 10,32 + Actor63: rushouse + Owner: Neutral + Location: 9,32 + Actor64: rushouse + Owner: Neutral + Location: 8,32 + Actor65: rushouse + Owner: Neutral + Location: 7,32 + Actor66: rushouse + Owner: Neutral + Location: 6,32 + Actor67: rushouse + Owner: Neutral + Location: 6,31 + Actor68: rushouse + Owner: Neutral + Location: 6,30 + Actor69: rushouse + Owner: Neutral + Location: 6,29 + Actor70: rushouse + Owner: Neutral + Location: 6,28 + Actor71: rushouse + Owner: Neutral + Location: 6,27 + Actor72: rushouse + Owner: Neutral + Location: 6,27 + Actor73: rushouse + Owner: Neutral + Location: 6,26 + Actor74: rushouse + Owner: Neutral + Location: 6,25 + Actor75: rushouse + Owner: Neutral + Location: 6,24 + Actor77: rushouse + Owner: Neutral + Location: 10,27 + Actor78: rushouse + Owner: Neutral + Location: 11,27 + Actor79: rushouse + Owner: Neutral + Location: 12,27 + Actor80: rushouse + Owner: Neutral + Location: 13,27 + Actor81: rushouse + Owner: Neutral + Location: 14,27 + Actor82: rushouse + Owner: Neutral + Location: 14,27 + Actor83: rushouse + Owner: Neutral + Location: 15,27 + Actor84: rushouse + Owner: Neutral + Location: 16,27 + Actor85: rushouse + Owner: Neutral + Location: 17,27 + Actor86: rushouse + Owner: Neutral + Location: 18,27 + Actor87: rushouse + Owner: Neutral + Location: 19,27 + Actor88: rushouse + Owner: Neutral + Location: 20,27 + Actor89: rushouse + Owner: Neutral + Location: 21,27 + Actor90: rushouse + Owner: Neutral + Location: 22,27 + Actor91: rushouse + Owner: Neutral + Location: 23,27 + Actor92: rushouse + Owner: Neutral + Location: 23,26 + Actor93: rushouse + Owner: Neutral + Location: 22,26 + Actor94: rushouse + Owner: Neutral + Location: 21,26 + Actor95: rushouse + Owner: Neutral + Location: 20,26 + Actor96: rushouse + Owner: Neutral + Location: 19,26 + Actor97: rushouse + Owner: Neutral + Location: 18,26 + Actor98: rushouse + Owner: Neutral + Location: 17,26 + Actor99: rushouse + Owner: Neutral + Location: 16,26 + Actor100: rushouse + Owner: Neutral + Location: 15,26 + Actor101: rushouse + Owner: Neutral + Location: 14,26 + Actor102: rushouse + Owner: Neutral + Location: 13,26 + Actor103: rushouse + Owner: Neutral + Location: 12,26 + Actor104: rushouse + Owner: Neutral + Location: 11,26 + Actor105: rushouse + Owner: Neutral + Location: 10,26 + Actor106: rushouse + Owner: Neutral + Location: 10,25 + Actor107: rushouse + Owner: Neutral + Location: 11,25 + Actor108: rushouse + Owner: Neutral + Location: 12,25 + Actor109: rushouse + Owner: Neutral + Location: 13,25 + Actor110: rushouse + Owner: Neutral + Location: 14,25 + Actor111: rushouse + Owner: Neutral + Location: 14,25 + Actor112: rushouse + Owner: Neutral + Location: 15,25 + Actor113: rushouse + Owner: Neutral + Location: 16,25 + Actor114: rushouse + Owner: Neutral + Location: 17,25 + Actor115: rushouse + Owner: Neutral + Location: 18,25 + Actor116: rushouse + Owner: Neutral + Location: 19,25 + Actor117: rushouse + Owner: Neutral + Location: 20,25 + Actor118: rushouse + Owner: Neutral + Location: 21,25 + Actor119: rushouse + Owner: Neutral + Location: 22,25 + Actor120: rushouse + Owner: Neutral + Location: 23,25 + Actor121: rushouse + Owner: Neutral + Location: 10,24 + Actor122: rushouse + Owner: Neutral + Location: 11,24 + Actor123: rushouse + Owner: Neutral + Location: 12,24 + Actor124: rushouse + Owner: Neutral + Location: 13,24 + Actor125: rushouse + Owner: Neutral + Location: 14,24 + Actor126: rushouse + Owner: Neutral + Location: 15,24 + Actor127: rushouse + Owner: Neutral + Location: 16,24 + Actor128: rushouse + Owner: Neutral + Location: 17,24 + Actor129: rushouse + Owner: Neutral + Location: 18,24 + Actor130: rushouse + Owner: Neutral + Location: 19,24 + Actor131: rushouse + Owner: Neutral + Location: 20,24 + Actor132: rushouse + Owner: Neutral + Location: 21,24 + Actor133: rushouse + Owner: Neutral + Location: 22,24 + Actor134: rushouse + Owner: Neutral + Location: 23,24 + Actor135: rushouse + Owner: Neutral + Location: 23,28 + Actor136: rushouse + Owner: Neutral + Location: 22,28 + Actor137: rushouse + Owner: Neutral + Location: 21,28 + Actor138: rushouse + Owner: Neutral + Location: 20,28 + Actor139: rushouse + Owner: Neutral + Location: 19,28 + Actor140: rushouse + Owner: Neutral + Location: 18,28 + Actor141: rushouse + Owner: Neutral + Location: 17,28 + Actor142: rushouse + Owner: Neutral + Location: 16,28 + Actor143: rushouse + Owner: Neutral + Location: 15,28 + Actor144: rushouse + Owner: Neutral + Location: 14,28 + Actor145: rushouse + Owner: Neutral + Location: 13,28 + Actor146: rushouse + Owner: Neutral + Location: 12,28 + Actor147: rushouse + Owner: Neutral + Location: 11,28 + Actor148: rushouse + Owner: Neutral + Location: 10,28 + Actor149: oilb + Owner: Neutral + Location: 26,24 + Actor150: oilb + Owner: Neutral + Location: 26,26 + Actor151: oilb + Owner: Neutral + Location: 26,28 + Actor152: v19 + Owner: Neutral + Location: 28,24 + Actor153: v19 + Owner: Neutral + Location: 28,25 + Actor154: v19 + Owner: Neutral + Location: 28,26 + Actor155: v19 + Owner: Neutral + Location: 28,27 + Actor156: v19 + Owner: Neutral + Location: 28,28 + Actor157: v19 + Owner: Neutral + Location: 28,29 + Actor158: hosp + Owner: Neutral + Location: 33,24 + Actor159: miss + Owner: Neutral + Location: 18,41 + Actor161: cycl + Owner: Neutral + Location: 4,22 + Actor162: cycl + Owner: Neutral + Location: 3,22 + Actor165: cycl + Owner: Neutral + Location: 1,21 + Actor166: cycl + Owner: Neutral + Location: 1,20 + Actor167: cycl + Owner: Neutral + Location: 2,20 + Actor168: cycl + Owner: Neutral + Location: 3,20 + Actor169: cycl + Owner: Neutral + Location: 4,20 + Actor170: cycl + Owner: Neutral + Location: 4,21 + Actor171: cycl + Owner: Neutral + Location: 1,20 + Actor172: cycl + Owner: Neutral + Location: 1,19 + Actor173: cycl + Owner: Neutral + Location: 1,18 + Actor174: cycl + Owner: Neutral + Location: 1,17 + Actor175: cycl + Owner: Neutral + Location: 1,16 + Actor176: cycl + Owner: Neutral + Location: 2,16 + Actor177: cycl + Owner: Neutral + Location: 3,16 + Actor178: cycl + Owner: Neutral + Location: 4,16 + Actor179: cycl + Owner: Neutral + Location: 4,17 + Actor180: cycl + Owner: Neutral + Location: 4,18 + Actor181: cycl + Owner: Neutral + Location: 4,19 + Actor182: powr + Owner: Neutral + Location: 2,17 + Actor183: apwr + Owner: Neutral + Location: 31,28 + Actor184: brik + Owner: Neutral + Location: 34,31 + Actor185: brik + Owner: Neutral + Location: 33,31 + Actor186: brik + Owner: Neutral + Location: 32,31 + Actor187: brik + Owner: Neutral + Location: 31,31 + Actor188: brik + Owner: Neutral + Location: 30,31 + Actor189: brik + Owner: Neutral + Location: 30,30 + Actor190: brik + Owner: Neutral + Location: 30,29 + Actor191: brik + Owner: Neutral + Location: 30,28 + Actor192: brik + Owner: Neutral + Location: 30,27 + Actor193: brik + Owner: Neutral + Location: 31,27 + Actor194: brik + Owner: Neutral + Location: 32,27 + Actor195: brik + Owner: Neutral + Location: 33,27 + Actor196: brik + Owner: Neutral + Location: 34,27 + Actor197: brik + Owner: Neutral + Location: 34,28 + Actor198: brik + Owner: Neutral + Location: 34,28 + Actor199: brik + Owner: Neutral + Location: 34,29 + Actor200: brik + Owner: Neutral + Location: 34,30 + Actor201: atek + Owner: Neutral + Location: 30,23 + Actor203: afld + Owner: Neutral + Location: 10,17 + Actor204: afld + Owner: Neutral + Location: 13,17 + Actor205: afld + Owner: Neutral + Location: 16,17 + Actor206: afld + Owner: Neutral + Location: 19,17 + Actor207: afld.ukraine + Owner: Neutral + Location: 22,17 + Actor208: afld.ukraine + Owner: Neutral + Location: 7,17 + Actor209: hpad + Owner: Neutral + Location: 7,16 + Actor210: hpad + Owner: Neutral + Location: 9,16 + Actor211: hpad + Owner: Neutral + Location: 11,16 + Actor212: hpad + Owner: Neutral + Location: 13,16 + Actor213: hpad + Owner: Neutral + Location: 15,16 + Actor214: hpad + Owner: Neutral + Location: 17,16 + Actor215: hpad + Owner: Neutral + Location: 19,16 + Actor216: hpad + Owner: Neutral + Location: 21,16 + Actor217: hpad + Owner: Neutral + Location: 23,16 + Actor218: weap + Owner: Neutral + Location: 1,47 + Actor219: weap + Owner: Neutral + Location: 5,47 + Actor220: weap + Owner: Neutral + Location: 9,47 + Actor221: weap + Owner: Neutral + Location: 13,47 + Actor222: stek + Owner: Neutral + Location: 12,45 + Actor223: stek + Owner: Neutral + Location: 8,45 + Actor224: stek + Owner: Neutral + Location: 4,45 + Actor225: stek + Owner: Neutral + Location: 0,45 + Actor226: wood + Owner: Neutral + Location: 15,46 + Actor227: wood + Owner: Neutral + Location: 15,45 + Actor232: wood + Owner: Neutral + Location: 11,46 + Actor233: wood + Owner: Neutral + Location: 11,45 + Actor234: wood + Owner: Neutral + Location: 11,44 + Actor235: wood + Owner: Neutral + Location: 11,43 + Actor236: wood + Owner: Neutral + Location: 11,42 + Actor237: wood + Owner: Neutral + Location: 11,41 + Actor238: wood + Owner: Neutral + Location: 7,46 + Actor239: wood + Owner: Neutral + Location: 7,45 + Actor240: wood + Owner: Neutral + Location: 7,44 + Actor241: wood + Owner: Neutral + Location: 7,43 + Actor242: wood + Owner: Neutral + Location: 7,42 + Actor243: wood + Owner: Neutral + Location: 7,41 + Actor244: wood + Owner: Neutral + Location: 3,46 + Actor245: wood + Owner: Neutral + Location: 3,45 + Actor246: wood + Owner: Neutral + Location: 3,44 + Actor247: wood + Owner: Neutral + Location: 3,43 + Actor248: wood + Owner: Neutral + Location: 3,43 + Actor249: wood + Owner: Neutral + Location: 3,42 + Actor250: wood + Owner: Neutral + Location: 3,41 + Actor251: wood + Owner: Neutral + Location: 2,41 + Actor252: wood + Owner: Neutral + Location: 1,41 + Actor253: wood + Owner: Neutral + Location: 0,41 + Actor254: wood + Owner: Neutral + Location: 6,41 + Actor255: wood + Owner: Neutral + Location: 5,41 + Actor256: wood + Owner: Neutral + Location: 4,41 + Actor257: wood + Owner: Neutral + Location: 7,41 + Actor258: wood + Owner: Neutral + Location: 8,41 + Actor259: wood + Owner: Neutral + Location: 9,41 + Actor260: wood + Owner: Neutral + Location: 10,41 + Actor261: wood + Owner: Neutral + Location: 12,41 + Actor262: wood + Owner: Neutral + Location: 13,41 + Actor263: wood + Owner: Neutral + Location: 13,41 + Actor264: wood + Owner: Neutral + Location: 14,41 + Actor266: kenn + Owner: Neutral + Location: 10,42 + Actor267: kenn + Owner: Neutral + Location: 6,42 + Actor268: kenn + Owner: Neutral + Location: 2,42 + Actor265: wood + Owner: Neutral + Location: 15,44 + Actor269: wood + Owner: Neutral + Location: 16,44 + Actor271: wood + Owner: Neutral + Location: 16,42 + Actor272: wood + Owner: Neutral + Location: 16,41 + Actor273: wood + Owner: Neutral + Location: 15,41 + Actor274: kenn + Owner: Neutral + Location: 15,42 + Actor283: v08 + Owner: Neutral + Location: 16,36 + Actor284: v08 + Owner: Neutral + Location: 14,36 + Actor285: v08 + Owner: Neutral + Location: 12,36 + Actor286: v08 + Owner: Neutral + Location: 10,36 + Actor287: v08 + Owner: Neutral + Location: 8,36 + Actor288: v08 + Owner: Neutral + Location: 6,36 + Actor289: v08 + Owner: Neutral + Location: 4,36 + Actor290: v08 + Owner: Neutral + Location: 2,36 + Actor291: v08 + Owner: Neutral + Location: 0,36 + Actor292: v04 + Owner: Neutral + Location: 0,38 + Actor279: v04 + Owner: Neutral + Location: 2,38 + Actor280: v04 + Owner: Neutral + Location: 4,38 + Actor281: v04 + Owner: Neutral + Location: 6,38 + Actor293: v04 + Owner: Neutral + Location: 10,38 + Actor294: v04 + Owner: Neutral + Location: 12,38 + Actor295: v04 + Owner: Neutral + Location: 14,38 + Actor296: v01 + Owner: Neutral + Location: 2,33 + Actor282: v04 + Owner: Neutral + Location: 8,38 + Actor297: wood + Owner: Neutral + Location: 0,34 + Actor298: wood + Owner: Neutral + Location: 0,33 + Actor299: wood + Owner: Neutral + Location: 0,32 + Actor300: wood + Owner: Neutral + Location: 0,31 + Actor301: wood + Owner: Neutral + Location: 0,30 + Actor302: wood + Owner: Neutral + Location: 0,29 + Actor303: wood + Owner: Neutral + Location: 1,29 + Actor304: wood + Owner: Neutral + Location: 2,29 + Actor305: wood + Owner: Neutral + Location: 3,29 + Actor306: wood + Owner: Neutral + Location: 4,29 + Actor307: wood + Owner: Neutral + Location: 5,29 + Actor308: wood + Owner: Neutral + Location: 5,30 + Actor309: wood + Owner: Neutral + Location: 5,31 + Actor310: wood + Owner: Neutral + Location: 5,32 + Actor311: wood + Owner: Neutral + Location: 5,33 + Actor312: wood + Owner: Neutral + Location: 5,34 + Actor313: wood + Owner: Neutral + Location: 4,34 + Actor314: wood + Owner: Neutral + Location: 1,34 + Actor315: t10 + Owner: Neutral + Location: 8,41 + Actor316: t13 + Owner: Neutral + Location: 6,43 + Actor317: t15 + Owner: Neutral + Location: 0,42 + Actor318: tc05 + Owner: Neutral + Location: 0,26 + Actor319: tc02 + Owner: Neutral + Location: 2,27 + Actor320: tc01 + Owner: Neutral + Location: 0,25 + Actor321: tc04 + Owner: Neutral + Location: 0,23 + Actor322: tc03 + Owner: Neutral + Location: 3,14 + Actor323: tc03 + Owner: Neutral + Location: 2,14 + Actor324: tc03 + Owner: Neutral + Location: 1,12 + Actor325: tc03 + Owner: Neutral + Location: 1,12 + Actor326: tc03 + Owner: Neutral + Location: 2,13 + Actor327: tc03 + Owner: Neutral + Location: 1,8 + Actor328: tc03 + Owner: Neutral + Location: 1,6 + Actor329: tc03 + Owner: Neutral + Location: 1,2 + Actor330: tc03 + Owner: Neutral + Location: 2,0 + Actor331: tc03 + Owner: Neutral + Location: 2,2 + Actor332: tc03 + Owner: Neutral + Location: 3,1 + Actor333: tc03 + Owner: Neutral + Location: 2,0 + Actor334: tc03 + Owner: Neutral + Location: 0,1 + Actor335: tc03 + Owner: Neutral + Location: 0,1 + Actor336: tc03 + Owner: Neutral + Location: 0,3 + Actor337: tc03 + Owner: Neutral + Location: 2,4 + Actor338: tc03 + Owner: Neutral + Location: 2,2 + Actor339: tc03 + Owner: Neutral + Location: 2,5 + Actor340: tc03 + Owner: Neutral + Location: 2,5 + Actor341: tc03 + Owner: Neutral + Location: 0,3 + Actor342: tc03 + Owner: Neutral + Location: 0,5 + Actor343: tc03 + Owner: Neutral + Location: 0,4 + Actor344: tc03 + Owner: Neutral + Location: 1,5 + Actor345: tc03 + Owner: Neutral + Location: 2,7 + Actor346: tc03 + Owner: Neutral + Location: 2,8 + Actor347: tc03 + Owner: Neutral + Location: 2,10 + Actor348: tc03 + Owner: Neutral + Location: 2,10 + Actor349: tc03 + Owner: Neutral + Location: 1,9 + Actor350: tc03 + Owner: Neutral + Location: 1,9 + Actor351: tc03 + Owner: Neutral + Location: 1,11 + Actor352: tc03 + Owner: Neutral + Location: 1,12 + Actor353: tc03 + Owner: Neutral + Location: 0,13 + Actor354: tc03 + Owner: Neutral + Location: 0,14 + Actor355: tc03 + Owner: Neutral + Location: 0,14 + Actor356: tc03 + Owner: Neutral + Location: 0,11 + Actor357: tc03 + Owner: Neutral + Location: 1,12 + Actor358: tc03 + Owner: Neutral + Location: 2,12 + Actor359: tc03 + Owner: Neutral + Location: 2,11 + Actor360: tc03 + Owner: Neutral + Location: 2,9 + Actor361: tc03 + Owner: Neutral + Location: 1,7 + Actor362: tc03 + Owner: Neutral + Location: 0,9 + Actor363: tc03 + Owner: Neutral + Location: 0,5 + Actor364: tc03 + Owner: Neutral + Location: 3,2 + Actor365: tc03 + Owner: Neutral + Location: 3,6 + Actor366: t08 + Owner: Neutral + Location: 4,10 + Actor367: t08 + Owner: Neutral + Location: 4,8 + Actor368: t08 + Owner: Neutral + Location: 4,12 + Actor369: t08 + Owner: Neutral + Location: 0,8 + Actor370: t08 + Owner: Neutral + Location: 0,7 + Actor371: t08 + Owner: Neutral + Location: 0,11 + Actor372: t08 + Owner: Neutral + Location: 0,13 + Actor373: t08 + Owner: Neutral + Location: 1,0 + Actor374: t08 + Owner: Neutral + Location: 0,0 + Actor375: t08 + Owner: Neutral + Location: 1,0 + Actor376: t08 + Owner: Neutral + Location: 1,0 + Actor377: t16 + Owner: Neutral + Location: 2,25 + Actor378: tc04 + Owner: Neutral + Location: 2,25 + Actor379: tc04 + Owner: Neutral + Location: 3,23 + Actor380: tc04 + Owner: Neutral + Location: 3,26 + Actor381: t15 + Owner: Neutral + Location: 3,24 + Actor382: t15 + Owner: Neutral + Location: 1,24 + Actor383: t15 + Owner: Neutral + Location: 3,26 + Actor384: t15 + Owner: Neutral + Location: 3,25 + Actor385: t10 + Owner: Neutral + Location: 3,27 + Actor386: t10 + Owner: Neutral + Location: 4,27 + Actor388: dog + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 9,43 + Actor389: dog + Owner: Neutral + Facing: 384 + Location: 9,43 + SubCell: 1 + Actor390: dog + Owner: Neutral + Facing: 384 + Location: 5,44 + SubCell: 3 + Actor391: dog + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 6,43 + Actor392: dog + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 4,43 + Actor393: dog + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 2,43 + Actor394: dog + Owner: Neutral + Facing: 384 + Location: 2,44 + SubCell: 3 + Actor395: c2 + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 13,43 + Actor396: c5 + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 12,43 + Actor397: c1 + Owner: Neutral + Facing: 384 + SubCell: 3 + Location: 9,44 + Actor398: c3 + Owner: Neutral + Facing: 384 + Location: 10,44 + SubCell: 3 + Actor399: c7 + Owner: Neutral + Facing: 384 + Location: 4,44 + SubCell: 3 + Actor400: c11 + Owner: Neutral + Facing: 384 + Location: 1,44 + Actor401: c8 + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 3,44 + Actor402: c4 + Owner: Neutral + Facing: 384 + Location: 2,44 + SubCell: 1 + Actor403: c9 + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 3,45 + Actor404: wood + Owner: Neutral + Location: 16,43 + Actor405: dog + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 13,43 + Actor406: zombie + Owner: Creeps + Facing: 384 + SubCell: 3 + Location: 1,30 + Actor407: zombie + Owner: Creeps + Facing: 384 + SubCell: 3 + Location: 2,31 + Actor408: zombie + Owner: Creeps + Facing: 384 + SubCell: 3 + Location: 4,30 + Actor409: zombie + Owner: Creeps + Facing: 384 + SubCell: 3 + Location: 4,32 + Actor410: zombie + Owner: Creeps + Facing: 384 + Location: 4,32 + SubCell: 1 + Actor411: zombie + Owner: Creeps + Facing: 384 + Location: 2,31 + SubCell: 1 + Actor426: e4 + Owner: Creeps + Facing: 384 + Location: 10,24 + SubCell: 1 + Actor440: cycl + Owner: Creeps + Location: 25,33 + Actor441: cycl + Owner: Creeps + Location: 24,33 + Actor442: cycl + Owner: Creeps + Location: 24,20 + Actor443: cycl + Owner: Creeps + Location: 25,20 + Actor444: cycl + Owner: Creeps + Location: 6,23 + Actor445: cycl + Owner: Creeps + Location: 6,22 + Actor449: medi + Owner: Creeps + Facing: 384 + SubCell: 1 + Location: 31,30 + Actor451: fenc + Owner: Neutral + Location: 33,23 + Actor452: fenc + Owner: Neutral + Location: 33,24 + Actor453: fenc + Owner: Neutral + Location: 33,22 + Actor454: fenc + Owner: Neutral + Location: 33,21 + Actor470: gun + Owner: Creeps + Location: 23,20 + Actor471: gun + Owner: Creeps + Location: 26,20 + TurretFacing: 192 + Actor474: agun + Owner: Creeps + Location: 26,32 + Actor475: agun + Owner: Creeps + Location: 26,22 + Actor477: agun + Owner: Creeps + Location: 7,31 + Actor478: agun + Owner: Creeps + Location: 8,22 + Actor479: apwr + Owner: Creeps + Location: 8,24 + Actor480: apwr + Owner: Creeps + Location: 8,26 + Actor485: mslo + Owner: Creeps + Location: 26,30 + Actor492: gnrl + Owner: Creeps + Facing: 384 + SubCell: 1 + Location: 30,24 + Actor493: e6 + Owner: Creeps + SubCell: 1 + Facing: 384 + Location: 27,28 + Actor496: e3r1 + Owner: Creeps + Facing: 384 + SubCell: 1 + Location: 27,29 + Actor507: dog + Owner: Creeps + Facing: 384 + SubCell: 1 + Location: 22,20 + Actor517: medi + Owner: Creeps + Facing: 384 + Location: 6,23 + SubCell: 2 + Actor518: medi + Owner: Creeps + Facing: 384 + SubCell: 1 + Location: 25,33 + Actor519: medi + Owner: Creeps + Facing: 384 + Location: 25,21 + SubCell: 3 + Actor520: thf + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 3,27 + Actor541: chan + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 2,21 + Actor542: c10 + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 4,22 + Actor543: e6 + Owner: Neutral + Facing: 384 + SubCell: 1 + Location: 4,21 + Actor551: mpspawn + Owner: Neutral + Location: 55,66 + Actor552: mpspawn + Owner: Neutral + Location: 55,65 + Actor553: mpspawn + Owner: Neutral + Location: 55,64 + Actor554: mpspawn + Owner: Neutral + Location: 55,63 + Actor555: mpspawn + Owner: Neutral + Location: 55,62 + Actor556: mpspawn + Owner: Neutral + Location: 55,61 + Actor557: mpspawn + Owner: Neutral + Location: 55,60 + Actor558: mpspawn + Owner: Neutral + Location: 55,59 + Actor559: mpspawn + Owner: Neutral + Location: 56,59 + Actor560: mpspawn + Owner: Neutral + Location: 57,59 + Actor561: mpspawn + Owner: Neutral + Location: 58,59 + Actor562: mpspawn + Owner: Neutral + Location: 59,59 + Actor563: mpspawn + Owner: Neutral + Location: 59,60 + Actor564: mpspawn + Owner: Neutral + Location: 59,61 + Actor565: mpspawn + Owner: Neutral + Location: 59,62 + Actor566: mpspawn + Owner: Neutral + Location: 59,63 + Actor567: mpspawn + Owner: Neutral + Location: 59,64 + Actor568: mpspawn + Owner: Neutral + Location: 59,65 + Actor569: mpspawn + Owner: Neutral + Location: 59,66 + Actor570: mpspawn + Owner: Neutral + Location: 58,66 + Actor571: mpspawn + Owner: Neutral + Location: 57,66 + Actor572: mpspawn + Owner: Neutral + Location: 56,66 + Actor573: dtrk + Owner: Creeps + Facing: 384 + Location: 58,65 + Actor574: dtrk + Owner: Creeps + Facing: 384 + Location: 57,65 + Actor575: dtrk + Owner: Creeps + Facing: 384 + Location: 56,65 + Actor576: dtrk + Owner: Creeps + Facing: 384 + Location: 56,64 + Actor577: dtrk + Owner: Creeps + Facing: 384 + Location: 57,64 + Actor578: dtrk + Owner: Creeps + Facing: 384 + Location: 58,64 + Actor579: dtrk + Owner: Creeps + Facing: 384 + Location: 58,63 + Actor580: dtrk + Owner: Creeps + Facing: 384 + Location: 57,63 + Actor581: dtrk + Owner: Creeps + Facing: 384 + Location: 56,63 + Actor582: dtrk + Owner: Creeps + Facing: 384 + Location: 56,62 + Actor583: dtrk + Owner: Creeps + Facing: 384 + Location: 57,62 + Actor584: dtrk + Owner: Creeps + Facing: 384 + Location: 58,62 + Actor585: dtrk + Owner: Creeps + Facing: 384 + Location: 58,61 + Actor586: dtrk + Owner: Creeps + Facing: 384 + Location: 57,61 + Actor587: dtrk + Owner: Creeps + Facing: 384 + Location: 56,61 + Actor588: dtrk + Owner: Creeps + Facing: 384 + Location: 56,60 + Actor589: dtrk + Owner: Creeps + Facing: 384 + Location: 57,60 + Actor590: dtrk + Owner: Creeps + Facing: 384 + Location: 58,60 + Actor591: dtrk + Owner: Creeps + Facing: 384 + Location: 60,67 + Actor592: dtrk + Owner: Creeps + Facing: 384 + Location: 62,67 + Actor593: dtrk + Owner: Creeps + Facing: 384 + Location: 62,66 + Actor594: dtrk + Owner: Creeps + Facing: 384 + Location: 62,65 + Actor595: dtrk + Owner: Creeps + Facing: 384 + Location: 62,64 + Actor596: dtrk + Owner: Creeps + Facing: 384 + Location: 62,63 + Actor597: dtrk + Owner: Creeps + Facing: 384 + Location: 62,62 + Actor598: dtrk + Owner: Creeps + Facing: 384 + Location: 62,61 + Actor599: dtrk + Owner: Creeps + Facing: 384 + Location: 62,60 + Actor600: dtrk + Owner: Creeps + Facing: 384 + Location: 62,59 + Actor601: dtrk + Owner: Creeps + Facing: 384 + Location: 62,58 + Actor602: dtrk + Owner: Creeps + Facing: 384 + Location: 62,57 + Actor603: dtrk + Owner: Creeps + Facing: 384 + Location: 61,57 + Actor604: dtrk + Owner: Creeps + Facing: 384 + Location: 60,57 + Actor605: dtrk + Owner: Creeps + Facing: 384 + Location: 59,57 + Actor606: dtrk + Owner: Creeps + Facing: 384 + Location: 58,57 + Actor607: dtrk + Owner: Creeps + Facing: 384 + Location: 57,57 + Actor608: dtrk + Owner: Creeps + Facing: 384 + Location: 56,57 + Actor609: dtrk + Owner: Creeps + Facing: 384 + Location: 55,57 + Actor610: dtrk + Owner: Creeps + Facing: 384 + Location: 54,57 + Actor611: dtrk + Owner: Creeps + Facing: 384 + Location: 53,57 + Actor612: dtrk + Owner: Creeps + Facing: 384 + Location: 53,58 + Actor613: dtrk + Owner: Creeps + Facing: 384 + Location: 53,59 + Actor614: dtrk + Owner: Creeps + Facing: 384 + Location: 53,59 + Actor615: dtrk + Owner: Creeps + Facing: 384 + Location: 53,60 + Actor616: dtrk + Owner: Creeps + Facing: 384 + Location: 53,61 + Actor617: dtrk + Owner: Creeps + Facing: 384 + Location: 53,62 + Actor618: dtrk + Owner: Creeps + Facing: 384 + Location: 53,63 + Actor619: dtrk + Owner: Creeps + Facing: 384 + Location: 53,64 + Actor620: dtrk + Owner: Creeps + Facing: 384 + Location: 53,65 + Actor621: dtrk + Owner: Creeps + Facing: 384 + Location: 53,66 + Actor622: dtrk + Owner: Creeps + Facing: 384 + Location: 53,67 + Actor623: dtrk + Owner: Creeps + Facing: 384 + Location: 53,67 + Actor624: dtrk + Owner: Creeps + Facing: 384 + Location: 54,67 + Actor625: dtrk + Owner: Creeps + Facing: 384 + Location: 55,67 + Actor626: dtrk + Owner: Creeps + Facing: 384 + Location: 56,67 + Actor627: dtrk + Owner: Creeps + Facing: 384 + Location: 57,67 + Actor628: dtrk + Owner: Creeps + Facing: 384 + Location: 58,67 + Actor629: dtrk + Owner: Creeps + Facing: 384 + Location: 59,67 + Actor630: dtrk + Owner: Creeps + Facing: 384 + Location: 61,67 + Actor631: dtrk + Owner: Creeps + Facing: 384 + Location: 61,66 + Actor632: dtrk + Owner: Creeps + Facing: 384 + Location: 61,65 + Actor633: dtrk + Owner: Creeps + Facing: 384 + Location: 60,66 + Actor634: dtrk + Owner: Creeps + Facing: 384 + Location: 60,65 + Actor635: dtrk + Owner: Creeps + Facing: 384 + Location: 61,64 + Actor636: dtrk + Owner: Creeps + Facing: 384 + Location: 61,63 + Actor637: dtrk + Owner: Creeps + Facing: 384 + Location: 66,65 + Actor638: dtrk + Owner: Creeps + Facing: 384 + Location: 67,66 + Actor639: dtrk + Owner: Creeps + Facing: 384 + Location: 67,60 + Actor640: dtrk + Owner: Creeps + Facing: 384 + Location: 66,56 + Actor641: dtrk + Owner: Creeps + Facing: 384 + Location: 64,53 + Actor642: dtrk + Owner: Creeps + Facing: 384 + Location: 58,53 + Actor643: dtrk + Owner: Creeps + Facing: 384 + Location: 57,53 + Actor644: dtrk + Owner: Creeps + Facing: 384 + Location: 52,53 + Actor645: dtrk + Owner: Creeps + Facing: 384 + Location: 47,58 + Actor646: dtrk + Owner: Creeps + Facing: 384 + Location: 48,63 + Actor647: dtrk + Owner: Creeps + Facing: 384 + Location: 50,67 + Actor648: dtrk + Owner: Creeps + Facing: 384 + Location: 48,66 + Actor649: dtrk + Owner: Creeps + Facing: 384 + Location: 45,66 + Actor650: dtrk + Owner: Creeps + Facing: 384 + Location: 41,65 + Actor651: dtrk + Owner: Creeps + Facing: 384 + Location: 43,60 + Actor652: dtrk + Owner: Creeps + Facing: 384 + Location: 42,56 + Actor653: dtrk + Owner: Creeps + Facing: 384 + Location: 47,52 + Actor654: dtrk + Owner: Creeps + Facing: 384 + Location: 50,50 + Actor655: dtrk + Owner: Creeps + Facing: 384 + Location: 54,50 + Actor656: dtrk + Owner: Creeps + Facing: 384 + Location: 55,51 + Actor657: dtrk + Owner: Creeps + Facing: 384 + Location: 62,50 + Actor658: dtrk + Owner: Creeps + Facing: 384 + Location: 68,52 + Actor659: dtrk + Owner: Creeps + Facing: 384 + Location: 68,56 + Actor660: dtrk + Owner: Creeps + Facing: 384 + Location: 69,62 + Actor661: dtrk + Owner: Creeps + Facing: 384 + Location: 68,66 + Actor662: dtrk + Owner: Creeps + Facing: 384 + Location: 37,65 + Actor663: dtrk + Owner: Creeps + Facing: 384 + Location: 41,64 + Actor664: dtrk + Owner: Creeps + Facing: 384 + Location: 44,59 + Actor665: dtrk + Owner: Creeps + Facing: 384 + Location: 48,55 + Actor666: dtrk + Owner: Creeps + Facing: 384 + Location: 43,57 + Actor667: dtrk + Owner: Creeps + Facing: 384 + Location: 41,63 + Actor668: dtrk + Owner: Creeps + Facing: 384 + Location: 40,63 + Actor669: dtrk + Owner: Creeps + Facing: 384 + Location: 60,50 + Actor670: dtrk + Owner: Creeps + Facing: 384 + Location: 63,50 + Actor671: dtrk + Owner: Creeps + Facing: 384 + Location: 65,52 + Actor672: dtrk + Owner: Creeps + Facing: 384 + Location: 67,59 + Actor673: dtrk + Owner: Creeps + Facing: 384 + Location: 67,63 + Actor160: bio + Owner: Neutral + Location: 2,21 + Actor674: cycl + Owner: Neutral + Location: 2,22 + Actor675: cycl + Owner: Neutral + Location: 1,22 + Actor676: 4tnk + Owner: Multi0 + Facing: 384 + Location: 25,27 + Actor677: 3tnk + Owner: Multi1 + Facing: 384 + Location: 1,23 + Actor678: arty + Owner: Multi10 + Facing: 384 + Location: 67,2 + Actor679: ftrk + Facing: 384 + Owner: Multi11 + Location: 2,68 + Actor680: ttnk + Facing: 384 + Owner: Multi12 + Location: 55,26 + Actor681: jeep + Owner: Multi13 + Facing: 384 + Location: 69,40 + Actor682: v2rl + Facing: 384 + Owner: Multi14 + Location: 1,40 + Actor683: 1tnk + Facing: 384 + Owner: Multi15 + Location: 52,39 + Actor684: 2tnk + Facing: 384 + Owner: Multi16 + Location: 44,11 + Actor685: apc + Facing: 384 + Owner: Multi17 + Location: 22,5 + Actor686: jeep + Facing: 384 + Owner: Multi18 + Location: 5,2 + Actor687: stnk + Owner: Multi18 + Location: 15,31 + Facing: 384 + Actor688: v2rl + Owner: Multi19 + Facing: 384 + Location: 32,54 + Actor689: ctnk + Owner: Multi2 + Facing: 384 + Location: 17,57 + Actor690: 3tnk + Owner: Multi20 + Facing: 384 + Location: 29,31 + Actor691: 3tnk + Facing: 384 + Owner: Multi21 + Location: 29,30 + Actor692: 3tnk + Facing: 384 + Owner: Multi3 + Location: 29,29 + Actor693: 3tnk + Facing: 384 + Owner: Multi5 + Location: 29,28 + Actor694: 3tnk + Facing: 384 + Owner: Multi6 + Location: 29,27 + Actor695: 3tnk + Facing: 384 + Owner: Multi7 + Location: 29,26 + Actor696: 3tnk + Facing: 384 + Owner: Multi8 + Location: 29,25 + Actor697: 3tnk + Facing: 384 + Owner: Multi9 + Location: 29,24 diff --git a/assets/map/d09.jun b/assets/map/d09.jun new file mode 100644 index 00000000..58272402 Binary files /dev/null and b/assets/map/d09.jun differ diff --git a/assets/map/green-belt/map.bin b/assets/map/green-belt/map.bin new file mode 100644 index 00000000..778640bf Binary files /dev/null and b/assets/map/green-belt/map.bin differ diff --git a/assets/map/green-belt/map.png b/assets/map/green-belt/map.png new file mode 100644 index 00000000..84f6d6fe Binary files /dev/null and b/assets/map/green-belt/map.png differ diff --git a/assets/map/green-belt/map.yaml b/assets/map/green-belt/map.yaml new file mode 100644 index 00000000..3da7cf04 --- /dev/null +++ b/assets/map/green-belt/map.yaml @@ -0,0 +1,1979 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: Green Belt + +Author: Christian + +Tileset: TEMPERAT + +MapSize: 98,98 + +Bounds: 1,1,96,96 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor0: t10 + Owner: Neutral + Location: 0,36 + Actor1: t10 + Owner: Neutral + Location: 3,36 + Actor2: t10 + Owner: Neutral + Location: 7,35 + Actor3: t06 + Owner: Neutral + Location: 0,36 + Actor4: t06 + Owner: Neutral + Location: 5,36 + Actor5: t06 + Owner: Neutral + Location: 9,34 + Actor6: t12 + Owner: Neutral + Location: 9,35 + Actor7: t12 + Owner: Neutral + Location: 2,36 + Actor8: t03 + Owner: Neutral + Location: 2,36 + Actor9: t03 + Owner: Neutral + Location: 4,35 + Actor10: t03 + Owner: Neutral + Location: 6,35 + Actor11: t03 + Owner: Neutral + Location: 8,34 + Actor12: t08 + Owner: Neutral + Location: 8,36 + Actor13: t08 + Owner: Neutral + Location: 4,37 + Actor14: t16 + Owner: Neutral + Location: 7,36 + Actor15: t16 + Owner: Neutral + Location: 9,33 + Actor16: t01 + Owner: Neutral + Location: 10,34 + Actor17: v06 + Owner: Creeps + Location: 3,31 + Actor18: tc04 + Owner: Neutral + Location: 7,50 + Actor19: t11 + Owner: Neutral + Location: 9,50 + Actor20: t14 + Owner: Neutral + Location: 10,51 + Actor21: t08 + Owner: Neutral + Location: 10,51 + Actor22: t02 + Owner: Neutral + Location: 2,5 + Actor23: t03 + Owner: Neutral + Location: 3,3 + Actor24: t03 + Owner: Neutral + Location: 2,4 + Actor25: t12 + Owner: Neutral + Location: 3,6 + Actor26: t12 + Owner: Neutral + Location: 2,3 + Actor27: tc05 + Owner: Neutral + Location: 94,62 + Actor29: t17 + Owner: Neutral + Location: 95,64 + Actor31: t17 + Owner: Neutral + Location: 95,55 + Actor33: t17 + Owner: Neutral + Location: 93,54 + Actor34: t17 + Owner: Neutral + Location: 96,53 + Actor35: tc04 + Owner: Neutral + Location: 93,56 + Actor37: t16 + Owner: Neutral + Location: 94,65 + Actor38: t16 + Owner: Neutral + Location: 95,67 + Actor39: t16 + Owner: Neutral + Location: 96,69 + Actor40: t16 + Owner: Neutral + Location: 97,75 + Actor41: t16 + Owner: Neutral + Location: 96,71 + Actor42: t15 + Owner: Neutral + Location: 95,65 + Actor43: t15 + Owner: Neutral + Location: 96,68 + Actor44: t15 + Owner: Neutral + Location: 96,72 + Actor45: t15 + Owner: Neutral + Location: 93,66 + Actor46: t15 + Owner: Neutral + Location: 93,60 + Actor47: t15 + Owner: Neutral + Location: 94,54 + Actor48: t15 + Owner: Neutral + Location: 96,54 + Actor49: t15 + Owner: Neutral + Location: 91,53 + Actor50: t15 + Owner: Neutral + Location: 92,49 + Actor51: t15 + Owner: Neutral + Location: 95,49 + Actor52: t17 + Owner: Neutral + Location: 94,53 + Actor53: t17 + Owner: Neutral + Location: 96,63 + Actor55: t17 + Owner: Neutral + Location: 93,63 + Actor56: t17 + Owner: Neutral + Location: 97,67 + Actor57: t17 + Owner: Neutral + Location: 95,66 + Actor58: t02 + Owner: Neutral + Location: 96,55 + Actor60: t02 + Owner: Neutral + Location: 97,65 + Actor61: t02 + Owner: Neutral + Location: 93,64 + Actor62: t02 + Owner: Neutral + Location: 97,70 + Actor63: t02 + Owner: Neutral + Location: 97,73 + Actor64: t02 + Owner: Neutral + Location: 94,67 + Actor69: t02 + Owner: Neutral + Location: 96,66 + Actor71: t03 + Owner: Neutral + Location: 97,71 + Actor72: t03 + Owner: Neutral + Location: 96,67 + Actor73: t03 + Owner: Neutral + Location: 93,65 + Actor74: t03 + Owner: Neutral + Location: 97,62 + Actor77: t08 + Owner: Neutral + Location: 96,70 + Actor78: t08 + Owner: Neutral + Location: 97,64 + Actor79: t08 + Owner: Neutral + Location: 94,50 + Actor80: t06 + Owner: Neutral + Location: 91,49 + Actor81: t06 + Owner: Neutral + Location: 95,50 + Actor82: t06 + Owner: Neutral + Location: 97,49 + Actor83: t06 + Owner: Neutral + Location: 93,50 + Actor84: t06 + Owner: Neutral + Location: 97,66 + Actor85: t06 + Owner: Neutral + Location: 94,64 + Actor87: t06 + Owner: Neutral + Location: 94,55 + Actor88: t06 + Owner: Neutral + Location: 93,53 + Actor89: t06 + Owner: Neutral + Location: 95,53 + Actor90: t06 + Owner: Neutral + Location: 97,76 + Actor91: t03 + Owner: Neutral + Location: 47,0 + Actor92: t03 + Owner: Neutral + Location: 46,1 + Actor93: t03 + Owner: Neutral + Location: 47,-1 + Actor94: t03 + Owner: Neutral + Location: 47,5 + Actor95: t07 + Owner: Neutral + Location: 46,5 + Actor96: t07 + Owner: Neutral + Location: 47,1 + Actor97: t01 + Owner: Neutral + Location: 97,8 + Actor98: t11 + Owner: Neutral + Location: 96,8 + Actor99: t13 + Owner: Neutral + Location: 97,11 + Actor100: t13 + Owner: Neutral + Location: 97,21 + Actor101: t13 + Owner: Neutral + Location: 97,18 + Actor102: t13 + Owner: Neutral + Location: 97,14 + Actor103: t03 + Owner: Neutral + Location: 97,19 + Actor104: t03 + Owner: Neutral + Location: 97,16 + Actor105: t03 + Owner: Neutral + Location: 97,12 + Actor106: t03 + Owner: Neutral + Location: 97,9 + Actor107: t03 + Owner: Neutral + Location: 96,22 + Actor108: t11 + Owner: Neutral + Location: 96,14 + Actor109: t11 + Owner: Neutral + Location: 96,9 + Actor110: t11 + Owner: Neutral + Location: 96,23 + Actor124: t03 + Owner: Neutral + Location: 2,88 + Actor125: t12 + Owner: Neutral + Location: 3,89 + Actor127: t03 + Owner: Neutral + Location: 21,-1 + Actor128: t03 + Owner: Neutral + Location: 24,-1 + Actor129: t11 + Owner: Neutral + Location: 29,0 + Actor130: t11 + Owner: Neutral + Location: 36,1 + Actor131: t06 + Owner: Neutral + Location: 39,3 + Actor132: t06 + Owner: Neutral + Location: 40,2 + Actor133: t06 + Owner: Neutral + Location: 56,-1 + Actor134: t06 + Owner: Neutral + Location: 66,0 + Actor135: t06 + Owner: Neutral + Location: 72,2 + Actor136: t06 + Owner: Neutral + Location: 69,3 + Actor137: t02 + Owner: Neutral + Location: 64,2 + Actor138: t10 + Owner: Neutral + Location: 66,2 + Actor139: t10 + Owner: Neutral + Location: 61,-1 + Actor140: t12 + Owner: Neutral + Location: 83,1 + Actor141: t12 + Owner: Neutral + Location: 79,2 + Actor142: t12 + Owner: Neutral + Location: 75,2 + Actor143: t02 + Owner: Neutral + Location: 10,96 + Actor144: t02 + Owner: Neutral + Location: 12,95 + Actor145: t02 + Owner: Neutral + Location: 14,94 + Actor146: t02 + Owner: Neutral + Location: 16,94 + Actor147: t02 + Owner: Neutral + Location: 19,94 + Actor148: t02 + Owner: Neutral + Location: 22,93 + Actor149: t02 + Owner: Neutral + Location: 24,93 + Actor150: t02 + Owner: Neutral + Location: 26,92 + Actor152: t02 + Owner: Neutral + Location: 31,91 + Actor153: t02 + Owner: Neutral + Location: 33,90 + Actor154: t02 + Owner: Neutral + Location: 34,90 + Actor155: t02 + Owner: Neutral + Location: 35,90 + Actor156: t02 + Owner: Neutral + Location: 37,89 + Actor157: t02 + Owner: Neutral + Location: 42,89 + Actor158: t02 + Owner: Neutral + Location: 44,88 + Actor159: t02 + Owner: Neutral + Location: 47,88 + Actor160: t02 + Owner: Neutral + Location: 49,89 + Actor161: t02 + Owner: Neutral + Location: 52,89 + Actor162: t02 + Owner: Neutral + Location: 55,88 + Actor163: t02 + Owner: Neutral + Location: 58,88 + Actor164: t02 + Owner: Neutral + Location: 60,88 + Actor165: t02 + Owner: Neutral + Location: 63,88 + Actor166: t02 + Owner: Neutral + Location: 65,88 + Actor170: t02 + Owner: Neutral + Location: 74,91 + Actor171: t02 + Owner: Neutral + Location: 76,91 + Actor172: t02 + Owner: Neutral + Location: 78,91 + Actor173: t02 + Owner: Neutral + Location: 81,91 + Actor174: t02 + Owner: Neutral + Location: 82,92 + Actor181: t15 + Owner: Neutral + Location: 85,95 + Actor182: t15 + Owner: Neutral + Location: 78,93 + Actor183: t15 + Owner: Neutral + Location: 73,92 + Actor184: t15 + Owner: Neutral + Location: 68,92 + Actor185: t15 + Owner: Neutral + Location: 63,91 + Actor186: t15 + Owner: Neutral + Location: 59,90 + Actor187: t15 + Owner: Neutral + Location: 54,90 + Actor188: t15 + Owner: Neutral + Location: 53,91 + Actor189: t15 + Owner: Neutral + Location: 16,95 + Actor190: t15 + Owner: Neutral + Location: 23,95 + Actor191: t15 + Owner: Neutral + Location: 29,95 + Actor192: t15 + Owner: Neutral + Location: 33,94 + Actor193: t15 + Owner: Neutral + Location: 37,92 + Actor194: t15 + Owner: Neutral + Location: 42,91 + Actor198: t15 + Owner: Neutral + Location: 57,94 + Actor199: tc04 + Owner: Neutral + Location: 75,94 + Actor202: tc04 + Owner: Neutral + Location: 19,95 + Actor203: t14 + Owner: Neutral + Location: 14,96 + Actor204: t14 + Owner: Neutral + Location: 20,95 + Actor205: t14 + Owner: Neutral + Location: 26,95 + Actor206: t14 + Owner: Neutral + Location: 33,93 + Actor207: t14 + Owner: Neutral + Location: 38,92 + Actor211: t14 + Owner: Neutral + Location: 84,96 + Actor212: t14 + Owner: Neutral + Location: 76,94 + Actor213: t14 + Owner: Neutral + Location: 70,93 + Actor214: t14 + Owner: Neutral + Location: 66,91 + Actor215: t14 + Owner: Neutral + Location: 61,91 + Actor216: t14 + Owner: Neutral + Location: 56,93 + Actor219: t14 + Owner: Neutral + Location: 45,90 + Actor220: t14 + Owner: Neutral + Location: 46,90 + Actor221: t14 + Owner: Neutral + Location: 62,94 + Actor222: t14 + Owner: Neutral + Location: 67,94 + Actor223: t14 + Owner: Neutral + Location: 74,96 + Actor224: t14 + Owner: Neutral + Location: 79,95 + Actor225: t14 + Owner: Neutral + Location: 81,93 + Actor226: t14 + Owner: Neutral + Location: 82,94 + Actor227: t14 + Owner: Neutral + Location: 76,93 + Actor228: t14 + Owner: Neutral + Location: 63,90 + Actor229: t14 + Owner: Neutral + Location: 55,92 + Actor231: t01 + Owner: Neutral + Location: 85,95 + Actor232: t01 + Owner: Neutral + Location: 76,94 + Actor233: t01 + Owner: Neutral + Location: 72,95 + Actor234: t01 + Owner: Neutral + Location: 70,95 + Actor235: t01 + Owner: Neutral + Location: 64,94 + Actor236: t01 + Owner: Neutral + Location: 60,92 + Actor237: t01 + Owner: Neutral + Location: 57,91 + Actor238: t01 + Owner: Neutral + Location: 51,90 + Actor241: t01 + Owner: Neutral + Location: 58,94 + Actor242: t01 + Owner: Neutral + Location: 63,91 + Actor243: t01 + Owner: Neutral + Location: 65,91 + Actor244: t01 + Owner: Neutral + Location: 69,93 + Actor245: t01 + Owner: Neutral + Location: 72,91 + Actor247: t01 + Owner: Neutral + Location: 12,96 + Actor248: t01 + Owner: Neutral + Location: 15,95 + Actor249: t01 + Owner: Neutral + Location: 16,95 + Actor250: t01 + Owner: Neutral + Location: 20,96 + Actor251: t01 + Owner: Neutral + Location: 22,95 + Actor252: t01 + Owner: Neutral + Location: 25,94 + Actor253: t01 + Owner: Neutral + Location: 29,95 + Actor254: t01 + Owner: Neutral + Location: 31,93 + Actor255: t01 + Owner: Neutral + Location: 33,95 + Actor256: t01 + Owner: Neutral + Location: 36,95 + Actor261: tc03 + Owner: Neutral + Location: 28,94 + Actor262: tc03 + Owner: Neutral + Location: 72,94 + Actor263: tc03 + Owner: Neutral + Location: 64,93 + Actor264: tc03 + Owner: Neutral + Location: 57,92 + Actor267: tc02 + Owner: Neutral + Location: 33,92 + Actor268: tc02 + Owner: Neutral + Location: 25,96 + Actor269: tc02 + Owner: Neutral + Location: 31,96 + Actor270: tc02 + Owner: Neutral + Location: 81,96 + Actor271: tc02 + Owner: Neutral + Location: 72,92 + Actor272: tc02 + Owner: Neutral + Location: 64,91 + Actor273: tc02 + Owner: Neutral + Location: 60,92 + Actor276: t01 + Owner: Neutral + Location: 78,96 + Actor277: t01 + Owner: Neutral + Location: 82,96 + Actor278: t01 + Owner: Neutral + Location: 84,96 + Actor279: t01 + Owner: Neutral + Location: 85,96 + Actor280: t01 + Owner: Neutral + Location: 86,95 + Actor281: t01 + Owner: Neutral + Location: 86,95 + Actor282: t01 + Owner: Neutral + Location: 82,94 + Actor283: t01 + Owner: Neutral + Location: 80,94 + Actor284: t01 + Owner: Neutral + Location: 78,92 + Actor285: t01 + Owner: Neutral + Location: 73,92 + Actor286: t01 + Owner: Neutral + Location: 71,91 + Actor287: t01 + Owner: Neutral + Location: 69,91 + Actor288: t01 + Owner: Neutral + Location: 66,90 + Actor289: t01 + Owner: Neutral + Location: 64,94 + Actor290: t01 + Owner: Neutral + Location: 61,93 + Actor291: t01 + Owner: Neutral + Location: 58,88 + Actor292: t01 + Owner: Neutral + Location: 58,88 + Actor293: t01 + Owner: Neutral + Location: 58,92 + Actor294: t01 + Owner: Neutral + Location: 62,93 + Actor295: t01 + Owner: Neutral + Location: 62,93 + Actor296: t01 + Owner: Neutral + Location: 66,91 + Actor297: t01 + Owner: Neutral + Location: 67,93 + Actor298: t01 + Owner: Neutral + Location: 64,93 + Actor299: t01 + Owner: Neutral + Location: 59,93 + Actor300: t01 + Owner: Neutral + Location: 57,94 + Actor301: t01 + Owner: Neutral + Location: 57,89 + Actor302: t01 + Owner: Neutral + Location: 60,89 + Actor303: t01 + Owner: Neutral + Location: 63,89 + Actor304: t01 + Owner: Neutral + Location: 66,90 + Actor305: t01 + Owner: Neutral + Location: 17,96 + Actor306: t01 + Owner: Neutral + Location: 22,96 + Actor307: t01 + Owner: Neutral + Location: 29,96 + Actor308: t01 + Owner: Neutral + Location: 33,96 + Actor309: t01 + Owner: Neutral + Location: 34,96 + Actor310: t01 + Owner: Neutral + Location: 37,92 + Actor311: t01 + Owner: Neutral + Location: 42,92 + Actor313: t01 + Owner: Neutral + Location: 47,90 + Actor314: t01 + Owner: Neutral + Location: 42,90 + Actor315: t01 + Owner: Neutral + Location: 38,91 + Actor316: t01 + Owner: Neutral + Location: 36,91 + Actor317: t01 + Owner: Neutral + Location: 36,92 + Actor318: t01 + Owner: Neutral + Location: 31,94 + Actor319: t01 + Owner: Neutral + Location: 31,94 + Actor321: t01 + Owner: Neutral + Location: 42,91 + Actor322: t01 + Owner: Neutral + Location: 44,89 + Actor323: t01 + Owner: Neutral + Location: 45,89 + Actor325: t01 + Owner: Neutral + Location: 41,92 + Actor326: t01 + Owner: Neutral + Location: 38,91 + Actor327: t13 + Owner: Neutral + Location: 39,90 + Actor328: t13 + Owner: Neutral + Location: 41,92 + Actor330: t13 + Owner: Neutral + Location: 44,91 + Actor331: t13 + Owner: Neutral + Location: 41,92 + Actor332: t13 + Owner: Neutral + Location: 31,93 + Actor333: t13 + Owner: Neutral + Location: 30,94 + Actor334: t13 + Owner: Neutral + Location: 27,93 + Actor335: t13 + Owner: Neutral + Location: 24,94 + Actor336: t05 + Owner: Neutral + Location: 34,4 + Actor337: t05 + Owner: Neutral + Location: 37,6 + Actor338: t05 + Owner: Neutral + Location: 38,7 + Actor339: t05 + Owner: Neutral + Location: 45,7 + Actor340: t05 + Owner: Neutral + Location: 47,7 + Actor341: t05 + Owner: Neutral + Location: 50,8 + Actor342: t05 + Owner: Neutral + Location: 55,8 + Actor343: t05 + Owner: Neutral + Location: 58,7 + Actor344: t05 + Owner: Neutral + Location: 60,6 + Actor345: t05 + Owner: Neutral + Location: 63,6 + Actor346: t11 + Owner: Neutral + Location: 34,5 + Actor347: t11 + Owner: Neutral + Location: 39,6 + Actor348: t11 + Owner: Neutral + Location: 43,6 + Actor349: t11 + Owner: Neutral + Location: 46,6 + Actor350: t11 + Owner: Neutral + Location: 51,7 + Actor351: t11 + Owner: Neutral + Location: 54,7 + Actor352: t11 + Owner: Neutral + Location: 58,6 + Actor353: t11 + Owner: Neutral + Location: 59,6 + Actor354: t11 + Owner: Neutral + Location: 61,6 + Actor355: t03 + Owner: Neutral + Location: 48,8 + Actor356: t03 + Owner: Neutral + Location: 44,7 + Actor357: t03 + Owner: Neutral + Location: 42,7 + Actor358: t03 + Owner: Neutral + Location: 40,6 + Actor359: t03 + Owner: Neutral + Location: 57,8 + Actor360: t03 + Owner: Neutral + Location: 60,7 + Actor890: t02 + Owner: Neutral + Location: 8,38 + Actor891: t17 + Owner: Neutral + Location: 0,96 + Actor363: t03 + Owner: Neutral + Location: 66,6 + Actor364: t02 + Owner: Neutral + Location: 64,6 + Actor365: t02 + Owner: Neutral + Location: 66,6 + Actor367: t02 + Owner: Neutral + Location: 40,7 + Actor368: t02 + Owner: Neutral + Location: 42,5 + Actor369: t02 + Owner: Neutral + Location: 47,8 + Actor370: t02 + Owner: Neutral + Location: 52,8 + Actor371: t02 + Owner: Neutral + Location: 55,7 + Actor372: t02 + Owner: Neutral + Location: 57,8 + Actor373: t03 + Owner: Neutral + Location: 51,3 + Actor374: t03 + Owner: Neutral + Location: 58,3 + Actor375: t11 + Owner: Neutral + Location: 53,3 + Actor376: t11 + Owner: Neutral + Location: 56,3 + Actor377: t11 + Owner: Neutral + Location: 58,-1 + Actor378: t01 + Owner: Neutral + Location: 25,2 + Actor379: t01 + Owner: Neutral + Location: 27,3 + Actor380: t01 + Owner: Neutral + Location: 31,4 + Actor381: t10 + Owner: Neutral + Location: 87,-1 + Actor382: t10 + Owner: Neutral + Location: 87,1 + Actor383: t10 + Owner: Neutral + Location: 20,2 + Actor384: t10 + Owner: Neutral + Location: 28,3 + Actor385: t12 + Owner: Neutral + Location: 58,90 + Actor386: t12 + Owner: Neutral + Location: 67,90 + Actor387: t12 + Owner: Neutral + Location: 76,92 + Actor388: t12 + Owner: Neutral + Location: 80,92 + Actor389: t12 + Owner: Neutral + Location: 39,91 + Actor390: t12 + Owner: Neutral + Location: 26,93 + Actor391: t12 + Owner: Neutral + Location: 21,94 + Actor392: t12 + Owner: Neutral + Location: 17,95 + Actor393: t12 + Owner: Neutral + Location: 13,96 + Actor394: t01 + Owner: Neutral + Location: 13,95 + Actor395: t01 + Owner: Neutral + Location: 20,96 + Actor396: t01 + Owner: Neutral + Location: 27,96 + Actor397: t01 + Owner: Neutral + Location: 33,96 + Actor398: t01 + Owner: Neutral + Location: 35,96 + Actor399: t01 + Owner: Neutral + Location: 36,96 + Actor400: t01 + Owner: Neutral + Location: 34,94 + Actor401: t01 + Owner: Neutral + Location: 34,93 + Actor402: t01 + Owner: Neutral + Location: 39,91 + Actor406: t01 + Owner: Neutral + Location: 54,91 + Actor407: t01 + Owner: Neutral + Location: 54,92 + Actor409: t01 + Owner: Neutral + Location: 80,93 + Actor410: t01 + Owner: Neutral + Location: 83,93 + Actor411: t01 + Owner: Neutral + Location: 85,95 + Actor412: t01 + Owner: Neutral + Location: 87,96 + Actor413: t01 + Owner: Neutral + Location: 87,96 + Actor414: t01 + Owner: Neutral + Location: 82,94 + Actor415: t01 + Owner: Neutral + Location: 74,93 + Actor416: t01 + Owner: Neutral + Location: 69,92 + Actor417: t01 + Owner: Neutral + Location: 68,90 + Actor418: t01 + Owner: Neutral + Location: 68,89 + Actor419: t01 + Owner: Neutral + Location: 65,89 + Actor420: t01 + Owner: Neutral + Location: 57,89 + Actor421: t01 + Owner: Neutral + Location: 54,90 + Actor424: t01 + Owner: Neutral + Location: 58,93 + Actor425: t01 + Owner: Neutral + Location: 60,94 + Actor426: t01 + Owner: Neutral + Location: 64,93 + Actor427: t01 + Owner: Neutral + Location: 69,93 + Actor428: t01 + Owner: Neutral + Location: 71,94 + Actor429: t14 + Owner: Neutral + Location: 93,27 + Actor430: t14 + Owner: Neutral + Location: 95,36 + Actor431: t14 + Owner: Neutral + Location: 92,41 + Actor432: t08 + Owner: Neutral + Location: 96,36 + Actor433: t08 + Owner: Neutral + Location: 94,26 + Actor434: t08 + Owner: Neutral + Location: 94,45 + Actor435: t11 + Owner: Neutral + Location: 95,79 + Actor436: t01 + Owner: Neutral + Location: 74,5 + Actor438: t01 + Owner: Neutral + Location: 84,4 + Actor439: t01 + Owner: Neutral + Location: 87,0 + Actor440: t01 + Owner: Neutral + Location: 88,-1 + Actor441: t01 + Owner: Neutral + Location: 85,1 + Actor442: t01 + Owner: Neutral + Location: 16,0 + Actor443: t17 + Owner: Neutral + Location: 10,-1 + Actor445: v10 + Owner: Neutral + Location: 1,49 + Actor446: v09 + Owner: Neutral + Location: 1,43 + Actor447: t01 + Owner: Neutral + Location: 78,95 + Actor448: tc02 + Owner: Neutral + Location: 79,96 + Actor449: tc02 + Owner: Neutral + Location: 70,92 + Actor450: tc02 + Owner: Neutral + Location: 67,92 + Actor451: tc02 + Owner: Neutral + Location: 40,91 + Actor452: tc02 + Owner: Neutral + Location: 26,94 + Actor453: tc02 + Owner: Neutral + Location: 17,96 + Actor454: tc02 + Owner: Neutral + Location: 23,96 + Actor460: t17 + Owner: Neutral + Location: 32,93 + Actor461: t17 + Owner: Neutral + Location: 31,93 + Actor462: t17 + Owner: Neutral + Location: 32,94 + Actor463: t17 + Owner: Neutral + Location: 47,89 + Actor464: t17 + Owner: Neutral + Location: 65,93 + Actor465: t17 + Owner: Neutral + Location: 74,94 + Actor466: t17 + Owner: Neutral + Location: 76,96 + Actor468: tc05 + Owner: Neutral + Location: 0,24 + Actor469: tc02 + Owner: Neutral + Location: 0,22 + Actor475: t06 + Owner: Neutral + Location: 0,21 + Actor476: t06 + Owner: Neutral + Location: 0,22 + Actor477: t06 + Owner: Neutral + Location: 0,23 + Actor478: t06 + Owner: Neutral + Location: 0,26 + Actor479: t06 + Owner: Neutral + Location: 0,29 + Actor483: t06 + Owner: Neutral + Location: 2,23 + Actor489: t06 + Owner: Neutral + Location: 0,18 + Actor490: t06 + Owner: Neutral + Location: 0,18 + Actor492: t06 + Owner: Neutral + Location: 2,13 + Actor493: t06 + Owner: Neutral + Location: 0,10 + Actor496: t06 + Owner: Neutral + Location: 0,10 + Actor497: t06 + Owner: Neutral + Location: 1,11 + Actor500: t06 + Owner: Neutral + Location: 1,12 + Actor502: t11 + Owner: Neutral + Location: 1,11 + Actor503: t11 + Owner: Neutral + Location: 1,12 + Actor507: t11 + Owner: Neutral + Location: 0,17 + Actor508: t11 + Owner: Neutral + Location: 0,20 + Actor510: t11 + Owner: Neutral + Location: 0,16 + Actor511: t11 + Owner: Neutral + Location: 0,19 + Actor512: t11 + Owner: Neutral + Location: 1,21 + Actor513: t11 + Owner: Neutral + Location: 2,22 + Actor514: t11 + Owner: Neutral + Location: 2,23 + Actor515: t11 + Owner: Neutral + Location: 1,25 + Actor516: t11 + Owner: Neutral + Location: 0,23 + Actor517: t11 + Owner: Neutral + Location: 1,23 + Actor518: t11 + Owner: Neutral + Location: 0,29 + Actor524: t07 + Owner: Neutral + Location: 3,21 + Actor528: t07 + Owner: Neutral + Location: 3,14 + Actor529: t07 + Owner: Neutral + Location: 3,13 + Actor530: t07 + Owner: Neutral + Location: 2,11 + Actor531: t07 + Owner: Neutral + Location: 1,10 + Actor532: t07 + Owner: Neutral + Location: 0,9 + Actor533: tc02 + Owner: Neutral + Location: 6,66 + Actor534: t16 + Owner: Neutral + Location: 3,60 + Actor535: t16 + Owner: Neutral + Location: 1,56 + Actor536: t16 + Owner: Neutral + Location: 4,44 + Actor537: t07 + Owner: Neutral + Location: 4,54 + Actor539: t15 + Owner: Neutral + Location: 71,5 + Actor541: t17 + Owner: Neutral + Location: 85,4 + Actor545: tc02 + Owner: Neutral + Location: 86,4 + Actor546: lhus + Owner: Neutral + Location: 2,34 + Actor893: boxes02 + Owner: Neutral + Location: 95,39 + Actor794: tc02 + Owner: Neutral + Location: 86,44 + Actor795: t15 + Owner: Neutral + Location: 89,19 + Actor796: t15 + Owner: Neutral + Location: 94,2 + Actor797: t15 + Owner: Neutral + Location: 86,31 + Actor798: t07 + Owner: Neutral + Location: 88,23 + Actor799: t07 + Owner: Neutral + Location: 87,32 + Actor800: t07 + Owner: Neutral + Location: 88,61 + Actor801: t07 + Owner: Neutral + Location: 89,70 + Actor802: t07 + Owner: Neutral + Location: 91,81 + Actor804: t14 + Owner: Neutral + Location: 94,96 + Actor805: t14 + Owner: Neutral + Location: 92,84 + Actor806: t14 + Owner: Neutral + Location: 86,56 + Actor807: t14 + Owner: Neutral + Location: 87,34 + Actor808: t14 + Owner: Neutral + Location: 91,11 + Actor809: t14 + Owner: Neutral + Location: 94,-1 + Actor810: t14 + Owner: Neutral + Location: 2,96 + Actor811: t14 + Owner: Neutral + Location: 8,73 + Actor817: rushouse + Owner: Neutral + Location: 2,6 + Actor826: t12 + Owner: Neutral + Location: 59,94 + Actor827: t12 + Owner: Neutral + Location: 59,91 + Actor828: t12 + Owner: Neutral + Location: 59,92 + Actor829: t12 + Owner: Neutral + Location: 60,93 + Actor830: t12 + Owner: Neutral + Location: 60,93 + Actor831: t12 + Owner: Neutral + Location: 61,94 + Actor832: t12 + Owner: Neutral + Location: 35,94 + Actor833: t12 + Owner: Neutral + Location: 34,92 + Actor834: t12 + Owner: Neutral + Location: 35,92 + Actor836: t10 + Owner: Neutral + Location: 3,86 + Actor837: t10 + Owner: Neutral + Location: 4,78 + Actor838: t02 + Owner: Neutral + Location: 0,59 + Actor848: t03 + Owner: Neutral + Location: 0,0 + Actor849: t01 + Owner: Neutral + Location: 0,1 + Actor853: t06 + Owner: Neutral + Location: 1,95 + Actor854: t06 + Owner: Neutral + Location: 1,-1 + Actor855: t06 + Owner: Neutral + Location: 14,-1 + Actor856: t05 + Owner: Neutral + Location: 39,0 + Actor857: t05 + Owner: Neutral + Location: 43,-1 + Actor858: t03 + Owner: Neutral + Location: 44,-1 + Actor859: t03 + Owner: Neutral + Location: 42,2 + Actor860: t03 + Owner: Neutral + Location: 36,-1 + Actor870: t01 + Owner: Neutral + Location: 73,2 + Actor871: t01 + Owner: Neutral + Location: 78,-1 + Actor872: t01 + Owner: Neutral + Location: 10,51 + Actor873: t01 + Owner: Neutral + Location: 50,0 + Actor874: t15 + Owner: Neutral + Location: 49,1 + Actor875: t15 + Owner: Neutral + Location: 55,0 + Actor587: t10 + Owner: Neutral + Location: 52,41 + Actor588: t15 + Owner: Neutral + Location: 53,42 + Actor589: t11 + Owner: Neutral + Location: 52,51 + Actor594: oilb + Owner: Neutral + Location: 57,42 + Actor592: cycl + Owner: Neutral + Location: 56,42 + Actor595: cycl + Owner: Neutral + Location: 56,43 + Actor596: cycl + Owner: Neutral + Location: 56,44 + Actor597: cycl + Owner: Neutral + Location: 57,44 + Actor598: cycl + Owner: Neutral + Location: 58,44 + Actor599: cycl + Owner: Neutral + Location: 59,44 + Actor600: cycl + Owner: Neutral + Location: 59,43 + Actor601: cycl + Owner: Neutral + Location: 59,42 + Actor603: cycl + Owner: Neutral + Location: 38,55 + Actor604: cycl + Owner: Neutral + Location: 38,54 + Actor606: cycl + Owner: Neutral + Location: 38,53 + Actor607: cycl + Owner: Neutral + Location: 39,53 + Actor608: cycl + Owner: Neutral + Location: 40,53 + Actor609: cycl + Owner: Neutral + Location: 40,53 + Actor610: cycl + Owner: Neutral + Location: 41,53 + Actor611: cycl + Owner: Neutral + Location: 41,54 + Actor612: cycl + Owner: Neutral + Location: 41,55 + Actor614: oilb + Owner: Neutral + Location: 39,54 + Actor615: t11 + Owner: Neutral + Location: 6,31 + Actor617: t12 + Owner: Neutral + Location: 6,33 + Actor621: tc01 + Owner: Neutral + Location: 4,33 + Actor602: t06 + Owner: Neutral + Location: 92,14 + Actor623: t15 + Owner: Neutral + Location: 90,18 + Actor624: tc01 + Owner: Neutral + Location: 91,16 + Actor625: t10 + Owner: Neutral + Location: 91,12 + Actor626: t10 + Owner: Neutral + Location: 91,14 + Actor627: t11 + Owner: Neutral + Location: 57,47 + Actor628: t06 + Owner: Neutral + Location: 53,47 + Actor629: t06 + Owner: Neutral + Location: 52,44 + Actor630: t06 + Owner: Neutral + Location: 56,47 + Actor631: tc03 + Owner: Neutral + Location: 52,43 + Actor632: t17 + Owner: Neutral + Location: 53,48 + Actor633: t16 + Owner: Neutral + Location: 94,89 + Actor634: t15 + Owner: Neutral + Location: 94,88 + Actor635: t16 + Owner: Neutral + Location: 53,9 + Actor637: t16 + Owner: Neutral + Location: 53,7 + Actor639: t11 + Owner: Neutral + Location: 44,8 + Actor642: t11 + Owner: Neutral + Location: 49,7 + Actor643: t11 + Owner: Neutral + Location: 69,6 + Actor646: t12 + Owner: Neutral + Location: 53,8 + Actor647: t12 + Owner: Neutral + Location: 44,2 + Actor652: tc01 + Owner: Neutral + Location: 6,70 + Actor653: t11 + Owner: Neutral + Location: 5,71 + Actor654: t11 + Owner: Neutral + Location: 7,68 + Actor655: t16 + Owner: Neutral + Location: 6,68 + Actor656: t16 + Owner: Neutral + Location: 7,60 + Actor658: oilb + Owner: Neutral + Location: 57,22 + Actor659: oilb + Owner: Neutral + Location: 39,74 + Actor657: cycl + Owner: Neutral + Location: 57,21 + Actor660: cycl + Owner: Neutral + Location: 58,21 + Actor661: cycl + Owner: Neutral + Location: 59,21 + Actor662: cycl + Owner: Neutral + Location: 59,23 + Actor663: cycl + Owner: Neutral + Location: 59,22 + Actor664: cycl + Owner: Neutral + Location: 59,24 + Actor665: cycl + Owner: Neutral + Location: 58,24 + Actor666: cycl + Owner: Neutral + Location: 57,24 + Actor667: cycl + Owner: Neutral + Location: 40,73 + Actor668: cycl + Owner: Neutral + Location: 39,73 + Actor669: cycl + Owner: Neutral + Location: 38,73 + Actor670: cycl + Owner: Neutral + Location: 38,74 + Actor671: cycl + Owner: Neutral + Location: 38,75 + Actor672: cycl + Owner: Neutral + Location: 38,76 + Actor673: cycl + Owner: Neutral + Location: 39,76 + Actor674: cycl + Owner: Neutral + Location: 40,76 + Actor675: windmill + Owner: Neutral + Location: 7,3 + Actor676: asianhut + Owner: Neutral + Location: 90,94 + Actor677: v11 + Owner: Neutral + Location: 9,88 + Actor678: asianhut + Owner: Neutral + Location: 52,74 + Actor679: v06 + Owner: Neutral + Location: 18,47 + Actor680: v07 + Owner: Neutral + Location: 21,13 + Actor681: v08 + Owner: Neutral + Location: 31,13 + Actor682: v11 + Owner: Neutral + Location: 48,19 + Actor683: v10 + Owner: Neutral + Location: 55,19 + Actor684: v05 + Owner: Neutral + Location: 79,27 + Actor685: v04 + Owner: Neutral + Location: 79,34 + Actor686: t03 + Owner: Neutral + Location: 47,71 + Actor687: tc01 + Owner: Neutral + Location: 48,70 + Actor688: t16 + Owner: Neutral + Location: 48,72 + Actor689: t10 + Owner: Neutral + Location: 44,69 + Actor690: t10 + Owner: Neutral + Location: 43,20 + Actor691: tc01 + Owner: Neutral + Location: 46,20 + Actor692: t15 + Owner: Neutral + Location: 46,21 + Actor693: t16 + Owner: Neutral + Location: 43,21 + Actor694: t15 + Owner: Neutral + Location: 43,18 + Actor695: t17 + Owner: Neutral + Location: 44,21 + Actor696: rushouse + Owner: Neutral + Location: 80,81 + Actor697: asianhut + Owner: Neutral + Location: 19,58 + Actor698: v01 + Owner: Neutral + Location: 65,82 + Actor699: t11 + Owner: Neutral + Location: 79,52 + Actor700: t13 + Owner: Neutral + Location: 63,13 + Actor701: t16 + Owner: Neutral + Location: 25,8 + Actor702: t16 + Owner: Neutral + Location: 34,24 + Actor703: t15 + Owner: Neutral + Location: 14,40 + Actor704: t12 + Owner: Neutral + Location: 14,62 + Actor705: t01 + Owner: Neutral + Location: 56,81 + Actor706: t01 + Owner: Neutral + Location: 31,84 + Actor707: t01 + Owner: Neutral + Location: 6,91 + Actor708: t01 + Owner: Neutral + Location: 91,2 + Actor709: t14 + Owner: Neutral + Location: 24,52 + Actor710: v09 + Owner: Neutral + Location: 69,43 + Actor711: t03 + Owner: Neutral + Location: 93,29 + Actor712: t02 + Owner: Neutral + Location: 93,31 + Actor713: t01 + Owner: Neutral + Location: 93,32 + Actor714: t01 + Owner: Neutral + Location: 94,37 + Actor715: t01 + Owner: Neutral + Location: 94,41 + Actor716: t01 + Owner: Neutral + Location: 95,33 + Actor717: t07 + Owner: Neutral + Location: 93,40 + Actor718: t07 + Owner: Neutral + Location: 93,33 + Actor719: t07 + Owner: Neutral + Location: 95,25 + Actor720: t07 + Owner: Neutral + Location: 94,43 + Actor721: t10 + Owner: Neutral + Location: 93,39 + Actor722: t10 + Owner: Neutral + Location: 93,28 + Actor723: t10 + Owner: Neutral + Location: 93,42 + Actor724: t10 + Owner: Neutral + Location: 95,35 + Actor725: t06 + Owner: Neutral + Location: 28,92 + Actor726: t10 + Owner: Neutral + Location: 29,92 + Actor727: t10 + Owner: Neutral + Location: 31,91 + Actor728: t10 + Owner: Neutral + Location: 54,92 + Actor729: t01.husk + Owner: Neutral + Location: 45,5 + Actor730: t01.husk + Owner: Neutral + Location: 45,6 + Actor731: t10 + Owner: Neutral + Location: 36,96 + Actor732: t05 + Owner: Neutral + Location: 37,95 + Actor733: t05 + Owner: Neutral + Location: 39,93 + Actor734: t05 + Owner: Neutral + Location: 37,93 + Actor735: t01 + Owner: Neutral + Location: 52,91 + Actor736: t01 + Owner: Neutral + Location: 49,90 + Actor737: t01 + Owner: Neutral + Location: 36,94 + Actor738: t01 + Owner: Neutral + Location: 36,93 + Actor739: t01 + Owner: Neutral + Location: 37,94 + Actor740: t01 + Owner: Neutral + Location: 44,91 + Actor741: t01 + Owner: Neutral + Location: 42,92 + Actor742: t01 + Owner: Neutral + Location: 43,92 + Actor743: t01 + Owner: Neutral + Location: 50,90 + Actor744: t01 + Owner: Neutral + Location: 50,89 + Actor745: t03 + Owner: Neutral + Location: 52,90 + Actor746: t03 + Owner: Neutral + Location: 54,89 + Actor747: t03 + Owner: Neutral + Location: 56,89 + Actor748: t03 + Owner: Neutral + Location: 43,90 + Actor749: t07 + Owner: Neutral + Location: 49,93 + Actor750: t07 + Owner: Neutral + Location: 41,95 + Actor751: t07 + Owner: Neutral + Location: 55,96 + Actor752: t10 + Owner: Neutral + Location: 52,95 + Actor753: t10 + Owner: Neutral + Location: 47,93 + Actor754: t10 + Owner: Neutral + Location: 43,95 + Actor755: t02 + Owner: Neutral + Location: 45,94 + Actor756: t02 + Owner: Neutral + Location: 51,93 + Actor757: t10 + Owner: Neutral + Location: 7,44 + Actor758: t10 + Owner: Neutral + Location: 6,39 + Actor759: t10 + Owner: Neutral + Location: 5,27 + Actor760: v14 + Owner: Neutral + Location: 19,49 + Actor645: tc05 + Owner: Neutral + Location: 85,42 + Actor763: mpspawn + Owner: Neutral + Location: 26,34 + Actor764: mpspawn + Owner: Neutral + Location: 69,63 + Actor636: mine + Owner: Neutral + Location: 21,89 + Actor638: mine + Owner: Neutral + Location: 33,65 + Actor640: mine + Owner: Neutral + Location: 38,40 + Actor641: mine + Owner: Neutral + Location: 57,57 + Actor644: mine + Owner: Neutral + Location: 62,32 + Actor648: mine + Owner: Neutral + Location: 77,11 + Actor649: mine + Owner: Neutral + Location: 83,70 + Actor650: mine + Owner: Neutral + Location: 80,70 + Actor651: mine + Owner: Neutral + Location: 14,26 + Actor761: mine + Owner: Neutral + Location: 14,29 diff --git a/assets/map/img.png b/assets/map/img.png new file mode 100644 index 00000000..e1e5fde2 Binary files /dev/null and b/assets/map/img.png differ diff --git a/assets/map/ore/map.bin b/assets/map/ore/map.bin new file mode 100644 index 00000000..fa3ab6c4 Binary files /dev/null and b/assets/map/ore/map.bin differ diff --git a/assets/map/ore/map.png b/assets/map/ore/map.png new file mode 100644 index 00000000..87f5cd04 Binary files /dev/null and b/assets/map/ore/map.png differ diff --git a/assets/map/ore/map.yaml b/assets/map/ore/map.yaml new file mode 100644 index 00000000..7bd68267 --- /dev/null +++ b/assets/map/ore/map.yaml @@ -0,0 +1,30 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: t + +Author: Your name here + +Tileset: SNOW + +MapSize: 4,4 + +Bounds: 1,1,2,2 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + +Actors: diff --git a/assets/map/road_river/map.bin b/assets/map/road_river/map.bin new file mode 100644 index 00000000..24a8f9d7 Binary files /dev/null and b/assets/map/road_river/map.bin differ diff --git a/assets/map/road_river/map.png b/assets/map/road_river/map.png new file mode 100644 index 00000000..c3f9f898 Binary files /dev/null and b/assets/map/road_river/map.png differ diff --git a/assets/map/road_river/map.yaml b/assets/map/road_river/map.yaml new file mode 100644 index 00000000..db24b96e --- /dev/null +++ b/assets/map/road_river/map.yaml @@ -0,0 +1,30 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: Name your map here + +Author: Your name here + +Tileset: TEMPERAT + +MapSize: 22,22 + +Bounds: 1,1,20,20 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + +Actors: diff --git a/assets/map/temperat.yaml b/assets/map/temperat.yaml new file mode 100644 index 00000000..013bf302 --- /dev/null +++ b/assets/map/temperat.yaml @@ -0,0 +1,3684 @@ +General: + Name: Temperate + Id: TEMPERAT + SheetSize: 1024 + EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge + HeightDebugColors: AA0000 + +Terrain: + TerrainType@Beach: + Type: Beach + TargetTypes: Ground + Color: B09C78 + TerrainType@Bridge: + Type: Bridge + TargetTypes: Ground, Bridge + AcceptsSmudgeType: Crater, Scorch + Color: 606060 + TerrainType@Clear: + Type: Clear + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 284428 + RestrictPlayerColor: true + TerrainType@Gems: + Type: Gems + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 8470FF + RestrictPlayerColor: true + TerrainType@Ore: + Type: Ore + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 948060 + RestrictPlayerColor: true + TerrainType@River: + Type: River + TargetTypes: Ground + Color: 5C8CB4 + TerrainType@Road: + Type: Road + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 5E430D + TerrainType@Rock: + Type: Rock + TargetTypes: Ground + Color: 44443C + TerrainType@Rough: + Type: Rough + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 44443C + TerrainType@Tree: + Type: Tree + TargetTypes: Ground + Color: 1C2024 + TerrainType@Wall: + Type: Wall + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: D0C0A0 + TerrainType@Water: + Type: Water + TargetTypes: Water + Color: 5C74A4 + RestrictPlayerColor: true + +Templates: + Template@255: + Id: 255 + Images: clear1.tem + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@65535: + Id: 65535 + Images: clear1.tem + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@1: + Id: 1 + Images: w1.tem + Size: 1,1 + Categories: Terrain + Tiles: + 0: Water + Template@2: + Id: 2 + Images: w2.tem + Size: 2,2 + Categories: Terrain + Tiles: + 0: Water + 1: Water + 2: Water + 3: Water + Template@3: + Id: 3 + Images: sh01.tem + Size: 4,5 + Categories: Beach + Tiles: + 3: Rock + 5: Clear + 6: Clear + 7: Beach + 8: Beach + 9: Water + 10: Water + 11: River + 12: Water + 13: Water + 16: Water + Template@4: + Id: 4 + Images: sh02.tem + Size: 5,5 + Categories: Beach + Tiles: + 4: Clear + 8: Beach + 9: Beach + 10: Beach + 11: Clear + 12: Beach + 13: Beach + 14: Beach + 15: Beach + 16: Rough + 17: Rough + 18: River + 20: Water + 21: Water + 22: Rock + Template@5: + Id: 5 + Images: sh03.tem + Size: 3,5 + Categories: Beach + Tiles: + 2: Clear + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + 9: Water + 10: Water + 12: Water + Template@6: + Id: 6 + Images: sh04.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@7: + Id: 7 + Images: sh05.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Rock + 2: Beach + 3: Beach + 4: Rock + 5: Rock + 6: Rock + 7: River + 8: River + Template@8: + Id: 8 + Images: sh06.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@9: + Id: 9 + Images: sh07.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@10: + Id: 10 + Images: sh08.tem + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + Template@11: + Id: 11 + Images: sh09.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Clear + 4: River + 5: Beach + 6: Water + 7: Water + 8: Water + Template@12: + Id: 12 + Images: sh10.tem + Size: 5,6 + Categories: Beach + Tiles: + 0: Clear + 5: Beach + 6: Clear + 10: Water + 11: Beach + 12: Beach + 13: Water + 17: Water + 18: Beach + 19: Beach + 22: Rock + 23: Rock + 24: Rock + 28: Water + 29: Water + Template@13: + Id: 13 + Images: sh11.tem + Size: 4,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 4: Beach + 5: Water + 6: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 14: Beach + 15: Beach + 18: Water + 19: Beach + Template@14: + Id: 14 + Images: sh12.tem + Size: 3,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Beach + 8: Beach + 10: Water + 11: Beach + 14: Water + Template@15: + Id: 15 + Images: sh13.tem + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 1: Rock + 2: Beach + 7: Beach + 8: Beach + 9: Beach + 13: Water + 14: Beach + 15: Beach + 16: Clear + 19: Water + 20: Water + 21: Rough + 22: Beach + 23: Clear + 27: Beach + 28: Beach + 29: Beach + Template@16: + Id: 16 + Images: sh14.tem + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Clear + 4: River + 5: Beach + 6: Beach + 8: Rough + 9: Beach + 10: Beach + 13: Water + 14: Beach + 15: Beach + Template@17: + Id: 17 + Images: sh15.tem + Size: 5,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Beach + 3: Clear + 6: Water + 7: Beach + 8: Beach + 12: Water + 13: Beach + 14: Beach + Template@18: + Id: 18 + Images: sh16.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Water + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@19: + Id: 19 + Images: sh17.tem + Size: 2,1 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@20: + Id: 20 + Images: sh18.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Rough + 3: Water + 4: River + 5: River + 6: Water + 7: Beach + 8: Rough + Template@21: + Id: 21 + Images: sh19.tem + Size: 4,5 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Clear + 5: Beach + 6: Beach + 7: Clear + 8: Water + 9: Beach + 10: Beach + 12: Water + 13: Beach + 14: Beach + 16: Water + 17: Beach + 18: Clear + Template@22: + Id: 22 + Images: sh20.tem + Size: 5,4 + Categories: Beach + Tiles: + 2: Water + 3: Beach + 4: Beach + 5: Water + 6: Beach + 7: Beach + 8: Beach + 10: Water + 11: Beach + 12: Beach + 15: Water + 16: Beach + 17: Beach + Template@23: + Id: 23 + Images: sh21.tem + Size: 5,3 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Beach + 4: Clear + 5: Water + 6: Beach + 7: Beach + 8: Clear + 10: Water + 11: Beach + 12: Beach + Template@24: + Id: 24 + Images: sh22.tem + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 6: Water + 7: Water + 12: Beach + 13: Beach + 14: Water + 15: Water + 16: Water + 17: Water + 19: Clear + 20: Beach + 21: Beach + 22: Water + 23: Beach + 27: Beach + 28: Beach + 29: Beach + Template@25: + Id: 25 + Images: sh23.tem + Size: 5,5 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 5: Beach + 6: Beach + 7: Water + 8: Water + 9: Water + 11: Clear + 12: Beach + 13: River + 14: Water + 17: Clear + 18: Beach + 19: Beach + 22: Beach + 23: Beach + 24: Beach + Template@26: + Id: 26 + Images: sh24.tem + Size: 3,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 3: Beach + 4: Water + 5: Water + 7: Clear + 8: Beach + 11: Clear + Template@27: + Id: 27 + Images: sh25.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: Beach + 6: Rock + 7: Rock + 8: Beach + Template@28: + Id: 28 + Images: sh26.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Beach + 4: Beach + 5: Rough + 6: Beach + 7: Beach + 8: Beach + Template@29: + Id: 29 + Images: sh27.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Rough + Template@30: + Id: 30 + Images: sh28.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Rock + 2: Rock + 3: Beach + 4: Rock + 5: Rock + 6: Beach + 7: Rough + 8: Rough + Template@31: + Id: 31 + Images: sh29.tem + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@32: + Id: 32 + Images: sh30.tem + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 1: River + 2: River + 3: Clear + 4: River + 5: Rough + Template@33: + Id: 33 + Images: sh31.tem + Size: 6,5 + Categories: Beach + Tiles: + 3: Water + 4: Water + 5: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 12: Water + 13: Water + 14: Water + 15: Beach + 16: Clear + 18: Beach + 19: Beach + 20: Water + 21: Beach + 22: Clear + 24: Clear + 25: Clear + 26: Beach + 27: Beach + 28: Clear + Template@34: + Id: 34 + Images: sh32.tem + Size: 4,4 + Categories: Beach + Tiles: + 2: Water + 3: Water + 4: Water + 5: Water + 6: Beach + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 12: Clear + 13: Clear + Template@35: + Id: 35 + Images: sh33.tem + Size: 3,4 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Water + 4: Beach + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + Template@36: + Id: 36 + Images: sh34.tem + Size: 6,5 + Categories: Beach + Tiles: + 3: Clear + 4: Beach + 5: Water + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 13: Beach + 14: Beach + 15: Water + 19: Beach + 20: Beach + 21: Water + 24: Beach + 25: Beach + 26: Water + Template@37: + Id: 37 + Images: sh35.tem + Size: 4,4 + Categories: Beach + Tiles: + 2: Beach + 3: Water + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + 11: Water + 12: Clear + 13: Beach + 14: Water + Template@38: + Id: 38 + Images: sh36.tem + Size: 4,3 + Categories: Beach + Tiles: + 1: Beach + 2: Beach + 3: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Water + 10: Water + Template@39: + Id: 39 + Images: sh37.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Beach + 2: Water + 3: Clear + 4: Beach + 5: Water + 6: Rough + 7: Beach + 8: Water + Template@40: + Id: 40 + Images: sh38.tem + Size: 2,1 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + Template@41: + Id: 41 + Images: sh39.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Beach + 2: Water + 3: River + 4: River + 5: Water + 6: Clear + 7: Beach + 8: Water + Template@42: + Id: 42 + Images: sh40.tem + Size: 5,5 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Water + 6: Beach + 7: Water + 11: Beach + 12: Water + 13: Water + 16: Clear + 17: Beach + 18: Beach + 19: Water + 22: Beach + 23: Beach + 24: Water + Template@43: + Id: 43 + Images: sh41.tem + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Beach + 10: Water + 11: Water + 13: Clear + 14: Beach + 15: Water + Template@44: + Id: 44 + Images: sh42.tem + Size: 4,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Water + 5: Beach + 6: Beach + 7: River + 9: Clear + 10: Beach + 11: Water + Template@45: + Id: 45 + Images: sh43.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Water + 8: Water + Template@46: + Id: 46 + Images: sh44.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: River + 3: Water + Template@47: + Id: 47 + Images: sh45.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Water + 3: Water + 4: Rough + 5: Beach + 6: Water + 7: River + 8: Beach + Template@48: + Id: 48 + Images: sh46.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: River + 2: River + 3: Beach + Template@49: + Id: 49 + Images: sh47.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 3: Beach + 4: Water + 6: Beach + 7: Beach + 8: Water + Template@50: + Id: 50 + Images: sh48.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Clear + 3: Beach + Template@51: + Id: 51 + Images: sh49.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: River + 6: River + 7: Rock + 8: Rock + Template@52: + Id: 52 + Images: sh50.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Water + Template@53: + Id: 53 + Images: sh51.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Beach + 4: Beach + 5: Beach + 7: Rough + 8: Clear + Template@54: + Id: 54 + Images: sh52.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Clear + 2: Clear + 3: Clear + 4: Beach + 5: Beach + 7: Beach + 8: Water + Template@55: + Id: 55 + Images: sh53.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@56: + Id: 56 + Images: sh54.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 6: Clear + Template@57: + Id: 57 + Images: sh55.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@58: + Id: 58 + Images: sh56.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@135: + Id: 135 + Images: s01.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@136: + Id: 136 + Images: s02.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@137: + Id: 137 + Images: s03.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@138: + Id: 138 + Images: s04.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@139: + Id: 139 + Images: s05.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@140: + Id: 140 + Images: s06.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@141: + Id: 141 + Images: s07.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@142: + Id: 142 + Images: s08.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@143: + Id: 143 + Images: s09.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@144: + Id: 144 + Images: s10.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@145: + Id: 145 + Images: s11.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@146: + Id: 146 + Images: s12.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@147: + Id: 147 + Images: s13.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Rough + Template@148: + Id: 148 + Images: s14.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + Template@149: + Id: 149 + Images: s15.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@150: + Id: 150 + Images: s16.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 2: Rock + 3: Rock + 5: Rock + Template@151: + Id: 151 + Images: s17.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@152: + Id: 152 + Images: s18.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@153: + Id: 153 + Images: s19.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@154: + Id: 154 + Images: s20.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@155: + Id: 155 + Images: s21.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@156: + Id: 156 + Images: s22.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@157: + Id: 157 + Images: s23.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@158: + Id: 158 + Images: s24.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@159: + Id: 159 + Images: s25.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@160: + Id: 160 + Images: s26.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@161: + Id: 161 + Images: s27.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + Template@162: + Id: 162 + Images: s28.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@163: + Id: 163 + Images: s29.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@164: + Id: 164 + Images: s30.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@165: + Id: 165 + Images: s31.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + Template@166: + Id: 166 + Images: s32.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + Template@167: + Id: 167 + Images: s33.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@168: + Id: 168 + Images: s34.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@169: + Id: 169 + Images: s35.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@170: + Id: 170 + Images: s36.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@171: + Id: 171 + Images: s37.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@172: + Id: 172 + Images: s38.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@59: + Id: 59 + Images: wc01.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@60: + Id: 60 + Images: wc02.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@61: + Id: 61 + Images: wc03.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@62: + Id: 62 + Images: wc04.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@63: + Id: 63 + Images: wc05.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@64: + Id: 64 + Images: wc06.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@65: + Id: 65 + Images: wc07.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@66: + Id: 66 + Images: wc08.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@67: + Id: 67 + Images: wc09.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@68: + Id: 68 + Images: wc10.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@69: + Id: 69 + Images: wc11.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@70: + Id: 70 + Images: wc12.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@71: + Id: 71 + Images: wc13.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Clear + Template@72: + Id: 72 + Images: wc14.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Beach + 2: Beach + 3: Beach + Template@73: + Id: 73 + Images: wc15.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@74: + Id: 74 + Images: wc16.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Water + 2: Rock + 3: Rock + 5: Rock + Template@75: + Id: 75 + Images: wc17.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@76: + Id: 76 + Images: wc18.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@77: + Id: 77 + Images: wc19.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@78: + Id: 78 + Images: wc20.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 1: River + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@79: + Id: 79 + Images: wc21.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@80: + Id: 80 + Images: wc22.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@81: + Id: 81 + Images: wc23.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: Water + Template@82: + Id: 82 + Images: wc24.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@83: + Id: 83 + Images: wc25.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@84: + Id: 84 + Images: wc26.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@85: + Id: 85 + Images: wc27.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + 3: Clear + 4: Rock + 5: Rock + Template@86: + Id: 86 + Images: wc28.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@87: + Id: 87 + Images: wc29.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@88: + Id: 88 + Images: wc30.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@89: + Id: 89 + Images: wc31.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + Template@90: + Id: 90 + Images: wc32.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + Template@91: + Id: 91 + Images: wc33.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@92: + Id: 92 + Images: wc34.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@93: + Id: 93 + Images: wc35.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@94: + Id: 94 + Images: wc36.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@95: + Id: 95 + Images: wc37.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@96: + Id: 96 + Images: wc38.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@173: + Id: 173 + Images: d01.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + Template@174: + Id: 174 + Images: d02.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Clear + Template@175: + Id: 175 + Images: d03.tem + Size: 1,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + Template@176: + Id: 176 + Images: d04.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@177: + Id: 177 + Images: d05.tem + Size: 3,4 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Road + 4: Road + 6: Road + 7: Road + 9: Road + 10: Road + Template@178: + Id: 178 + Images: d06.tem + Size: 2,3 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + 4: Road + 5: Clear + Template@179: + Id: 179 + Images: d07.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 4: Road + 5: Clear + Template@180: + Id: 180 + Images: d08.tem + Size: 3,2 + Categories: Road + Tiles: + 1: Road + 3: Clear + 4: Road + 5: Clear + Template@181: + Id: 181 + Images: d09.tem + Size: 4,3 + Categories: Road + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Road + 5: Road + 6: Road + 7: Road + 10: Clear + 11: Clear + Template@182: + Id: 182 + Images: d10.tem + Size: 4,2 + Categories: Road + Tiles: + 0: Clear + 1: Rock + 4: Road + 5: Road + 6: Road + 7: Road + Template@183: + Id: 183 + Images: d11.tem + Size: 2,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + 4: Clear + Template@184: + Id: 184 + Images: d12.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@185: + Id: 185 + Images: d13.tem + Size: 4,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Clear + 4: Clear + 5: Road + 6: Road + 7: Rock + 10: Rock + 11: Road + Template@186: + Id: 186 + Images: d14.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Rock + 5: Road + 6: Road + 7: Road + 8: Road + Template@187: + Id: 187 + Images: d15.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Road + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@188: + Id: 188 + Images: d16.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + 8: Rock + Template@189: + Id: 189 + Images: d17.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Clear + Template@190: + Id: 190 + Images: d18.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Rock + Template@191: + Id: 191 + Images: d19.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Road + 6: Clear + 7: Road + 8: Clear + Template@192: + Id: 192 + Images: d20.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Road + Template@193: + Id: 193 + Images: d21.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Rock + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Rough + Template@194: + Id: 194 + Images: d22.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Clear + Template@195: + Id: 195 + Images: d23.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Road + Template@196: + Id: 196 + Images: d24.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@197: + Id: 197 + Images: d25.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@198: + Id: 198 + Images: d26.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@199: + Id: 199 + Images: d27.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@200: + Id: 200 + Images: d28.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Rough + Template@201: + Id: 201 + Images: d29.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@202: + Id: 202 + Images: d30.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@203: + Id: 203 + Images: d31.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@204: + Id: 204 + Images: d32.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@205: + Id: 205 + Images: d33.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@206: + Id: 206 + Images: d34.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@207: + Id: 207 + Images: d35.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@208: + Id: 208 + Images: d36.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@209: + Id: 209 + Images: d37.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@210: + Id: 210 + Images: d38.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@211: + Id: 211 + Images: d39.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@212: + Id: 212 + Images: d40.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@213: + Id: 213 + Images: d41.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Rock + 2: Road + 3: Road + Template@214: + Id: 214 + Images: d42.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + Template@215: + Id: 215 + Images: d43.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@227: + Id: 227 + Images: d44.tem + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@228: + Id: 228 + Images: d45.tem + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@231: + Id: 231 + Images: rc01.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@232: + Id: 232 + Images: rc02.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@233: + Id: 233 + Images: rc03.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@234: + Id: 234 + Images: rc04.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@112: + Id: 112 + Images: rv01.tem + Size: 5,4 + Categories: River + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + 13: Rock + 14: Rock + 16: Rock + 17: Rough + Template@113: + Id: 113 + Images: rv02.tem + Size: 5,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rough + 4: Rough + 5: River + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + Template@114: + Id: 114 + Images: rv03.tem + Size: 4,4 + Categories: River + Tiles: + 0: Rock + 1: Rough + 4: Rock + 5: Rock + 6: Rock + 7: Clear + 8: Rock + 9: Rock + 10: River + 11: River + 13: Clear + 14: Clear + 15: Rock + Template@115: + Id: 115 + Images: rv04.tem + Size: 4,4 + Categories: River + Tiles: + 2: Rock + 3: Rough + 5: Rough + 6: Rock + 7: River + 8: River + 9: River + 10: River + 11: River + 12: Rock + 13: Rock + 14: Rock + Template@116: + Id: 116 + Images: rv05.tem + Size: 3,3 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: Rock + 7: River + 8: Rock + Template@117: + Id: 117 + Images: rv06.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@118: + Id: 118 + Images: rv07.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: River + Template@119: + Id: 119 + Images: rv08.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: River + 3: River + Template@120: + Id: 120 + Images: rv09.tem + Size: 2,2 + Categories: River + Tiles: + 0: Clear + 1: Clear + 2: River + 3: River + Template@121: + Id: 121 + Images: rv10.tem + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: Rock + 3: River + Template@122: + Id: 122 + Images: rv11.tem + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: River + 3: Rock + Template@123: + Id: 123 + Images: rv12.tem + Size: 3,4 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: River + 7: River + 8: Rock + 9: Rough + 10: River + 11: Rock + Template@124: + Id: 124 + Images: rv13.tem + Size: 4,4 + Categories: River + Tiles: + 2: Clear + 3: Rough + 4: River + 5: River + 6: River + 7: River + 8: River + 9: Rock + 10: River + 11: Rock + 12: Clear + 13: Rock + 14: River + 15: Rough + Template@229: + Id: 229 + Images: rv14.tem + Size: 1,2 + Categories: River + Tiles: + 0: Rock + 1: River + Template@230: + Id: 230 + Images: rv15.tem + Size: 2,1 + Categories: River + Tiles: + 0: Rock + 1: River + Template@235: + Id: 235 + Images: br1a.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 4: Rock + 5: Bridge + 6: Bridge + 7: Rock + 9: Bridge + 10: Rock + 11: Rock + Template@236: + Id: 236 + Images: br1b.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 4: Rock + 5: Rough + 6: Rough + 7: Rock + 9: Rough + 10: Rock + 11: Rock + Template@237: + Id: 237 + Images: br1c.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 9: Rock + 10: Rock + 11: Rock + Template@238: + Id: 238 + Images: br2a.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 11: Bridge + 12: Rock + 13: Rock + Template@239: + Id: 239 + Images: br2b.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 11: Rough + 12: Rock + 13: Rock + Template@240: + Id: 240 + Images: br2c.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Water + 2: Water + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 11: Rock + 12: Rock + 13: Rock + Template@241: + Id: 241 + Images: br3a.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@242: + Id: 242 + Images: br3b.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@243: + Id: 243 + Images: br3c.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: Rock + 7: Rock + Template@244: + Id: 244 + Images: br3d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 5: River + 6: River + 7: River + Template@245: + Id: 245 + Images: br3e.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Rock + 6: Water + 7: Water + Template@246: + Id: 246 + Images: br3f.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Water + 6: Water + 7: Water + Template@380: + Id: 380 + Images: br1x.tem + Size: 5,3 + Categories: Bridge + Tiles: + 0: Rock + 3: Road + 4: Clear + 9: Rock + 14: Water + Template@381: + Id: 381 + Images: br2x.tem + Size: 5,1 + Categories: Bridge + Tiles: + 0: Road + 4: Beach + Template@131: + Id: 131 + Images: bridge1.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 12: Rock + Template@132: + Id: 132 + Images: bridge1d.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 12: Rock + Template@378: + Id: 378 + Images: bridge1h.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 12: Rough + Template@382: + Id: 382 + Images: bridge1x.tem + Size: 5,4 + Categories: Bridge + Tiles: + 2: Clear + 3: Bridge + 4: Bridge + 5: Rock + 15: Bridge + 16: Bridge + 18: Rock + 19: Rock + Template@133: + Id: 133 + Images: bridge2.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 5: Rock + 6: Rock + 7: Bridge + 8: Bridge + 9: Rock + Template@134: + Id: 134 + Images: bridge2d.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + Template@379: + Id: 379 + Images: bridge2h.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rough + 2: Rough + 3: Rock + 5: Rock + 6: Rock + 7: Rough + 8: Rough + 9: Rock + Template@383: + Id: 383 + Images: bridge2x.tem + Size: 5,5 + Categories: Bridge + Tiles: + 0: Bridge + 1: Bridge + 2: Rough + 3: Clear + 4: Rough + 9: River + 15: Rock + 16: Rock + 17: Rough + 18: Bridge + 19: Bridge + 23: Bridge + 24: Bridge + Template@247: + Id: 247 + Images: f01.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Road + 2: Road + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@248: + Id: 248 + Images: f02.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@249: + Id: 249 + Images: f03.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Clear + 7: Road + 8: Clear + Template@250: + Id: 250 + Images: f04.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Clear + 1: Beach + 2: Beach + 3: Road + 4: Beach + 5: Beach + 6: Clear + 7: Beach + 8: Beach + Template@251: + Id: 251 + Images: f05.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@252: + Id: 252 + Images: f06.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 5: Road + 6: Beach + 7: Beach + 8: Clear + Template@129: + Id: 129 + Images: ford1.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: River + 2: Rough + 3: Road + 4: Rough + 5: Road + 6: Clear + 7: Rough + 8: Rough + Template@130: + Id: 130 + Images: ford2.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + 2: Rough + 3: Rock + 4: Rough + 5: Rough + 6: Clear + 7: Road + 8: Clear + Template@125: + Id: 125 + Images: falls1.tem + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + 6: Rough + 7: Rock + 8: Rock + Template@126: + Id: 126 + Images: falls1a.tem + Size: 3,3 + Categories: Water Cliffs + Tiles: + 0: Water + 1: River + 2: Rock + 3: Water + 4: Rock + 5: Rock + 6: Water + 7: River + 8: Rock + Template@127: + Id: 127 + Images: falls2.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@128: + Id: 128 + Images: falls2a.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: River + 5: River + Template@97: + Id: 97 + Images: b1.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@98: + Id: 98 + Images: b2.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@99: + Id: 99 + Images: b3.tem + Size: 3,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + Template@216: + Id: 216 + Images: rf01.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@217: + Id: 217 + Images: rf02.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@218: + Id: 218 + Images: rf03.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@219: + Id: 219 + Images: rf04.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@220: + Id: 220 + Images: rf05.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@221: + Id: 221 + Images: rf06.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@222: + Id: 222 + Images: rf07.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@223: + Id: 223 + Images: rf08.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@224: + Id: 224 + Images: rf09.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@225: + Id: 225 + Images: rf10.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + Template@226: + Id: 226 + Images: rf11.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@103: + Id: 103 + Images: p01.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@104: + Id: 104 + Images: p02.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@105: + Id: 105 + Images: p03.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@106: + Id: 106 + Images: p04.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@107: + Id: 107 + Images: p07.tem + Size: 4,2 + Categories: Debris + Tiles: + 0: Rough + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + Template@108: + Id: 108 + Images: p08.tem + Size: 3,2 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@109: + Id: 109 + Images: p13.tem + Size: 3,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@110: + Id: 110 + Images: p14.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@500: + Id: 500 + Images: sh57.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@502: + Id: 502 + Images: sh58.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@503: + Id: 503 + Images: sh59.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@504: + Id: 504 + Images: sh60.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@505: + Id: 505 + Images: sh61.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@506: + Id: 506 + Images: sh62.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@507: + Id: 507 + Images: sh63.tem + Size: 2,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@508: + Id: 508 + Images: sh64.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@519: + Id: 519 + Images: sbridge1x.tem + Size: 3,4 + Categories: Bridge + Tiles: + 0: Clear + 1: Road + 2: Clear + 9: Clear + 10: Road + 11: Clear + Template@520: + Id: 520 + Images: sbridge1.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Bridge + 2: River + 3: River + 4: Bridge + 5: River + Template@521: + Id: 521 + Images: sbridge1h.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Bridge + 2: River + 3: River + 4: Bridge + 5: River + Template@522: + Id: 522 + Images: sbridge1d.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 2: River + 3: River + 4: Rock + 5: River + Template@523: + Id: 523 + Images: sbridge3.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Rock + 4: River + 5: Bridge + 6: Rock + 7: River + Template@524: + Id: 524 + Images: sbridge3h.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Rock + 4: River + 5: Bridge + 6: Rock + 7: River + Template@525: + Id: 525 + Images: sbridge3d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: River + 5: River + 6: Rock + 7: River + Template@526: + Id: 526 + Images: sbridge3x.tem + Size: 4,4 + Categories: Bridge + Tiles: + 1: Clear + 2: Clear + 3: Road + 4: River + 12: Road + 13: Clear + 14: River + 15: River + Template@527: + Id: 527 + Images: sbridge4.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Rock + 4: River + 5: Rock + 6: Bridge + 7: Rock + Template@528: + Id: 528 + Images: sbridge4h.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Rock + 4: River + 5: Rock + 6: Bridge + 7: Rock + Template@529: + Id: 529 + Images: sbridge4d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 4: River + 5: Rock + 6: Rock + 7: Rock + Template@530: + Id: 530 + Images: sbridge4x.tem + Size: 5,5 + Categories: Bridge + Tiles: + 0: Road + 1: Clear + 2: Clear + 4: River + 8: River + 9: River + 14: River + 15: River + 16: River + 17: Clear + 18: Road + 19: Clear + 23: Clear + 24: Road + Template@531: + Id: 531 + Images: sbridge2.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + Template@532: + Id: 532 + Images: sbridge2h.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + Template@533: + Id: 533 + Images: sbridge2d.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: River + 3: River + 4: River + 5: River + Template@534: + Id: 534 + Images: sbridge2x.tem + Size: 4,4 + Categories: Bridge + Tiles: + 0: Rough + 3: Rough + 4: Road + 7: Road + 8: Rough + 11: Rough + 12: Clear + 13: River + 14: River + 15: Clear + Template@550: + Id: 550 + Images: sccnr.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@551: + Id: 551 + Images: sccnl.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@552: + Id: 552 + Images: sccsr.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@553: + Id: 553 + Images: sccsl.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@554: + Id: 554 + Images: sccln.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@555: + Id: 555 + Images: sccls.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@556: + Id: 556 + Images: sccrn.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@557: + Id: 557 + Images: sccrs.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@580: + Id: 580 + Images: deca.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@581: + Id: 581 + Images: decb.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@582: + Id: 582 + Images: decc.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@583: + Id: 583 + Images: decc.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@584: + Id: 584 + Images: decd.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@585: + Id: 585 + Images: dece.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@586: + Id: 586 + Images: decf.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@587: + Id: 587 + Images: decg.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@588: + Id: 588 + Images: dech.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@590: + Id: 590 + Images: fjord1.tem + Size: 1,2 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + Template@591: + Id: 591 + Images: fjord2.tem + Size: 2,1 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + Template@400: + Id: 400 + Images: hill01.tem + Size: 4,3 + Categories: Debris + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 10: Rough + 11: Clear + Template@401: + Id: 401 + Images: cliffsl1.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@402: + Id: 402 + Images: cliffsl2.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@403: + Id: 403 + Images: cliffsl3.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@404: + Id: 404 + Images: cliffsl4.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@405: + Id: 405 + Images: cliffsw1.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@406: + Id: 406 + Images: cliffsw2.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@407: + Id: 407 + Images: cliffsw3.tem + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@408: + Id: 408 + Images: cliffsw4.tem + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock diff --git a/assets/map/test/map.bin b/assets/map/test/map.bin new file mode 100644 index 00000000..b060d85f Binary files /dev/null and b/assets/map/test/map.bin differ diff --git a/assets/map/test/map.png b/assets/map/test/map.png new file mode 100644 index 00000000..375c5535 Binary files /dev/null and b/assets/map/test/map.png differ diff --git a/assets/map/test/map.yaml b/assets/map/test/map.yaml new file mode 100644 index 00000000..dc5136e0 --- /dev/null +++ b/assets/map/test/map.yaml @@ -0,0 +1,30 @@ +MapFormat: 12 + +RequiresMod: ra + +Title: test + +Author: Your name here + +Tileset: TEMPERAT + +MapSize: 4,4 + +Bounds: 1,1,2,2 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + +Actors: diff --git a/assets/shaders/DrawLines.frag b/assets/shaders/DrawLines.frag new file mode 100644 index 00000000..525325a4 --- /dev/null +++ b/assets/shaders/DrawLines.frag @@ -0,0 +1,10 @@ +#version 410 core + +layout(location = 0) in vec3 vertexColor; + +layout(location = 0) out vec4 fragColor; + +void main() { + fragColor = vec4(vertexColor, 1.0); + // fragColor.a *= 0.5; +} diff --git a/assets/shaders/DrawLines.vert b/assets/shaders/DrawLines.vert new file mode 100644 index 00000000..99e3cc98 --- /dev/null +++ b/assets/shaders/DrawLines.vert @@ -0,0 +1,21 @@ +#version 410 core + +layout(location = 0) in vec2 vertexPos; +layout(location = 1) in vec3 color; + +layout(location = 0) out vec3 vertexColor; + +layout(std140) uniform DrawLines { + mat4 _model; + mat4 _projection; +}; + +void main() { + + vec4 pos = _projection*_model*vec4(vertexPos,0,1); + + gl_Position = vec4(pos.x, pos.y, 0, 1); + vertexColor = color; +} + + diff --git a/assets/shaders/Triangle.vert b/assets/shaders/Triangle.vert index 8aa76812..058778ab 100644 --- a/assets/shaders/Triangle.vert +++ b/assets/shaders/Triangle.vert @@ -27,8 +27,10 @@ void main() { mat2 model = mat2(_model); mat2 projection = mat2(_projection); - vec2 pos = vertexPos * model * projection; + vec2 pos = vertexPos*projection*model; gl_Position = vec4(pos.x, pos.y, 0, 1); vertexColor = color; } + + diff --git a/assets/sprites/.DS_Store b/assets/sprites/.DS_Store new file mode 100644 index 00000000..6c9f837a Binary files /dev/null and b/assets/sprites/.DS_Store differ diff --git a/assets/sprites/Desert.png b/assets/sprites/Desert.png new file mode 100644 index 00000000..620f3802 Binary files /dev/null and b/assets/sprites/Desert.png differ diff --git a/assets/sprites/HighLightB.png b/assets/sprites/HighLightB.png new file mode 100644 index 00000000..a88e469d Binary files /dev/null and b/assets/sprites/HighLightB.png differ diff --git a/assets/sprites/Hunter.png b/assets/sprites/Hunter.png new file mode 100644 index 00000000..d8372b4a Binary files /dev/null and b/assets/sprites/Hunter.png differ diff --git a/assets/sprites/ICON_Allied_Infantry.png b/assets/sprites/ICON_Allied_Infantry.png new file mode 100644 index 00000000..5d8cf452 Binary files /dev/null and b/assets/sprites/ICON_Allied_Infantry.png differ diff --git a/assets/sprites/ICON_Allied_Structure.png b/assets/sprites/ICON_Allied_Structure.png new file mode 100644 index 00000000..0aaad4b0 Binary files /dev/null and b/assets/sprites/ICON_Allied_Structure.png differ diff --git a/assets/sprites/ICON_Allied_Vehicles.png b/assets/sprites/ICON_Allied_Vehicles.png new file mode 100644 index 00000000..b9fc5b8a Binary files /dev/null and b/assets/sprites/ICON_Allied_Vehicles.png differ diff --git a/assets/sprites/ICON_Soviet Infantry.png b/assets/sprites/ICON_Soviet Infantry.png new file mode 100644 index 00000000..dbe39a9c Binary files /dev/null and b/assets/sprites/ICON_Soviet Infantry.png differ diff --git a/assets/sprites/ICON_Soviet Strucutre Spritesheet.png b/assets/sprites/ICON_Soviet Strucutre Spritesheet.png new file mode 100644 index 00000000..dfdb517f Binary files /dev/null and b/assets/sprites/ICON_Soviet Strucutre Spritesheet.png differ diff --git a/assets/sprites/ICON_Soviet Vehicles.png b/assets/sprites/ICON_Soviet Vehicles.png new file mode 100644 index 00000000..f0a46b64 Binary files /dev/null and b/assets/sprites/ICON_Soviet Vehicles.png differ diff --git a/assets/sprites/OreRefinery.png b/assets/sprites/OreRefinery.png new file mode 100644 index 00000000..ed4bfe78 Binary files /dev/null and b/assets/sprites/OreRefinery.png differ diff --git a/assets/sprites/PowerPlants.png b/assets/sprites/PowerPlants.png new file mode 100644 index 00000000..293f87d4 Binary files /dev/null and b/assets/sprites/PowerPlants.png differ diff --git a/assets/sprites/Raccoon3.jpg b/assets/sprites/Raccoon3.jpg new file mode 100644 index 00000000..b964abe3 Binary files /dev/null and b/assets/sprites/Raccoon3.jpg differ diff --git a/assets/sprites/Runner.png b/assets/sprites/Runner.png new file mode 100644 index 00000000..d8eb522f Binary files /dev/null and b/assets/sprites/Runner.png differ diff --git a/assets/sprites/Shapes/B_Box.png b/assets/sprites/Shapes/B_Box.png new file mode 100644 index 00000000..d898041a Binary files /dev/null and b/assets/sprites/Shapes/B_Box.png differ diff --git a/assets/sprites/Shapes/B_Slated.png b/assets/sprites/Shapes/B_Slated.png new file mode 100644 index 00000000..4f7cd757 Binary files /dev/null and b/assets/sprites/Shapes/B_Slated.png differ diff --git a/assets/sprites/Shapes/R_Box.png b/assets/sprites/Shapes/R_Box.png new file mode 100644 index 00000000..74779b8c Binary files /dev/null and b/assets/sprites/Shapes/R_Box.png differ diff --git a/assets/sprites/Shapes/R_Cross.png b/assets/sprites/Shapes/R_Cross.png new file mode 100644 index 00000000..2467b8a9 Binary files /dev/null and b/assets/sprites/Shapes/R_Cross.png differ diff --git a/assets/sprites/Shapes/R_Slated.png b/assets/sprites/Shapes/R_Slated.png new file mode 100644 index 00000000..448e9205 Binary files /dev/null and b/assets/sprites/Shapes/R_Slated.png differ diff --git a/assets/sprites/TILESET_Field.png b/assets/sprites/TILESET_Field.png new file mode 100755 index 00000000..72391273 Binary files /dev/null and b/assets/sprites/TILESET_Field.png differ diff --git a/assets/sprites/TILESET_Interior.png b/assets/sprites/TILESET_Interior.png new file mode 100755 index 00000000..26bc054c Binary files /dev/null and b/assets/sprites/TILESET_Interior.png differ diff --git a/assets/sprites/UNIT_Einstein.jpg b/assets/sprites/UNIT_Einstein.jpg new file mode 100755 index 00000000..6b7f79e6 Binary files /dev/null and b/assets/sprites/UNIT_Einstein.jpg differ diff --git a/assets/sprites/UNIT_MCV.jpg b/assets/sprites/UNIT_MCV.jpg new file mode 100755 index 00000000..ad4927b9 Binary files /dev/null and b/assets/sprites/UNIT_MCV.jpg differ diff --git a/assets/sprites/UNIT_Someone.jpg b/assets/sprites/UNIT_Someone.jpg new file mode 100755 index 00000000..f23ac8ef Binary files /dev/null and b/assets/sprites/UNIT_Someone.jpg differ diff --git a/assets/sprites/UNIT_Yak.jpg b/assets/sprites/UNIT_Yak.jpg new file mode 100755 index 00000000..db9cba15 Binary files /dev/null and b/assets/sprites/UNIT_Yak.jpg differ diff --git a/assets/sprites/WarFactory.png b/assets/sprites/WarFactory.png new file mode 100644 index 00000000..9e0098c0 Binary files /dev/null and b/assets/sprites/WarFactory.png differ diff --git a/assets/sprites/barracks.gif b/assets/sprites/barracks.gif new file mode 100644 index 00000000..182c196f Binary files /dev/null and b/assets/sprites/barracks.gif differ diff --git a/assets/sprites/barracks.png b/assets/sprites/barracks.png new file mode 100644 index 00000000..cd8bd47f Binary files /dev/null and b/assets/sprites/barracks.png differ diff --git a/assets/sprites/barracks/barracks_0.png b/assets/sprites/barracks/barracks_0.png new file mode 100644 index 00000000..cd8bd47f Binary files /dev/null and b/assets/sprites/barracks/barracks_0.png differ diff --git a/assets/sprites/barracks/barracks_1.png b/assets/sprites/barracks/barracks_1.png new file mode 100644 index 00000000..4d0e0733 Binary files /dev/null and b/assets/sprites/barracks/barracks_1.png differ diff --git a/assets/sprites/barracks/barracks_2.png b/assets/sprites/barracks/barracks_2.png new file mode 100644 index 00000000..a64b4ab7 Binary files /dev/null and b/assets/sprites/barracks/barracks_2.png differ diff --git a/assets/sprites/barracks/barracks_3.png b/assets/sprites/barracks/barracks_3.png new file mode 100644 index 00000000..a390fead Binary files /dev/null and b/assets/sprites/barracks/barracks_3.png differ diff --git a/assets/sprites/barracks/barracks_4.png b/assets/sprites/barracks/barracks_4.png new file mode 100644 index 00000000..e4887a6a Binary files /dev/null and b/assets/sprites/barracks/barracks_4.png differ diff --git a/assets/sprites/barracks/barracks_5.png b/assets/sprites/barracks/barracks_5.png new file mode 100644 index 00000000..0b5bdb91 Binary files /dev/null and b/assets/sprites/barracks/barracks_5.png differ diff --git a/assets/sprites/barracks/barracks_6.png b/assets/sprites/barracks/barracks_6.png new file mode 100644 index 00000000..19620198 Binary files /dev/null and b/assets/sprites/barracks/barracks_6.png differ diff --git a/assets/sprites/barracks/barracks_7.png b/assets/sprites/barracks/barracks_7.png new file mode 100644 index 00000000..8f9c6dc8 Binary files /dev/null and b/assets/sprites/barracks/barracks_7.png differ diff --git a/assets/sprites/barracks/barracks_8.png b/assets/sprites/barracks/barracks_8.png new file mode 100644 index 00000000..63ed906e Binary files /dev/null and b/assets/sprites/barracks/barracks_8.png differ diff --git a/assets/sprites/capybara.png b/assets/sprites/capybara.png new file mode 100644 index 00000000..a5ca3ace Binary files /dev/null and b/assets/sprites/capybara.png differ diff --git a/assets/sprites/flagB.png b/assets/sprites/flagB.png new file mode 100644 index 00000000..8f74f589 Binary files /dev/null and b/assets/sprites/flagB.png differ diff --git a/assets/sprites/flagO.png b/assets/sprites/flagO.png new file mode 100644 index 00000000..e91485b3 Binary files /dev/null and b/assets/sprites/flagO.png differ diff --git a/assets/sprites/flagW.png b/assets/sprites/flagW.png new file mode 100644 index 00000000..7b970567 Binary files /dev/null and b/assets/sprites/flagW.png differ diff --git a/assets/sprites/p05.png b/assets/sprites/p05.png new file mode 100644 index 00000000..8f1f44ad Binary files /dev/null and b/assets/sprites/p05.png differ diff --git a/assets/sprites/raccoon2.png b/assets/sprites/raccoon2.png new file mode 100644 index 00000000..3277a602 Binary files /dev/null and b/assets/sprites/raccoon2.png differ diff --git a/assets/sprites/temp_Bullet.png b/assets/sprites/temp_Bullet.png new file mode 100644 index 00000000..c432dbe6 Binary files /dev/null and b/assets/sprites/temp_Bullet.png differ diff --git a/assets/sprites/temperate_sprite/b1-0000.png b/assets/sprites/temperate_sprite/b1-0000.png new file mode 100644 index 00000000..98c53c4d Binary files /dev/null and b/assets/sprites/temperate_sprite/b1-0000.png differ diff --git a/assets/sprites/temperate_sprite/b2-0000.png b/assets/sprites/temperate_sprite/b2-0000.png new file mode 100644 index 00000000..25971eb7 Binary files /dev/null and b/assets/sprites/temperate_sprite/b2-0000.png differ diff --git a/assets/sprites/temperate_sprite/b2-0001.png b/assets/sprites/temperate_sprite/b2-0001.png new file mode 100644 index 00000000..c8d656f5 Binary files /dev/null and b/assets/sprites/temperate_sprite/b2-0001.png differ diff --git a/assets/sprites/temperate_sprite/b3-0000.png b/assets/sprites/temperate_sprite/b3-0000.png new file mode 100644 index 00000000..9a13681f Binary files /dev/null and b/assets/sprites/temperate_sprite/b3-0000.png differ diff --git a/assets/sprites/temperate_sprite/b3-0001.png b/assets/sprites/temperate_sprite/b3-0001.png new file mode 100644 index 00000000..ed1ed120 Binary files /dev/null and b/assets/sprites/temperate_sprite/b3-0001.png differ diff --git a/assets/sprites/temperate_sprite/b3-0002.png b/assets/sprites/temperate_sprite/b3-0002.png new file mode 100644 index 00000000..6f81548b Binary files /dev/null and b/assets/sprites/temperate_sprite/b3-0002.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0000.png b/assets/sprites/temperate_sprite/br1a-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0000.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0001.png b/assets/sprites/temperate_sprite/br1a-0001.png new file mode 100644 index 00000000..a82084e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0001.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0002.png b/assets/sprites/temperate_sprite/br1a-0002.png new file mode 100644 index 00000000..8e628f63 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0002.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0003.png b/assets/sprites/temperate_sprite/br1a-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0003.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0004.png b/assets/sprites/temperate_sprite/br1a-0004.png new file mode 100644 index 00000000..233b6b70 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0004.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0005.png b/assets/sprites/temperate_sprite/br1a-0005.png new file mode 100644 index 00000000..80f3c534 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0005.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0006.png b/assets/sprites/temperate_sprite/br1a-0006.png new file mode 100644 index 00000000..7e73b742 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0006.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0007.png b/assets/sprites/temperate_sprite/br1a-0007.png new file mode 100644 index 00000000..9209bca3 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0007.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0008.png b/assets/sprites/temperate_sprite/br1a-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0008.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0009.png b/assets/sprites/temperate_sprite/br1a-0009.png new file mode 100644 index 00000000..7e73b742 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0009.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0010.png b/assets/sprites/temperate_sprite/br1a-0010.png new file mode 100644 index 00000000..0bed3b51 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0010.png differ diff --git a/assets/sprites/temperate_sprite/br1a-0011.png b/assets/sprites/temperate_sprite/br1a-0011.png new file mode 100644 index 00000000..3a485ffe Binary files /dev/null and b/assets/sprites/temperate_sprite/br1a-0011.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0000.png b/assets/sprites/temperate_sprite/br1b-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0000.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0001.png b/assets/sprites/temperate_sprite/br1b-0001.png new file mode 100644 index 00000000..a82084e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0001.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0002.png b/assets/sprites/temperate_sprite/br1b-0002.png new file mode 100644 index 00000000..d048d90f Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0002.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0003.png b/assets/sprites/temperate_sprite/br1b-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0003.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0004.png b/assets/sprites/temperate_sprite/br1b-0004.png new file mode 100644 index 00000000..63d15b0a Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0004.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0005.png b/assets/sprites/temperate_sprite/br1b-0005.png new file mode 100644 index 00000000..600e747d Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0005.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0006.png b/assets/sprites/temperate_sprite/br1b-0006.png new file mode 100644 index 00000000..d239a8fc Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0006.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0007.png b/assets/sprites/temperate_sprite/br1b-0007.png new file mode 100644 index 00000000..a4de90b2 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0007.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0008.png b/assets/sprites/temperate_sprite/br1b-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0008.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0009.png b/assets/sprites/temperate_sprite/br1b-0009.png new file mode 100644 index 00000000..fb79445a Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0009.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0010.png b/assets/sprites/temperate_sprite/br1b-0010.png new file mode 100644 index 00000000..daa0b01c Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0010.png differ diff --git a/assets/sprites/temperate_sprite/br1b-0011.png b/assets/sprites/temperate_sprite/br1b-0011.png new file mode 100644 index 00000000..d232ef56 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1b-0011.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0000.png b/assets/sprites/temperate_sprite/br1c-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0000.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0001.png b/assets/sprites/temperate_sprite/br1c-0001.png new file mode 100644 index 00000000..4bc1758a Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0001.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0002.png b/assets/sprites/temperate_sprite/br1c-0002.png new file mode 100644 index 00000000..35678ac4 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0002.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0003.png b/assets/sprites/temperate_sprite/br1c-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0003.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0004.png b/assets/sprites/temperate_sprite/br1c-0004.png new file mode 100644 index 00000000..be739d70 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0004.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0005.png b/assets/sprites/temperate_sprite/br1c-0005.png new file mode 100644 index 00000000..6e6eaea0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0005.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0006.png b/assets/sprites/temperate_sprite/br1c-0006.png new file mode 100644 index 00000000..29d4d3c8 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0006.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0007.png b/assets/sprites/temperate_sprite/br1c-0007.png new file mode 100644 index 00000000..c6041a46 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0007.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0008.png b/assets/sprites/temperate_sprite/br1c-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0008.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0009.png b/assets/sprites/temperate_sprite/br1c-0009.png new file mode 100644 index 00000000..1f72c550 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0009.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0010.png b/assets/sprites/temperate_sprite/br1c-0010.png new file mode 100644 index 00000000..93bdb61c Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0010.png differ diff --git a/assets/sprites/temperate_sprite/br1c-0011.png b/assets/sprites/temperate_sprite/br1c-0011.png new file mode 100644 index 00000000..f96b0ccd Binary files /dev/null and b/assets/sprites/temperate_sprite/br1c-0011.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0000.png b/assets/sprites/temperate_sprite/br1x-0000.png new file mode 100644 index 00000000..7fd5f254 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0000.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0001.png b/assets/sprites/temperate_sprite/br1x-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0001.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0002.png b/assets/sprites/temperate_sprite/br1x-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0002.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0003.png b/assets/sprites/temperate_sprite/br1x-0003.png new file mode 100644 index 00000000..f78d2859 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0003.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0004.png b/assets/sprites/temperate_sprite/br1x-0004.png new file mode 100644 index 00000000..15a82c0f Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0004.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0005.png b/assets/sprites/temperate_sprite/br1x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0005.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0006.png b/assets/sprites/temperate_sprite/br1x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0006.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0007.png b/assets/sprites/temperate_sprite/br1x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0007.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0008.png b/assets/sprites/temperate_sprite/br1x-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0008.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0009.png b/assets/sprites/temperate_sprite/br1x-0009.png new file mode 100644 index 00000000..66693065 Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0009.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0010.png b/assets/sprites/temperate_sprite/br1x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0010.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0011.png b/assets/sprites/temperate_sprite/br1x-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0011.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0012.png b/assets/sprites/temperate_sprite/br1x-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0012.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0013.png b/assets/sprites/temperate_sprite/br1x-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0013.png differ diff --git a/assets/sprites/temperate_sprite/br1x-0014.png b/assets/sprites/temperate_sprite/br1x-0014.png new file mode 100644 index 00000000..8bb23b5b Binary files /dev/null and b/assets/sprites/temperate_sprite/br1x-0014.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0000.png b/assets/sprites/temperate_sprite/br2a-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0000.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0001.png b/assets/sprites/temperate_sprite/br2a-0001.png new file mode 100644 index 00000000..28a107f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0001.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0002.png b/assets/sprites/temperate_sprite/br2a-0002.png new file mode 100644 index 00000000..80f3c534 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0002.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0003.png b/assets/sprites/temperate_sprite/br2a-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0003.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0004.png b/assets/sprites/temperate_sprite/br2a-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0004.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0005.png b/assets/sprites/temperate_sprite/br2a-0005.png new file mode 100644 index 00000000..56e21643 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0005.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0006.png b/assets/sprites/temperate_sprite/br2a-0006.png new file mode 100644 index 00000000..605dc833 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0006.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0007.png b/assets/sprites/temperate_sprite/br2a-0007.png new file mode 100644 index 00000000..47dd03f0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0007.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0008.png b/assets/sprites/temperate_sprite/br2a-0008.png new file mode 100644 index 00000000..c50e3212 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0008.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0009.png b/assets/sprites/temperate_sprite/br2a-0009.png new file mode 100644 index 00000000..cbe889f0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0009.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0010.png b/assets/sprites/temperate_sprite/br2a-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0010.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0011.png b/assets/sprites/temperate_sprite/br2a-0011.png new file mode 100644 index 00000000..d45bfb8c Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0011.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0012.png b/assets/sprites/temperate_sprite/br2a-0012.png new file mode 100644 index 00000000..e4f2f871 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0012.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0013.png b/assets/sprites/temperate_sprite/br2a-0013.png new file mode 100644 index 00000000..a122ae60 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0013.png differ diff --git a/assets/sprites/temperate_sprite/br2a-0014.png b/assets/sprites/temperate_sprite/br2a-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2a-0014.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0000.png b/assets/sprites/temperate_sprite/br2b-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0000.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0001.png b/assets/sprites/temperate_sprite/br2b-0001.png new file mode 100644 index 00000000..5853f7e7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0001.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0002.png b/assets/sprites/temperate_sprite/br2b-0002.png new file mode 100644 index 00000000..9f08856b Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0002.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0003.png b/assets/sprites/temperate_sprite/br2b-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0003.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0004.png b/assets/sprites/temperate_sprite/br2b-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0004.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0005.png b/assets/sprites/temperate_sprite/br2b-0005.png new file mode 100644 index 00000000..2da8b3af Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0005.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0006.png b/assets/sprites/temperate_sprite/br2b-0006.png new file mode 100644 index 00000000..37457677 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0006.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0007.png b/assets/sprites/temperate_sprite/br2b-0007.png new file mode 100644 index 00000000..5c0441e6 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0007.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0008.png b/assets/sprites/temperate_sprite/br2b-0008.png new file mode 100644 index 00000000..58eea0ce Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0008.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0009.png b/assets/sprites/temperate_sprite/br2b-0009.png new file mode 100644 index 00000000..dc2f6f1b Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0009.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0010.png b/assets/sprites/temperate_sprite/br2b-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0010.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0011.png b/assets/sprites/temperate_sprite/br2b-0011.png new file mode 100644 index 00000000..48501692 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0011.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0012.png b/assets/sprites/temperate_sprite/br2b-0012.png new file mode 100644 index 00000000..07c0cbe7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0012.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0013.png b/assets/sprites/temperate_sprite/br2b-0013.png new file mode 100644 index 00000000..865a25a7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0013.png differ diff --git a/assets/sprites/temperate_sprite/br2b-0014.png b/assets/sprites/temperate_sprite/br2b-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2b-0014.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0000.png b/assets/sprites/temperate_sprite/br2c-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0000.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0001.png b/assets/sprites/temperate_sprite/br2c-0001.png new file mode 100644 index 00000000..cc812e69 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0001.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0002.png b/assets/sprites/temperate_sprite/br2c-0002.png new file mode 100644 index 00000000..69146f5d Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0002.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0003.png b/assets/sprites/temperate_sprite/br2c-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0003.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0004.png b/assets/sprites/temperate_sprite/br2c-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0004.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0005.png b/assets/sprites/temperate_sprite/br2c-0005.png new file mode 100644 index 00000000..35da07c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0005.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0006.png b/assets/sprites/temperate_sprite/br2c-0006.png new file mode 100644 index 00000000..37457677 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0006.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0007.png b/assets/sprites/temperate_sprite/br2c-0007.png new file mode 100644 index 00000000..35e233a8 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0007.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0008.png b/assets/sprites/temperate_sprite/br2c-0008.png new file mode 100644 index 00000000..dfdfbbab Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0008.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0009.png b/assets/sprites/temperate_sprite/br2c-0009.png new file mode 100644 index 00000000..00ee184f Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0009.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0010.png b/assets/sprites/temperate_sprite/br2c-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0010.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0011.png b/assets/sprites/temperate_sprite/br2c-0011.png new file mode 100644 index 00000000..48501692 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0011.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0012.png b/assets/sprites/temperate_sprite/br2c-0012.png new file mode 100644 index 00000000..07c0cbe7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0012.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0013.png b/assets/sprites/temperate_sprite/br2c-0013.png new file mode 100644 index 00000000..865a25a7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0013.png differ diff --git a/assets/sprites/temperate_sprite/br2c-0014.png b/assets/sprites/temperate_sprite/br2c-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2c-0014.png differ diff --git a/assets/sprites/temperate_sprite/br2x-0000.png b/assets/sprites/temperate_sprite/br2x-0000.png new file mode 100644 index 00000000..71e7f18c Binary files /dev/null and b/assets/sprites/temperate_sprite/br2x-0000.png differ diff --git a/assets/sprites/temperate_sprite/br2x-0001.png b/assets/sprites/temperate_sprite/br2x-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2x-0001.png differ diff --git a/assets/sprites/temperate_sprite/br2x-0002.png b/assets/sprites/temperate_sprite/br2x-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2x-0002.png differ diff --git a/assets/sprites/temperate_sprite/br2x-0003.png b/assets/sprites/temperate_sprite/br2x-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br2x-0003.png differ diff --git a/assets/sprites/temperate_sprite/br2x-0004.png b/assets/sprites/temperate_sprite/br2x-0004.png new file mode 100644 index 00000000..8a94daf8 Binary files /dev/null and b/assets/sprites/temperate_sprite/br2x-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0000.png b/assets/sprites/temperate_sprite/br3a-0000.png new file mode 100644 index 00000000..574eb5fc Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0001.png b/assets/sprites/temperate_sprite/br3a-0001.png new file mode 100644 index 00000000..0e2bed8f Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0002.png b/assets/sprites/temperate_sprite/br3a-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0003.png b/assets/sprites/temperate_sprite/br3a-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0004.png b/assets/sprites/temperate_sprite/br3a-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0005.png b/assets/sprites/temperate_sprite/br3a-0005.png new file mode 100644 index 00000000..7e73b742 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0006.png b/assets/sprites/temperate_sprite/br3a-0006.png new file mode 100644 index 00000000..c67952e1 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3a-0007.png b/assets/sprites/temperate_sprite/br3a-0007.png new file mode 100644 index 00000000..3a485ffe Binary files /dev/null and b/assets/sprites/temperate_sprite/br3a-0007.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0000.png b/assets/sprites/temperate_sprite/br3b-0000.png new file mode 100644 index 00000000..5b8224e8 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0001.png b/assets/sprites/temperate_sprite/br3b-0001.png new file mode 100644 index 00000000..b0b1966e Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0002.png b/assets/sprites/temperate_sprite/br3b-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0003.png b/assets/sprites/temperate_sprite/br3b-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0004.png b/assets/sprites/temperate_sprite/br3b-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0005.png b/assets/sprites/temperate_sprite/br3b-0005.png new file mode 100644 index 00000000..f75e673a Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0006.png b/assets/sprites/temperate_sprite/br3b-0006.png new file mode 100644 index 00000000..e5b375f0 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3b-0007.png b/assets/sprites/temperate_sprite/br3b-0007.png new file mode 100644 index 00000000..cc9f18d4 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3b-0007.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0000.png b/assets/sprites/temperate_sprite/br3c-0000.png new file mode 100644 index 00000000..7ce09133 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0001.png b/assets/sprites/temperate_sprite/br3c-0001.png new file mode 100644 index 00000000..ecd9966b Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0002.png b/assets/sprites/temperate_sprite/br3c-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0003.png b/assets/sprites/temperate_sprite/br3c-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0004.png b/assets/sprites/temperate_sprite/br3c-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0005.png b/assets/sprites/temperate_sprite/br3c-0005.png new file mode 100644 index 00000000..b4d261a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0006.png b/assets/sprites/temperate_sprite/br3c-0006.png new file mode 100644 index 00000000..61ac73cb Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3c-0007.png b/assets/sprites/temperate_sprite/br3c-0007.png new file mode 100644 index 00000000..c8b94985 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3c-0007.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0000.png b/assets/sprites/temperate_sprite/br3d-0000.png new file mode 100644 index 00000000..c211d6a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0001.png b/assets/sprites/temperate_sprite/br3d-0001.png new file mode 100644 index 00000000..8a4ae7de Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0002.png b/assets/sprites/temperate_sprite/br3d-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0003.png b/assets/sprites/temperate_sprite/br3d-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0004.png b/assets/sprites/temperate_sprite/br3d-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0005.png b/assets/sprites/temperate_sprite/br3d-0005.png new file mode 100644 index 00000000..21742606 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0006.png b/assets/sprites/temperate_sprite/br3d-0006.png new file mode 100644 index 00000000..bc5bbf07 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3d-0007.png b/assets/sprites/temperate_sprite/br3d-0007.png new file mode 100644 index 00000000..3768fce6 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3d-0007.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0000.png b/assets/sprites/temperate_sprite/br3e-0000.png new file mode 100644 index 00000000..24122988 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0001.png b/assets/sprites/temperate_sprite/br3e-0001.png new file mode 100644 index 00000000..0b24bddd Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0002.png b/assets/sprites/temperate_sprite/br3e-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0003.png b/assets/sprites/temperate_sprite/br3e-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0004.png b/assets/sprites/temperate_sprite/br3e-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0005.png b/assets/sprites/temperate_sprite/br3e-0005.png new file mode 100644 index 00000000..8ab89271 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0006.png b/assets/sprites/temperate_sprite/br3e-0006.png new file mode 100644 index 00000000..16c939e7 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3e-0007.png b/assets/sprites/temperate_sprite/br3e-0007.png new file mode 100644 index 00000000..31430172 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3e-0007.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0000.png b/assets/sprites/temperate_sprite/br3f-0000.png new file mode 100644 index 00000000..e55cdc37 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0000.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0001.png b/assets/sprites/temperate_sprite/br3f-0001.png new file mode 100644 index 00000000..4f777c3c Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0001.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0002.png b/assets/sprites/temperate_sprite/br3f-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0002.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0003.png b/assets/sprites/temperate_sprite/br3f-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0003.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0004.png b/assets/sprites/temperate_sprite/br3f-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0004.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0005.png b/assets/sprites/temperate_sprite/br3f-0005.png new file mode 100644 index 00000000..825e8797 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0005.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0006.png b/assets/sprites/temperate_sprite/br3f-0006.png new file mode 100644 index 00000000..38bcdb59 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0006.png differ diff --git a/assets/sprites/temperate_sprite/br3f-0007.png b/assets/sprites/temperate_sprite/br3f-0007.png new file mode 100644 index 00000000..31430172 Binary files /dev/null and b/assets/sprites/temperate_sprite/br3f-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0000.png b/assets/sprites/temperate_sprite/bridge1-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0001.png b/assets/sprites/temperate_sprite/bridge1-0001.png new file mode 100644 index 00000000..0fb9bd07 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0002.png b/assets/sprites/temperate_sprite/bridge1-0002.png new file mode 100644 index 00000000..d1138b2c Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0003.png b/assets/sprites/temperate_sprite/bridge1-0003.png new file mode 100644 index 00000000..ccf903bb Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0004.png b/assets/sprites/temperate_sprite/bridge1-0004.png new file mode 100644 index 00000000..40077498 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0005.png b/assets/sprites/temperate_sprite/bridge1-0005.png new file mode 100644 index 00000000..b1e47c04 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0006.png b/assets/sprites/temperate_sprite/bridge1-0006.png new file mode 100644 index 00000000..aa35282f Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0007.png b/assets/sprites/temperate_sprite/bridge1-0007.png new file mode 100644 index 00000000..a3d87d0e Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0008.png b/assets/sprites/temperate_sprite/bridge1-0008.png new file mode 100644 index 00000000..4bdd81ba Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0009.png b/assets/sprites/temperate_sprite/bridge1-0009.png new file mode 100644 index 00000000..f004fd1f Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0010.png b/assets/sprites/temperate_sprite/bridge1-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0010.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0011.png b/assets/sprites/temperate_sprite/bridge1-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0011.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0012.png b/assets/sprites/temperate_sprite/bridge1-0012.png new file mode 100644 index 00000000..7f8489e5 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0012.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0013.png b/assets/sprites/temperate_sprite/bridge1-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0013.png differ diff --git a/assets/sprites/temperate_sprite/bridge1-0014.png b/assets/sprites/temperate_sprite/bridge1-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1-0014.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0000.png b/assets/sprites/temperate_sprite/bridge1d-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0001.png b/assets/sprites/temperate_sprite/bridge1d-0001.png new file mode 100644 index 00000000..5912b9a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0002.png b/assets/sprites/temperate_sprite/bridge1d-0002.png new file mode 100644 index 00000000..23dd4e89 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0003.png b/assets/sprites/temperate_sprite/bridge1d-0003.png new file mode 100644 index 00000000..192a321d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0004.png b/assets/sprites/temperate_sprite/bridge1d-0004.png new file mode 100644 index 00000000..db2cf068 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0005.png b/assets/sprites/temperate_sprite/bridge1d-0005.png new file mode 100644 index 00000000..de4b6708 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0006.png b/assets/sprites/temperate_sprite/bridge1d-0006.png new file mode 100644 index 00000000..2f60e921 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0007.png b/assets/sprites/temperate_sprite/bridge1d-0007.png new file mode 100644 index 00000000..084e05e6 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0008.png b/assets/sprites/temperate_sprite/bridge1d-0008.png new file mode 100644 index 00000000..7cdc1b7d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0009.png b/assets/sprites/temperate_sprite/bridge1d-0009.png new file mode 100644 index 00000000..784cab28 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0010.png b/assets/sprites/temperate_sprite/bridge1d-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0010.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0011.png b/assets/sprites/temperate_sprite/bridge1d-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0011.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0012.png b/assets/sprites/temperate_sprite/bridge1d-0012.png new file mode 100644 index 00000000..7bd4e1ae Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0012.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0013.png b/assets/sprites/temperate_sprite/bridge1d-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0013.png differ diff --git a/assets/sprites/temperate_sprite/bridge1d-0014.png b/assets/sprites/temperate_sprite/bridge1d-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1d-0014.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0000.png b/assets/sprites/temperate_sprite/bridge1h-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0001.png b/assets/sprites/temperate_sprite/bridge1h-0001.png new file mode 100644 index 00000000..fb762aac Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0002.png b/assets/sprites/temperate_sprite/bridge1h-0002.png new file mode 100644 index 00000000..597ec245 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0003.png b/assets/sprites/temperate_sprite/bridge1h-0003.png new file mode 100644 index 00000000..7c134094 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0004.png b/assets/sprites/temperate_sprite/bridge1h-0004.png new file mode 100644 index 00000000..a2ce8df9 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0005.png b/assets/sprites/temperate_sprite/bridge1h-0005.png new file mode 100644 index 00000000..df08a6d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0006.png b/assets/sprites/temperate_sprite/bridge1h-0006.png new file mode 100644 index 00000000..88898af6 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0007.png b/assets/sprites/temperate_sprite/bridge1h-0007.png new file mode 100644 index 00000000..5d0c0bca Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0008.png b/assets/sprites/temperate_sprite/bridge1h-0008.png new file mode 100644 index 00000000..a5c0ab49 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0009.png b/assets/sprites/temperate_sprite/bridge1h-0009.png new file mode 100644 index 00000000..e9e5ea80 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0010.png b/assets/sprites/temperate_sprite/bridge1h-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0010.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0011.png b/assets/sprites/temperate_sprite/bridge1h-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0011.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0012.png b/assets/sprites/temperate_sprite/bridge1h-0012.png new file mode 100644 index 00000000..e02ff0f1 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0012.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0013.png b/assets/sprites/temperate_sprite/bridge1h-0013.png new file mode 100644 index 00000000..a5b19623 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0013.png differ diff --git a/assets/sprites/temperate_sprite/bridge1h-0014.png b/assets/sprites/temperate_sprite/bridge1h-0014.png new file mode 100644 index 00000000..e20a13ee Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1h-0014.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0000.png b/assets/sprites/temperate_sprite/bridge1x-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0001.png b/assets/sprites/temperate_sprite/bridge1x-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0002.png b/assets/sprites/temperate_sprite/bridge1x-0002.png new file mode 100644 index 00000000..b6469839 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0003.png b/assets/sprites/temperate_sprite/bridge1x-0003.png new file mode 100644 index 00000000..b1e4f232 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0004.png b/assets/sprites/temperate_sprite/bridge1x-0004.png new file mode 100644 index 00000000..f984c317 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0005.png b/assets/sprites/temperate_sprite/bridge1x-0005.png new file mode 100644 index 00000000..a12c8ba8 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0006.png b/assets/sprites/temperate_sprite/bridge1x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0007.png b/assets/sprites/temperate_sprite/bridge1x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0008.png b/assets/sprites/temperate_sprite/bridge1x-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0009.png b/assets/sprites/temperate_sprite/bridge1x-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0010.png b/assets/sprites/temperate_sprite/bridge1x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0010.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0011.png b/assets/sprites/temperate_sprite/bridge1x-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0011.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0012.png b/assets/sprites/temperate_sprite/bridge1x-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0012.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0013.png b/assets/sprites/temperate_sprite/bridge1x-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0013.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0014.png b/assets/sprites/temperate_sprite/bridge1x-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0014.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0015.png b/assets/sprites/temperate_sprite/bridge1x-0015.png new file mode 100644 index 00000000..5d89a701 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0015.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0016.png b/assets/sprites/temperate_sprite/bridge1x-0016.png new file mode 100644 index 00000000..38bb3f8f Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0016.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0017.png b/assets/sprites/temperate_sprite/bridge1x-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0017.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0018.png b/assets/sprites/temperate_sprite/bridge1x-0018.png new file mode 100644 index 00000000..9ab803df Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0018.png differ diff --git a/assets/sprites/temperate_sprite/bridge1x-0019.png b/assets/sprites/temperate_sprite/bridge1x-0019.png new file mode 100644 index 00000000..e20a13ee Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge1x-0019.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0000.png b/assets/sprites/temperate_sprite/bridge2-0000.png new file mode 100644 index 00000000..1da4f50d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0001.png b/assets/sprites/temperate_sprite/bridge2-0001.png new file mode 100644 index 00000000..ae89edaa Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0002.png b/assets/sprites/temperate_sprite/bridge2-0002.png new file mode 100644 index 00000000..33b36a86 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0003.png b/assets/sprites/temperate_sprite/bridge2-0003.png new file mode 100644 index 00000000..acc6e61b Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0004.png b/assets/sprites/temperate_sprite/bridge2-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0005.png b/assets/sprites/temperate_sprite/bridge2-0005.png new file mode 100644 index 00000000..bd953fb6 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0006.png b/assets/sprites/temperate_sprite/bridge2-0006.png new file mode 100644 index 00000000..8aea5929 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0007.png b/assets/sprites/temperate_sprite/bridge2-0007.png new file mode 100644 index 00000000..d6272b28 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0008.png b/assets/sprites/temperate_sprite/bridge2-0008.png new file mode 100644 index 00000000..486a11d3 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge2-0009.png b/assets/sprites/temperate_sprite/bridge2-0009.png new file mode 100644 index 00000000..f3eacca9 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0000.png b/assets/sprites/temperate_sprite/bridge2d-0000.png new file mode 100644 index 00000000..50df0cdc Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0001.png b/assets/sprites/temperate_sprite/bridge2d-0001.png new file mode 100644 index 00000000..15d328ae Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0002.png b/assets/sprites/temperate_sprite/bridge2d-0002.png new file mode 100644 index 00000000..4414215d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0003.png b/assets/sprites/temperate_sprite/bridge2d-0003.png new file mode 100644 index 00000000..62ab432c Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0004.png b/assets/sprites/temperate_sprite/bridge2d-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0005.png b/assets/sprites/temperate_sprite/bridge2d-0005.png new file mode 100644 index 00000000..5363391e Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0006.png b/assets/sprites/temperate_sprite/bridge2d-0006.png new file mode 100644 index 00000000..cdf5f3b4 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0007.png b/assets/sprites/temperate_sprite/bridge2d-0007.png new file mode 100644 index 00000000..3c5b7474 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0008.png b/assets/sprites/temperate_sprite/bridge2d-0008.png new file mode 100644 index 00000000..5cf0ef12 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge2d-0009.png b/assets/sprites/temperate_sprite/bridge2d-0009.png new file mode 100644 index 00000000..e9a5c931 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2d-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0000.png b/assets/sprites/temperate_sprite/bridge2h-0000.png new file mode 100644 index 00000000..4dece98a Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0001.png b/assets/sprites/temperate_sprite/bridge2h-0001.png new file mode 100644 index 00000000..1d7fb40d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0002.png b/assets/sprites/temperate_sprite/bridge2h-0002.png new file mode 100644 index 00000000..5dbd70a7 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0003.png b/assets/sprites/temperate_sprite/bridge2h-0003.png new file mode 100644 index 00000000..77c29de5 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0004.png b/assets/sprites/temperate_sprite/bridge2h-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0005.png b/assets/sprites/temperate_sprite/bridge2h-0005.png new file mode 100644 index 00000000..c9c595e8 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0006.png b/assets/sprites/temperate_sprite/bridge2h-0006.png new file mode 100644 index 00000000..7d8910ef Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0007.png b/assets/sprites/temperate_sprite/bridge2h-0007.png new file mode 100644 index 00000000..a322fa4b Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0008.png b/assets/sprites/temperate_sprite/bridge2h-0008.png new file mode 100644 index 00000000..07019974 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge2h-0009.png b/assets/sprites/temperate_sprite/bridge2h-0009.png new file mode 100644 index 00000000..cfb2088d Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2h-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0000.png b/assets/sprites/temperate_sprite/bridge2x-0000.png new file mode 100644 index 00000000..8788eb35 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0000.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0001.png b/assets/sprites/temperate_sprite/bridge2x-0001.png new file mode 100644 index 00000000..5b8871bd Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0001.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0002.png b/assets/sprites/temperate_sprite/bridge2x-0002.png new file mode 100644 index 00000000..62897ea0 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0002.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0003.png b/assets/sprites/temperate_sprite/bridge2x-0003.png new file mode 100644 index 00000000..83c7e2c5 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0003.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0004.png b/assets/sprites/temperate_sprite/bridge2x-0004.png new file mode 100644 index 00000000..c5f987c5 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0004.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0005.png b/assets/sprites/temperate_sprite/bridge2x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0005.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0006.png b/assets/sprites/temperate_sprite/bridge2x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0006.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0007.png b/assets/sprites/temperate_sprite/bridge2x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0007.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0008.png b/assets/sprites/temperate_sprite/bridge2x-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0008.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0009.png b/assets/sprites/temperate_sprite/bridge2x-0009.png new file mode 100644 index 00000000..b7a1df8e Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0009.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0010.png b/assets/sprites/temperate_sprite/bridge2x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0010.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0011.png b/assets/sprites/temperate_sprite/bridge2x-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0011.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0012.png b/assets/sprites/temperate_sprite/bridge2x-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0012.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0013.png b/assets/sprites/temperate_sprite/bridge2x-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0013.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0014.png b/assets/sprites/temperate_sprite/bridge2x-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0014.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0015.png b/assets/sprites/temperate_sprite/bridge2x-0015.png new file mode 100644 index 00000000..d816b7ce Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0015.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0016.png b/assets/sprites/temperate_sprite/bridge2x-0016.png new file mode 100644 index 00000000..0ac5af50 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0016.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0017.png b/assets/sprites/temperate_sprite/bridge2x-0017.png new file mode 100644 index 00000000..92ed6799 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0017.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0018.png b/assets/sprites/temperate_sprite/bridge2x-0018.png new file mode 100644 index 00000000..faebc6bf Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0018.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0019.png b/assets/sprites/temperate_sprite/bridge2x-0019.png new file mode 100644 index 00000000..beaf9631 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0019.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0020.png b/assets/sprites/temperate_sprite/bridge2x-0020.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0020.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0021.png b/assets/sprites/temperate_sprite/bridge2x-0021.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0021.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0022.png b/assets/sprites/temperate_sprite/bridge2x-0022.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0022.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0023.png b/assets/sprites/temperate_sprite/bridge2x-0023.png new file mode 100644 index 00000000..74915de3 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0023.png differ diff --git a/assets/sprites/temperate_sprite/bridge2x-0024.png b/assets/sprites/temperate_sprite/bridge2x-0024.png new file mode 100644 index 00000000..6542c598 Binary files /dev/null and b/assets/sprites/temperate_sprite/bridge2x-0024.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0000.png b/assets/sprites/temperate_sprite/clear1-0000.png new file mode 100644 index 00000000..62cf12fe Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0000.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0001.png b/assets/sprites/temperate_sprite/clear1-0001.png new file mode 100644 index 00000000..a70f90d5 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0001.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0002.png b/assets/sprites/temperate_sprite/clear1-0002.png new file mode 100644 index 00000000..5dc07a2f Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0002.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0003.png b/assets/sprites/temperate_sprite/clear1-0003.png new file mode 100644 index 00000000..3d242c7a Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0003.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0004.png b/assets/sprites/temperate_sprite/clear1-0004.png new file mode 100644 index 00000000..c2cc8a88 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0004.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0005.png b/assets/sprites/temperate_sprite/clear1-0005.png new file mode 100644 index 00000000..40847c0d Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0005.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0006.png b/assets/sprites/temperate_sprite/clear1-0006.png new file mode 100644 index 00000000..e6ffce20 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0006.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0007.png b/assets/sprites/temperate_sprite/clear1-0007.png new file mode 100644 index 00000000..cb9e383a Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0007.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0008.png b/assets/sprites/temperate_sprite/clear1-0008.png new file mode 100644 index 00000000..3fc0ea50 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0008.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0009.png b/assets/sprites/temperate_sprite/clear1-0009.png new file mode 100644 index 00000000..8060b2be Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0009.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0010.png b/assets/sprites/temperate_sprite/clear1-0010.png new file mode 100644 index 00000000..17f6bb83 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0010.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0011.png b/assets/sprites/temperate_sprite/clear1-0011.png new file mode 100644 index 00000000..9b6546e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0011.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0012.png b/assets/sprites/temperate_sprite/clear1-0012.png new file mode 100644 index 00000000..bbc36884 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0012.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0013.png b/assets/sprites/temperate_sprite/clear1-0013.png new file mode 100644 index 00000000..d35b535a Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0013.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0014.png b/assets/sprites/temperate_sprite/clear1-0014.png new file mode 100644 index 00000000..3079fc65 Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0014.png differ diff --git a/assets/sprites/temperate_sprite/clear1-0015.png b/assets/sprites/temperate_sprite/clear1-0015.png new file mode 100644 index 00000000..5b537c2a Binary files /dev/null and b/assets/sprites/temperate_sprite/clear1-0015.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl1-0000.png b/assets/sprites/temperate_sprite/cliffsl1-0000.png new file mode 100644 index 00000000..450e4a5f Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl1-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl1-0001.png b/assets/sprites/temperate_sprite/cliffsl1-0001.png new file mode 100644 index 00000000..2360a58e Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl1-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl2-0000.png b/assets/sprites/temperate_sprite/cliffsl2-0000.png new file mode 100644 index 00000000..aa550d2f Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl2-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl2-0001.png b/assets/sprites/temperate_sprite/cliffsl2-0001.png new file mode 100644 index 00000000..dae6d56a Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl2-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl3-0000.png b/assets/sprites/temperate_sprite/cliffsl3-0000.png new file mode 100644 index 00000000..61f1f048 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl3-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl3-0001.png b/assets/sprites/temperate_sprite/cliffsl3-0001.png new file mode 100644 index 00000000..9a1169e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl3-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl4-0000.png b/assets/sprites/temperate_sprite/cliffsl4-0000.png new file mode 100644 index 00000000..3fedb736 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl4-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsl4-0001.png b/assets/sprites/temperate_sprite/cliffsl4-0001.png new file mode 100644 index 00000000..cd782c01 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsl4-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw1-0000.png b/assets/sprites/temperate_sprite/cliffsw1-0000.png new file mode 100644 index 00000000..00774076 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw1-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw1-0001.png b/assets/sprites/temperate_sprite/cliffsw1-0001.png new file mode 100644 index 00000000..1765bfc6 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw1-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw2-0000.png b/assets/sprites/temperate_sprite/cliffsw2-0000.png new file mode 100644 index 00000000..9456f192 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw2-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw2-0001.png b/assets/sprites/temperate_sprite/cliffsw2-0001.png new file mode 100644 index 00000000..2592f70f Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw2-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw3-0000.png b/assets/sprites/temperate_sprite/cliffsw3-0000.png new file mode 100644 index 00000000..27127b68 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw3-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw3-0001.png b/assets/sprites/temperate_sprite/cliffsw3-0001.png new file mode 100644 index 00000000..4c8cdefb Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw3-0001.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw4-0000.png b/assets/sprites/temperate_sprite/cliffsw4-0000.png new file mode 100644 index 00000000..b0fdd97d Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw4-0000.png differ diff --git a/assets/sprites/temperate_sprite/cliffsw4-0001.png b/assets/sprites/temperate_sprite/cliffsw4-0001.png new file mode 100644 index 00000000..08daad91 Binary files /dev/null and b/assets/sprites/temperate_sprite/cliffsw4-0001.png differ diff --git a/assets/sprites/temperate_sprite/d01-0000.png b/assets/sprites/temperate_sprite/d01-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d01-0000.png differ diff --git a/assets/sprites/temperate_sprite/d01-0001.png b/assets/sprites/temperate_sprite/d01-0001.png new file mode 100644 index 00000000..b58edddf Binary files /dev/null and b/assets/sprites/temperate_sprite/d01-0001.png differ diff --git a/assets/sprites/temperate_sprite/d01-0002.png b/assets/sprites/temperate_sprite/d01-0002.png new file mode 100644 index 00000000..3895118b Binary files /dev/null and b/assets/sprites/temperate_sprite/d01-0002.png differ diff --git a/assets/sprites/temperate_sprite/d01-0003.png b/assets/sprites/temperate_sprite/d01-0003.png new file mode 100644 index 00000000..26cb14c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d01-0003.png differ diff --git a/assets/sprites/temperate_sprite/d02-0000.png b/assets/sprites/temperate_sprite/d02-0000.png new file mode 100644 index 00000000..8772de8a Binary files /dev/null and b/assets/sprites/temperate_sprite/d02-0000.png differ diff --git a/assets/sprites/temperate_sprite/d02-0001.png b/assets/sprites/temperate_sprite/d02-0001.png new file mode 100644 index 00000000..f36b9d70 Binary files /dev/null and b/assets/sprites/temperate_sprite/d02-0001.png differ diff --git a/assets/sprites/temperate_sprite/d02-0002.png b/assets/sprites/temperate_sprite/d02-0002.png new file mode 100644 index 00000000..dd5b18c4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d02-0002.png differ diff --git a/assets/sprites/temperate_sprite/d02-0003.png b/assets/sprites/temperate_sprite/d02-0003.png new file mode 100644 index 00000000..96053071 Binary files /dev/null and b/assets/sprites/temperate_sprite/d02-0003.png differ diff --git a/assets/sprites/temperate_sprite/d03-0000.png b/assets/sprites/temperate_sprite/d03-0000.png new file mode 100644 index 00000000..950d5744 Binary files /dev/null and b/assets/sprites/temperate_sprite/d03-0000.png differ diff --git a/assets/sprites/temperate_sprite/d03-0001.png b/assets/sprites/temperate_sprite/d03-0001.png new file mode 100644 index 00000000..e7a060b4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d03-0001.png differ diff --git a/assets/sprites/temperate_sprite/d04-0000.png b/assets/sprites/temperate_sprite/d04-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d04-0000.png differ diff --git a/assets/sprites/temperate_sprite/d04-0001.png b/assets/sprites/temperate_sprite/d04-0001.png new file mode 100644 index 00000000..9c587026 Binary files /dev/null and b/assets/sprites/temperate_sprite/d04-0001.png differ diff --git a/assets/sprites/temperate_sprite/d04-0002.png b/assets/sprites/temperate_sprite/d04-0002.png new file mode 100644 index 00000000..0e17bdd1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d04-0002.png differ diff --git a/assets/sprites/temperate_sprite/d04-0003.png b/assets/sprites/temperate_sprite/d04-0003.png new file mode 100644 index 00000000..130bce0b Binary files /dev/null and b/assets/sprites/temperate_sprite/d04-0003.png differ diff --git a/assets/sprites/temperate_sprite/d05-0000.png b/assets/sprites/temperate_sprite/d05-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0000.png differ diff --git a/assets/sprites/temperate_sprite/d05-0001.png b/assets/sprites/temperate_sprite/d05-0001.png new file mode 100644 index 00000000..05d5f6ea Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0001.png differ diff --git a/assets/sprites/temperate_sprite/d05-0002.png b/assets/sprites/temperate_sprite/d05-0002.png new file mode 100644 index 00000000..cbe0b34d Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0002.png differ diff --git a/assets/sprites/temperate_sprite/d05-0003.png b/assets/sprites/temperate_sprite/d05-0003.png new file mode 100644 index 00000000..debafb96 Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0003.png differ diff --git a/assets/sprites/temperate_sprite/d05-0004.png b/assets/sprites/temperate_sprite/d05-0004.png new file mode 100644 index 00000000..8d17e94d Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0004.png differ diff --git a/assets/sprites/temperate_sprite/d05-0005.png b/assets/sprites/temperate_sprite/d05-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0005.png differ diff --git a/assets/sprites/temperate_sprite/d05-0006.png b/assets/sprites/temperate_sprite/d05-0006.png new file mode 100644 index 00000000..b820f187 Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0006.png differ diff --git a/assets/sprites/temperate_sprite/d05-0007.png b/assets/sprites/temperate_sprite/d05-0007.png new file mode 100644 index 00000000..473b8ab0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0007.png differ diff --git a/assets/sprites/temperate_sprite/d05-0008.png b/assets/sprites/temperate_sprite/d05-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0008.png differ diff --git a/assets/sprites/temperate_sprite/d05-0009.png b/assets/sprites/temperate_sprite/d05-0009.png new file mode 100644 index 00000000..bb541214 Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0009.png differ diff --git a/assets/sprites/temperate_sprite/d05-0010.png b/assets/sprites/temperate_sprite/d05-0010.png new file mode 100644 index 00000000..353bd258 Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0010.png differ diff --git a/assets/sprites/temperate_sprite/d05-0011.png b/assets/sprites/temperate_sprite/d05-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d05-0011.png differ diff --git a/assets/sprites/temperate_sprite/d06-0000.png b/assets/sprites/temperate_sprite/d06-0000.png new file mode 100644 index 00000000..e884befb Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0000.png differ diff --git a/assets/sprites/temperate_sprite/d06-0001.png b/assets/sprites/temperate_sprite/d06-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0001.png differ diff --git a/assets/sprites/temperate_sprite/d06-0002.png b/assets/sprites/temperate_sprite/d06-0002.png new file mode 100644 index 00000000..c378c2f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0002.png differ diff --git a/assets/sprites/temperate_sprite/d06-0003.png b/assets/sprites/temperate_sprite/d06-0003.png new file mode 100644 index 00000000..bdef5cdf Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0003.png differ diff --git a/assets/sprites/temperate_sprite/d06-0004.png b/assets/sprites/temperate_sprite/d06-0004.png new file mode 100644 index 00000000..c703941c Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0004.png differ diff --git a/assets/sprites/temperate_sprite/d06-0005.png b/assets/sprites/temperate_sprite/d06-0005.png new file mode 100644 index 00000000..92a37a3d Binary files /dev/null and b/assets/sprites/temperate_sprite/d06-0005.png differ diff --git a/assets/sprites/temperate_sprite/d07-0000.png b/assets/sprites/temperate_sprite/d07-0000.png new file mode 100644 index 00000000..46d70c5c Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0000.png differ diff --git a/assets/sprites/temperate_sprite/d07-0001.png b/assets/sprites/temperate_sprite/d07-0001.png new file mode 100644 index 00000000..67b11daf Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0001.png differ diff --git a/assets/sprites/temperate_sprite/d07-0002.png b/assets/sprites/temperate_sprite/d07-0002.png new file mode 100644 index 00000000..47f4d7f4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0002.png differ diff --git a/assets/sprites/temperate_sprite/d07-0003.png b/assets/sprites/temperate_sprite/d07-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0003.png differ diff --git a/assets/sprites/temperate_sprite/d07-0004.png b/assets/sprites/temperate_sprite/d07-0004.png new file mode 100644 index 00000000..f6e5e1d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0004.png differ diff --git a/assets/sprites/temperate_sprite/d07-0005.png b/assets/sprites/temperate_sprite/d07-0005.png new file mode 100644 index 00000000..27436934 Binary files /dev/null and b/assets/sprites/temperate_sprite/d07-0005.png differ diff --git a/assets/sprites/temperate_sprite/d08-0000.png b/assets/sprites/temperate_sprite/d08-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0000.png differ diff --git a/assets/sprites/temperate_sprite/d08-0001.png b/assets/sprites/temperate_sprite/d08-0001.png new file mode 100644 index 00000000..ce39df9d Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0001.png differ diff --git a/assets/sprites/temperate_sprite/d08-0002.png b/assets/sprites/temperate_sprite/d08-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0002.png differ diff --git a/assets/sprites/temperate_sprite/d08-0003.png b/assets/sprites/temperate_sprite/d08-0003.png new file mode 100644 index 00000000..ed7f13a0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0003.png differ diff --git a/assets/sprites/temperate_sprite/d08-0004.png b/assets/sprites/temperate_sprite/d08-0004.png new file mode 100644 index 00000000..67f24a9c Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0004.png differ diff --git a/assets/sprites/temperate_sprite/d08-0005.png b/assets/sprites/temperate_sprite/d08-0005.png new file mode 100644 index 00000000..ae195493 Binary files /dev/null and b/assets/sprites/temperate_sprite/d08-0005.png differ diff --git a/assets/sprites/temperate_sprite/d09-0000.png b/assets/sprites/temperate_sprite/d09-0000.png new file mode 100644 index 00000000..74d32f31 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0000.png differ diff --git a/assets/sprites/temperate_sprite/d09-0001.png b/assets/sprites/temperate_sprite/d09-0001.png new file mode 100644 index 00000000..e781eb18 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0001.png differ diff --git a/assets/sprites/temperate_sprite/d09-0002.png b/assets/sprites/temperate_sprite/d09-0002.png new file mode 100644 index 00000000..a6be1eb5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0002.png differ diff --git a/assets/sprites/temperate_sprite/d09-0003.png b/assets/sprites/temperate_sprite/d09-0003.png new file mode 100644 index 00000000..a994b0b4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0003.png differ diff --git a/assets/sprites/temperate_sprite/d09-0004.png b/assets/sprites/temperate_sprite/d09-0004.png new file mode 100644 index 00000000..fb1785bd Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0004.png differ diff --git a/assets/sprites/temperate_sprite/d09-0005.png b/assets/sprites/temperate_sprite/d09-0005.png new file mode 100644 index 00000000..fd2ec7e4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0005.png differ diff --git a/assets/sprites/temperate_sprite/d09-0006.png b/assets/sprites/temperate_sprite/d09-0006.png new file mode 100644 index 00000000..b972adb2 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0006.png differ diff --git a/assets/sprites/temperate_sprite/d09-0007.png b/assets/sprites/temperate_sprite/d09-0007.png new file mode 100644 index 00000000..a0d89da4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0007.png differ diff --git a/assets/sprites/temperate_sprite/d09-0008.png b/assets/sprites/temperate_sprite/d09-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0008.png differ diff --git a/assets/sprites/temperate_sprite/d09-0009.png b/assets/sprites/temperate_sprite/d09-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0009.png differ diff --git a/assets/sprites/temperate_sprite/d09-0010.png b/assets/sprites/temperate_sprite/d09-0010.png new file mode 100644 index 00000000..23829812 Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0010.png differ diff --git a/assets/sprites/temperate_sprite/d09-0011.png b/assets/sprites/temperate_sprite/d09-0011.png new file mode 100644 index 00000000..8e1138cd Binary files /dev/null and b/assets/sprites/temperate_sprite/d09-0011.png differ diff --git a/assets/sprites/temperate_sprite/d10-0000.png b/assets/sprites/temperate_sprite/d10-0000.png new file mode 100644 index 00000000..7e806fe6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0000.png differ diff --git a/assets/sprites/temperate_sprite/d10-0001.png b/assets/sprites/temperate_sprite/d10-0001.png new file mode 100644 index 00000000..fe81ed9c Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0001.png differ diff --git a/assets/sprites/temperate_sprite/d10-0002.png b/assets/sprites/temperate_sprite/d10-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0002.png differ diff --git a/assets/sprites/temperate_sprite/d10-0003.png b/assets/sprites/temperate_sprite/d10-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0003.png differ diff --git a/assets/sprites/temperate_sprite/d10-0004.png b/assets/sprites/temperate_sprite/d10-0004.png new file mode 100644 index 00000000..975aca76 Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0004.png differ diff --git a/assets/sprites/temperate_sprite/d10-0005.png b/assets/sprites/temperate_sprite/d10-0005.png new file mode 100644 index 00000000..ead79d67 Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0005.png differ diff --git a/assets/sprites/temperate_sprite/d10-0006.png b/assets/sprites/temperate_sprite/d10-0006.png new file mode 100644 index 00000000..c10e6505 Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0006.png differ diff --git a/assets/sprites/temperate_sprite/d10-0007.png b/assets/sprites/temperate_sprite/d10-0007.png new file mode 100644 index 00000000..15940dd8 Binary files /dev/null and b/assets/sprites/temperate_sprite/d10-0007.png differ diff --git a/assets/sprites/temperate_sprite/d11-0000.png b/assets/sprites/temperate_sprite/d11-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0000.png differ diff --git a/assets/sprites/temperate_sprite/d11-0001.png b/assets/sprites/temperate_sprite/d11-0001.png new file mode 100644 index 00000000..805c3657 Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0001.png differ diff --git a/assets/sprites/temperate_sprite/d11-0002.png b/assets/sprites/temperate_sprite/d11-0002.png new file mode 100644 index 00000000..cbf6ada5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0002.png differ diff --git a/assets/sprites/temperate_sprite/d11-0003.png b/assets/sprites/temperate_sprite/d11-0003.png new file mode 100644 index 00000000..eab4a2b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0003.png differ diff --git a/assets/sprites/temperate_sprite/d11-0004.png b/assets/sprites/temperate_sprite/d11-0004.png new file mode 100644 index 00000000..1d938fd6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0004.png differ diff --git a/assets/sprites/temperate_sprite/d11-0005.png b/assets/sprites/temperate_sprite/d11-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d11-0005.png differ diff --git a/assets/sprites/temperate_sprite/d12-0000.png b/assets/sprites/temperate_sprite/d12-0000.png new file mode 100644 index 00000000..e8cd7ae2 Binary files /dev/null and b/assets/sprites/temperate_sprite/d12-0000.png differ diff --git a/assets/sprites/temperate_sprite/d12-0001.png b/assets/sprites/temperate_sprite/d12-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d12-0001.png differ diff --git a/assets/sprites/temperate_sprite/d12-0002.png b/assets/sprites/temperate_sprite/d12-0002.png new file mode 100644 index 00000000..fa53f514 Binary files /dev/null and b/assets/sprites/temperate_sprite/d12-0002.png differ diff --git a/assets/sprites/temperate_sprite/d12-0003.png b/assets/sprites/temperate_sprite/d12-0003.png new file mode 100644 index 00000000..04149607 Binary files /dev/null and b/assets/sprites/temperate_sprite/d12-0003.png differ diff --git a/assets/sprites/temperate_sprite/d13-0000.png b/assets/sprites/temperate_sprite/d13-0000.png new file mode 100644 index 00000000..66ae560b Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0000.png differ diff --git a/assets/sprites/temperate_sprite/d13-0001.png b/assets/sprites/temperate_sprite/d13-0001.png new file mode 100644 index 00000000..a1732875 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0001.png differ diff --git a/assets/sprites/temperate_sprite/d13-0002.png b/assets/sprites/temperate_sprite/d13-0002.png new file mode 100644 index 00000000..332c78d8 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0002.png differ diff --git a/assets/sprites/temperate_sprite/d13-0003.png b/assets/sprites/temperate_sprite/d13-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0003.png differ diff --git a/assets/sprites/temperate_sprite/d13-0004.png b/assets/sprites/temperate_sprite/d13-0004.png new file mode 100644 index 00000000..0b3dca09 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0004.png differ diff --git a/assets/sprites/temperate_sprite/d13-0005.png b/assets/sprites/temperate_sprite/d13-0005.png new file mode 100644 index 00000000..957062c4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0005.png differ diff --git a/assets/sprites/temperate_sprite/d13-0006.png b/assets/sprites/temperate_sprite/d13-0006.png new file mode 100644 index 00000000..7784f7e5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0006.png differ diff --git a/assets/sprites/temperate_sprite/d13-0007.png b/assets/sprites/temperate_sprite/d13-0007.png new file mode 100644 index 00000000..2857258a Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0007.png differ diff --git a/assets/sprites/temperate_sprite/d13-0008.png b/assets/sprites/temperate_sprite/d13-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0008.png differ diff --git a/assets/sprites/temperate_sprite/d13-0009.png b/assets/sprites/temperate_sprite/d13-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0009.png differ diff --git a/assets/sprites/temperate_sprite/d13-0010.png b/assets/sprites/temperate_sprite/d13-0010.png new file mode 100644 index 00000000..d26cdd20 Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0010.png differ diff --git a/assets/sprites/temperate_sprite/d13-0011.png b/assets/sprites/temperate_sprite/d13-0011.png new file mode 100644 index 00000000..9366a64c Binary files /dev/null and b/assets/sprites/temperate_sprite/d13-0011.png differ diff --git a/assets/sprites/temperate_sprite/d14-0000.png b/assets/sprites/temperate_sprite/d14-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0000.png differ diff --git a/assets/sprites/temperate_sprite/d14-0001.png b/assets/sprites/temperate_sprite/d14-0001.png new file mode 100644 index 00000000..3f3bd9d3 Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0001.png differ diff --git a/assets/sprites/temperate_sprite/d14-0002.png b/assets/sprites/temperate_sprite/d14-0002.png new file mode 100644 index 00000000..f391062f Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0002.png differ diff --git a/assets/sprites/temperate_sprite/d14-0003.png b/assets/sprites/temperate_sprite/d14-0003.png new file mode 100644 index 00000000..4d9368d0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0003.png differ diff --git a/assets/sprites/temperate_sprite/d14-0004.png b/assets/sprites/temperate_sprite/d14-0004.png new file mode 100644 index 00000000..de3b61db Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0004.png differ diff --git a/assets/sprites/temperate_sprite/d14-0005.png b/assets/sprites/temperate_sprite/d14-0005.png new file mode 100644 index 00000000..fa2ba2de Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0005.png differ diff --git a/assets/sprites/temperate_sprite/d14-0006.png b/assets/sprites/temperate_sprite/d14-0006.png new file mode 100644 index 00000000..40b8aa54 Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0006.png differ diff --git a/assets/sprites/temperate_sprite/d14-0007.png b/assets/sprites/temperate_sprite/d14-0007.png new file mode 100644 index 00000000..dfb06042 Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0007.png differ diff --git a/assets/sprites/temperate_sprite/d14-0008.png b/assets/sprites/temperate_sprite/d14-0008.png new file mode 100644 index 00000000..3c448c2c Binary files /dev/null and b/assets/sprites/temperate_sprite/d14-0008.png differ diff --git a/assets/sprites/temperate_sprite/d15-0000.png b/assets/sprites/temperate_sprite/d15-0000.png new file mode 100644 index 00000000..85941f28 Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0000.png differ diff --git a/assets/sprites/temperate_sprite/d15-0001.png b/assets/sprites/temperate_sprite/d15-0001.png new file mode 100644 index 00000000..1828637c Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0001.png differ diff --git a/assets/sprites/temperate_sprite/d15-0002.png b/assets/sprites/temperate_sprite/d15-0002.png new file mode 100644 index 00000000..b2a6519d Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0002.png differ diff --git a/assets/sprites/temperate_sprite/d15-0003.png b/assets/sprites/temperate_sprite/d15-0003.png new file mode 100644 index 00000000..84841211 Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0003.png differ diff --git a/assets/sprites/temperate_sprite/d15-0004.png b/assets/sprites/temperate_sprite/d15-0004.png new file mode 100644 index 00000000..97f1c77f Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0004.png differ diff --git a/assets/sprites/temperate_sprite/d15-0005.png b/assets/sprites/temperate_sprite/d15-0005.png new file mode 100644 index 00000000..a9d2a242 Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0005.png differ diff --git a/assets/sprites/temperate_sprite/d15-0006.png b/assets/sprites/temperate_sprite/d15-0006.png new file mode 100644 index 00000000..1b6c2b08 Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0006.png differ diff --git a/assets/sprites/temperate_sprite/d15-0007.png b/assets/sprites/temperate_sprite/d15-0007.png new file mode 100644 index 00000000..eeacaf2e Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0007.png differ diff --git a/assets/sprites/temperate_sprite/d15-0008.png b/assets/sprites/temperate_sprite/d15-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d15-0008.png differ diff --git a/assets/sprites/temperate_sprite/d16-0000.png b/assets/sprites/temperate_sprite/d16-0000.png new file mode 100644 index 00000000..e0666f14 Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0000.png differ diff --git a/assets/sprites/temperate_sprite/d16-0001.png b/assets/sprites/temperate_sprite/d16-0001.png new file mode 100644 index 00000000..143eb35a Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0001.png differ diff --git a/assets/sprites/temperate_sprite/d16-0002.png b/assets/sprites/temperate_sprite/d16-0002.png new file mode 100644 index 00000000..030c49e1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0002.png differ diff --git a/assets/sprites/temperate_sprite/d16-0003.png b/assets/sprites/temperate_sprite/d16-0003.png new file mode 100644 index 00000000..f2a0afcd Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0003.png differ diff --git a/assets/sprites/temperate_sprite/d16-0004.png b/assets/sprites/temperate_sprite/d16-0004.png new file mode 100644 index 00000000..010301cf Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0004.png differ diff --git a/assets/sprites/temperate_sprite/d16-0005.png b/assets/sprites/temperate_sprite/d16-0005.png new file mode 100644 index 00000000..7601c743 Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0005.png differ diff --git a/assets/sprites/temperate_sprite/d16-0006.png b/assets/sprites/temperate_sprite/d16-0006.png new file mode 100644 index 00000000..fe828512 Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0006.png differ diff --git a/assets/sprites/temperate_sprite/d16-0007.png b/assets/sprites/temperate_sprite/d16-0007.png new file mode 100644 index 00000000..57eb924c Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0007.png differ diff --git a/assets/sprites/temperate_sprite/d16-0008.png b/assets/sprites/temperate_sprite/d16-0008.png new file mode 100644 index 00000000..e51de039 Binary files /dev/null and b/assets/sprites/temperate_sprite/d16-0008.png differ diff --git a/assets/sprites/temperate_sprite/d17-0000.png b/assets/sprites/temperate_sprite/d17-0000.png new file mode 100644 index 00000000..6a52bd43 Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0000.png differ diff --git a/assets/sprites/temperate_sprite/d17-0001.png b/assets/sprites/temperate_sprite/d17-0001.png new file mode 100644 index 00000000..ac9cc08d Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0001.png differ diff --git a/assets/sprites/temperate_sprite/d17-0002.png b/assets/sprites/temperate_sprite/d17-0002.png new file mode 100644 index 00000000..34356879 Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0002.png differ diff --git a/assets/sprites/temperate_sprite/d17-0003.png b/assets/sprites/temperate_sprite/d17-0003.png new file mode 100644 index 00000000..7d87f911 Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0003.png differ diff --git a/assets/sprites/temperate_sprite/d17-0004.png b/assets/sprites/temperate_sprite/d17-0004.png new file mode 100644 index 00000000..a6b82ca7 Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0004.png differ diff --git a/assets/sprites/temperate_sprite/d17-0005.png b/assets/sprites/temperate_sprite/d17-0005.png new file mode 100644 index 00000000..df60e3cd Binary files /dev/null and b/assets/sprites/temperate_sprite/d17-0005.png differ diff --git a/assets/sprites/temperate_sprite/d18-0000.png b/assets/sprites/temperate_sprite/d18-0000.png new file mode 100644 index 00000000..b86e11c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0000.png differ diff --git a/assets/sprites/temperate_sprite/d18-0001.png b/assets/sprites/temperate_sprite/d18-0001.png new file mode 100644 index 00000000..b0ad533b Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0001.png differ diff --git a/assets/sprites/temperate_sprite/d18-0002.png b/assets/sprites/temperate_sprite/d18-0002.png new file mode 100644 index 00000000..9ee39620 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0002.png differ diff --git a/assets/sprites/temperate_sprite/d18-0003.png b/assets/sprites/temperate_sprite/d18-0003.png new file mode 100644 index 00000000..b8d0c009 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0003.png differ diff --git a/assets/sprites/temperate_sprite/d18-0004.png b/assets/sprites/temperate_sprite/d18-0004.png new file mode 100644 index 00000000..b67583e5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0004.png differ diff --git a/assets/sprites/temperate_sprite/d18-0005.png b/assets/sprites/temperate_sprite/d18-0005.png new file mode 100644 index 00000000..d6fbf54c Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0005.png differ diff --git a/assets/sprites/temperate_sprite/d18-0006.png b/assets/sprites/temperate_sprite/d18-0006.png new file mode 100644 index 00000000..e46852f3 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0006.png differ diff --git a/assets/sprites/temperate_sprite/d18-0007.png b/assets/sprites/temperate_sprite/d18-0007.png new file mode 100644 index 00000000..54de7033 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0007.png differ diff --git a/assets/sprites/temperate_sprite/d18-0008.png b/assets/sprites/temperate_sprite/d18-0008.png new file mode 100644 index 00000000..02498445 Binary files /dev/null and b/assets/sprites/temperate_sprite/d18-0008.png differ diff --git a/assets/sprites/temperate_sprite/d19-0000.png b/assets/sprites/temperate_sprite/d19-0000.png new file mode 100644 index 00000000..0365dac0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0000.png differ diff --git a/assets/sprites/temperate_sprite/d19-0001.png b/assets/sprites/temperate_sprite/d19-0001.png new file mode 100644 index 00000000..b104c50a Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0001.png differ diff --git a/assets/sprites/temperate_sprite/d19-0002.png b/assets/sprites/temperate_sprite/d19-0002.png new file mode 100644 index 00000000..8f04ca7c Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0002.png differ diff --git a/assets/sprites/temperate_sprite/d19-0003.png b/assets/sprites/temperate_sprite/d19-0003.png new file mode 100644 index 00000000..15e5c0cf Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0003.png differ diff --git a/assets/sprites/temperate_sprite/d19-0004.png b/assets/sprites/temperate_sprite/d19-0004.png new file mode 100644 index 00000000..96986d7e Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0004.png differ diff --git a/assets/sprites/temperate_sprite/d19-0005.png b/assets/sprites/temperate_sprite/d19-0005.png new file mode 100644 index 00000000..8f4f4a56 Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0005.png differ diff --git a/assets/sprites/temperate_sprite/d19-0006.png b/assets/sprites/temperate_sprite/d19-0006.png new file mode 100644 index 00000000..01c3fd8e Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0006.png differ diff --git a/assets/sprites/temperate_sprite/d19-0007.png b/assets/sprites/temperate_sprite/d19-0007.png new file mode 100644 index 00000000..93d5df38 Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0007.png differ diff --git a/assets/sprites/temperate_sprite/d19-0008.png b/assets/sprites/temperate_sprite/d19-0008.png new file mode 100644 index 00000000..58b60677 Binary files /dev/null and b/assets/sprites/temperate_sprite/d19-0008.png differ diff --git a/assets/sprites/temperate_sprite/d20-0000.png b/assets/sprites/temperate_sprite/d20-0000.png new file mode 100644 index 00000000..b3ccffae Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0000.png differ diff --git a/assets/sprites/temperate_sprite/d20-0001.png b/assets/sprites/temperate_sprite/d20-0001.png new file mode 100644 index 00000000..020cf34c Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0001.png differ diff --git a/assets/sprites/temperate_sprite/d20-0002.png b/assets/sprites/temperate_sprite/d20-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0002.png differ diff --git a/assets/sprites/temperate_sprite/d20-0003.png b/assets/sprites/temperate_sprite/d20-0003.png new file mode 100644 index 00000000..3f4d2d2c Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0003.png differ diff --git a/assets/sprites/temperate_sprite/d20-0004.png b/assets/sprites/temperate_sprite/d20-0004.png new file mode 100644 index 00000000..d4ad8ee1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0004.png differ diff --git a/assets/sprites/temperate_sprite/d20-0005.png b/assets/sprites/temperate_sprite/d20-0005.png new file mode 100644 index 00000000..e5d3748f Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0005.png differ diff --git a/assets/sprites/temperate_sprite/d20-0006.png b/assets/sprites/temperate_sprite/d20-0006.png new file mode 100644 index 00000000..39582d3a Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0006.png differ diff --git a/assets/sprites/temperate_sprite/d20-0007.png b/assets/sprites/temperate_sprite/d20-0007.png new file mode 100644 index 00000000..bf58f34a Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0007.png differ diff --git a/assets/sprites/temperate_sprite/d20-0008.png b/assets/sprites/temperate_sprite/d20-0008.png new file mode 100644 index 00000000..5f2fdd9e Binary files /dev/null and b/assets/sprites/temperate_sprite/d20-0008.png differ diff --git a/assets/sprites/temperate_sprite/d21-0000.png b/assets/sprites/temperate_sprite/d21-0000.png new file mode 100644 index 00000000..e5428048 Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0000.png differ diff --git a/assets/sprites/temperate_sprite/d21-0001.png b/assets/sprites/temperate_sprite/d21-0001.png new file mode 100644 index 00000000..4b041db8 Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0001.png differ diff --git a/assets/sprites/temperate_sprite/d21-0002.png b/assets/sprites/temperate_sprite/d21-0002.png new file mode 100644 index 00000000..67069a60 Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0002.png differ diff --git a/assets/sprites/temperate_sprite/d21-0003.png b/assets/sprites/temperate_sprite/d21-0003.png new file mode 100644 index 00000000..03e70b3b Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0003.png differ diff --git a/assets/sprites/temperate_sprite/d21-0004.png b/assets/sprites/temperate_sprite/d21-0004.png new file mode 100644 index 00000000..b661a585 Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0004.png differ diff --git a/assets/sprites/temperate_sprite/d21-0005.png b/assets/sprites/temperate_sprite/d21-0005.png new file mode 100644 index 00000000..e9a288b1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d21-0005.png differ diff --git a/assets/sprites/temperate_sprite/d22-0000.png b/assets/sprites/temperate_sprite/d22-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0000.png differ diff --git a/assets/sprites/temperate_sprite/d22-0001.png b/assets/sprites/temperate_sprite/d22-0001.png new file mode 100644 index 00000000..9144aa2a Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0001.png differ diff --git a/assets/sprites/temperate_sprite/d22-0002.png b/assets/sprites/temperate_sprite/d22-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0002.png differ diff --git a/assets/sprites/temperate_sprite/d22-0003.png b/assets/sprites/temperate_sprite/d22-0003.png new file mode 100644 index 00000000..bad26292 Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0003.png differ diff --git a/assets/sprites/temperate_sprite/d22-0004.png b/assets/sprites/temperate_sprite/d22-0004.png new file mode 100644 index 00000000..2e40aa6b Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0004.png differ diff --git a/assets/sprites/temperate_sprite/d22-0005.png b/assets/sprites/temperate_sprite/d22-0005.png new file mode 100644 index 00000000..a031fce7 Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0005.png differ diff --git a/assets/sprites/temperate_sprite/d22-0006.png b/assets/sprites/temperate_sprite/d22-0006.png new file mode 100644 index 00000000..d861e81e Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0006.png differ diff --git a/assets/sprites/temperate_sprite/d22-0007.png b/assets/sprites/temperate_sprite/d22-0007.png new file mode 100644 index 00000000..c557412f Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0007.png differ diff --git a/assets/sprites/temperate_sprite/d22-0008.png b/assets/sprites/temperate_sprite/d22-0008.png new file mode 100644 index 00000000..9d0862f3 Binary files /dev/null and b/assets/sprites/temperate_sprite/d22-0008.png differ diff --git a/assets/sprites/temperate_sprite/d23-0000.png b/assets/sprites/temperate_sprite/d23-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0000.png differ diff --git a/assets/sprites/temperate_sprite/d23-0001.png b/assets/sprites/temperate_sprite/d23-0001.png new file mode 100644 index 00000000..574d1607 Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0001.png differ diff --git a/assets/sprites/temperate_sprite/d23-0002.png b/assets/sprites/temperate_sprite/d23-0002.png new file mode 100644 index 00000000..4fb16929 Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0002.png differ diff --git a/assets/sprites/temperate_sprite/d23-0003.png b/assets/sprites/temperate_sprite/d23-0003.png new file mode 100644 index 00000000..16fb2453 Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0003.png differ diff --git a/assets/sprites/temperate_sprite/d23-0004.png b/assets/sprites/temperate_sprite/d23-0004.png new file mode 100644 index 00000000..7a5537f4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0004.png differ diff --git a/assets/sprites/temperate_sprite/d23-0005.png b/assets/sprites/temperate_sprite/d23-0005.png new file mode 100644 index 00000000..21eb479e Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0005.png differ diff --git a/assets/sprites/temperate_sprite/d23-0006.png b/assets/sprites/temperate_sprite/d23-0006.png new file mode 100644 index 00000000..b767fc69 Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0006.png differ diff --git a/assets/sprites/temperate_sprite/d23-0007.png b/assets/sprites/temperate_sprite/d23-0007.png new file mode 100644 index 00000000..b3fb949b Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0007.png differ diff --git a/assets/sprites/temperate_sprite/d23-0008.png b/assets/sprites/temperate_sprite/d23-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d23-0008.png differ diff --git a/assets/sprites/temperate_sprite/d24-0000.png b/assets/sprites/temperate_sprite/d24-0000.png new file mode 100644 index 00000000..e19255da Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0000.png differ diff --git a/assets/sprites/temperate_sprite/d24-0001.png b/assets/sprites/temperate_sprite/d24-0001.png new file mode 100644 index 00000000..683a16a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0001.png differ diff --git a/assets/sprites/temperate_sprite/d24-0002.png b/assets/sprites/temperate_sprite/d24-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0002.png differ diff --git a/assets/sprites/temperate_sprite/d24-0003.png b/assets/sprites/temperate_sprite/d24-0003.png new file mode 100644 index 00000000..a8abf1a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0003.png differ diff --git a/assets/sprites/temperate_sprite/d24-0004.png b/assets/sprites/temperate_sprite/d24-0004.png new file mode 100644 index 00000000..7a55d494 Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0004.png differ diff --git a/assets/sprites/temperate_sprite/d24-0005.png b/assets/sprites/temperate_sprite/d24-0005.png new file mode 100644 index 00000000..563fb36d Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0005.png differ diff --git a/assets/sprites/temperate_sprite/d24-0006.png b/assets/sprites/temperate_sprite/d24-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0006.png differ diff --git a/assets/sprites/temperate_sprite/d24-0007.png b/assets/sprites/temperate_sprite/d24-0007.png new file mode 100644 index 00000000..6bcac200 Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0007.png differ diff --git a/assets/sprites/temperate_sprite/d24-0008.png b/assets/sprites/temperate_sprite/d24-0008.png new file mode 100644 index 00000000..921ff0b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d24-0008.png differ diff --git a/assets/sprites/temperate_sprite/d25-0000.png b/assets/sprites/temperate_sprite/d25-0000.png new file mode 100644 index 00000000..4542cfdb Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0000.png differ diff --git a/assets/sprites/temperate_sprite/d25-0001.png b/assets/sprites/temperate_sprite/d25-0001.png new file mode 100644 index 00000000..300006b4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0001.png differ diff --git a/assets/sprites/temperate_sprite/d25-0002.png b/assets/sprites/temperate_sprite/d25-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0002.png differ diff --git a/assets/sprites/temperate_sprite/d25-0003.png b/assets/sprites/temperate_sprite/d25-0003.png new file mode 100644 index 00000000..f842f489 Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0003.png differ diff --git a/assets/sprites/temperate_sprite/d25-0004.png b/assets/sprites/temperate_sprite/d25-0004.png new file mode 100644 index 00000000..8c563d6c Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0004.png differ diff --git a/assets/sprites/temperate_sprite/d25-0005.png b/assets/sprites/temperate_sprite/d25-0005.png new file mode 100644 index 00000000..1f0af1eb Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0005.png differ diff --git a/assets/sprites/temperate_sprite/d25-0006.png b/assets/sprites/temperate_sprite/d25-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0006.png differ diff --git a/assets/sprites/temperate_sprite/d25-0007.png b/assets/sprites/temperate_sprite/d25-0007.png new file mode 100644 index 00000000..4a7d9d23 Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0007.png differ diff --git a/assets/sprites/temperate_sprite/d25-0008.png b/assets/sprites/temperate_sprite/d25-0008.png new file mode 100644 index 00000000..492e108f Binary files /dev/null and b/assets/sprites/temperate_sprite/d25-0008.png differ diff --git a/assets/sprites/temperate_sprite/d26-0000.png b/assets/sprites/temperate_sprite/d26-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d26-0000.png differ diff --git a/assets/sprites/temperate_sprite/d26-0001.png b/assets/sprites/temperate_sprite/d26-0001.png new file mode 100644 index 00000000..8cb4f4b0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d26-0001.png differ diff --git a/assets/sprites/temperate_sprite/d26-0002.png b/assets/sprites/temperate_sprite/d26-0002.png new file mode 100644 index 00000000..1d5e5afb Binary files /dev/null and b/assets/sprites/temperate_sprite/d26-0002.png differ diff --git a/assets/sprites/temperate_sprite/d26-0003.png b/assets/sprites/temperate_sprite/d26-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d26-0003.png differ diff --git a/assets/sprites/temperate_sprite/d27-0000.png b/assets/sprites/temperate_sprite/d27-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d27-0000.png differ diff --git a/assets/sprites/temperate_sprite/d27-0001.png b/assets/sprites/temperate_sprite/d27-0001.png new file mode 100644 index 00000000..15721db0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d27-0001.png differ diff --git a/assets/sprites/temperate_sprite/d27-0002.png b/assets/sprites/temperate_sprite/d27-0002.png new file mode 100644 index 00000000..6d25c543 Binary files /dev/null and b/assets/sprites/temperate_sprite/d27-0002.png differ diff --git a/assets/sprites/temperate_sprite/d27-0003.png b/assets/sprites/temperate_sprite/d27-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d27-0003.png differ diff --git a/assets/sprites/temperate_sprite/d28-0000.png b/assets/sprites/temperate_sprite/d28-0000.png new file mode 100644 index 00000000..2a5f1b64 Binary files /dev/null and b/assets/sprites/temperate_sprite/d28-0000.png differ diff --git a/assets/sprites/temperate_sprite/d28-0001.png b/assets/sprites/temperate_sprite/d28-0001.png new file mode 100644 index 00000000..d61990fc Binary files /dev/null and b/assets/sprites/temperate_sprite/d28-0001.png differ diff --git a/assets/sprites/temperate_sprite/d28-0002.png b/assets/sprites/temperate_sprite/d28-0002.png new file mode 100644 index 00000000..cede9ec5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d28-0002.png differ diff --git a/assets/sprites/temperate_sprite/d28-0003.png b/assets/sprites/temperate_sprite/d28-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d28-0003.png differ diff --git a/assets/sprites/temperate_sprite/d29-0000.png b/assets/sprites/temperate_sprite/d29-0000.png new file mode 100644 index 00000000..5f09d5d0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d29-0000.png differ diff --git a/assets/sprites/temperate_sprite/d29-0001.png b/assets/sprites/temperate_sprite/d29-0001.png new file mode 100644 index 00000000..ecf71232 Binary files /dev/null and b/assets/sprites/temperate_sprite/d29-0001.png differ diff --git a/assets/sprites/temperate_sprite/d29-0002.png b/assets/sprites/temperate_sprite/d29-0002.png new file mode 100644 index 00000000..855a9a32 Binary files /dev/null and b/assets/sprites/temperate_sprite/d29-0002.png differ diff --git a/assets/sprites/temperate_sprite/d29-0003.png b/assets/sprites/temperate_sprite/d29-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d29-0003.png differ diff --git a/assets/sprites/temperate_sprite/d30-0000.png b/assets/sprites/temperate_sprite/d30-0000.png new file mode 100644 index 00000000..f4eb1c46 Binary files /dev/null and b/assets/sprites/temperate_sprite/d30-0000.png differ diff --git a/assets/sprites/temperate_sprite/d30-0001.png b/assets/sprites/temperate_sprite/d30-0001.png new file mode 100644 index 00000000..4e145ccc Binary files /dev/null and b/assets/sprites/temperate_sprite/d30-0001.png differ diff --git a/assets/sprites/temperate_sprite/d30-0002.png b/assets/sprites/temperate_sprite/d30-0002.png new file mode 100644 index 00000000..efcaf1ff Binary files /dev/null and b/assets/sprites/temperate_sprite/d30-0002.png differ diff --git a/assets/sprites/temperate_sprite/d30-0003.png b/assets/sprites/temperate_sprite/d30-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d30-0003.png differ diff --git a/assets/sprites/temperate_sprite/d31-0000.png b/assets/sprites/temperate_sprite/d31-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d31-0000.png differ diff --git a/assets/sprites/temperate_sprite/d31-0001.png b/assets/sprites/temperate_sprite/d31-0001.png new file mode 100644 index 00000000..f99bf54e Binary files /dev/null and b/assets/sprites/temperate_sprite/d31-0001.png differ diff --git a/assets/sprites/temperate_sprite/d31-0002.png b/assets/sprites/temperate_sprite/d31-0002.png new file mode 100644 index 00000000..0448fd56 Binary files /dev/null and b/assets/sprites/temperate_sprite/d31-0002.png differ diff --git a/assets/sprites/temperate_sprite/d31-0003.png b/assets/sprites/temperate_sprite/d31-0003.png new file mode 100644 index 00000000..cafad8f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/d31-0003.png differ diff --git a/assets/sprites/temperate_sprite/d32-0000.png b/assets/sprites/temperate_sprite/d32-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d32-0000.png differ diff --git a/assets/sprites/temperate_sprite/d32-0001.png b/assets/sprites/temperate_sprite/d32-0001.png new file mode 100644 index 00000000..656fba38 Binary files /dev/null and b/assets/sprites/temperate_sprite/d32-0001.png differ diff --git a/assets/sprites/temperate_sprite/d32-0002.png b/assets/sprites/temperate_sprite/d32-0002.png new file mode 100644 index 00000000..9d0618ac Binary files /dev/null and b/assets/sprites/temperate_sprite/d32-0002.png differ diff --git a/assets/sprites/temperate_sprite/d32-0003.png b/assets/sprites/temperate_sprite/d32-0003.png new file mode 100644 index 00000000..1ad1231c Binary files /dev/null and b/assets/sprites/temperate_sprite/d32-0003.png differ diff --git a/assets/sprites/temperate_sprite/d33-0000.png b/assets/sprites/temperate_sprite/d33-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d33-0000.png differ diff --git a/assets/sprites/temperate_sprite/d33-0001.png b/assets/sprites/temperate_sprite/d33-0001.png new file mode 100644 index 00000000..e49d627f Binary files /dev/null and b/assets/sprites/temperate_sprite/d33-0001.png differ diff --git a/assets/sprites/temperate_sprite/d33-0002.png b/assets/sprites/temperate_sprite/d33-0002.png new file mode 100644 index 00000000..b6231bcc Binary files /dev/null and b/assets/sprites/temperate_sprite/d33-0002.png differ diff --git a/assets/sprites/temperate_sprite/d33-0003.png b/assets/sprites/temperate_sprite/d33-0003.png new file mode 100644 index 00000000..a7c4a733 Binary files /dev/null and b/assets/sprites/temperate_sprite/d33-0003.png differ diff --git a/assets/sprites/temperate_sprite/d34-0000.png b/assets/sprites/temperate_sprite/d34-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0000.png differ diff --git a/assets/sprites/temperate_sprite/d34-0001.png b/assets/sprites/temperate_sprite/d34-0001.png new file mode 100644 index 00000000..ae1f7579 Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0001.png differ diff --git a/assets/sprites/temperate_sprite/d34-0002.png b/assets/sprites/temperate_sprite/d34-0002.png new file mode 100644 index 00000000..2189b9ec Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0002.png differ diff --git a/assets/sprites/temperate_sprite/d34-0003.png b/assets/sprites/temperate_sprite/d34-0003.png new file mode 100644 index 00000000..a21f6abb Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0003.png differ diff --git a/assets/sprites/temperate_sprite/d34-0004.png b/assets/sprites/temperate_sprite/d34-0004.png new file mode 100644 index 00000000..f92b7f0c Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0004.png differ diff --git a/assets/sprites/temperate_sprite/d34-0005.png b/assets/sprites/temperate_sprite/d34-0005.png new file mode 100644 index 00000000..4b621004 Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0005.png differ diff --git a/assets/sprites/temperate_sprite/d34-0006.png b/assets/sprites/temperate_sprite/d34-0006.png new file mode 100644 index 00000000..a476029a Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0006.png differ diff --git a/assets/sprites/temperate_sprite/d34-0007.png b/assets/sprites/temperate_sprite/d34-0007.png new file mode 100644 index 00000000..2f72ccd0 Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0007.png differ diff --git a/assets/sprites/temperate_sprite/d34-0008.png b/assets/sprites/temperate_sprite/d34-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d34-0008.png differ diff --git a/assets/sprites/temperate_sprite/d35-0000.png b/assets/sprites/temperate_sprite/d35-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0000.png differ diff --git a/assets/sprites/temperate_sprite/d35-0001.png b/assets/sprites/temperate_sprite/d35-0001.png new file mode 100644 index 00000000..93e7d7a6 Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0001.png differ diff --git a/assets/sprites/temperate_sprite/d35-0002.png b/assets/sprites/temperate_sprite/d35-0002.png new file mode 100644 index 00000000..7ed86a1d Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0002.png differ diff --git a/assets/sprites/temperate_sprite/d35-0003.png b/assets/sprites/temperate_sprite/d35-0003.png new file mode 100644 index 00000000..44fc81df Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0003.png differ diff --git a/assets/sprites/temperate_sprite/d35-0004.png b/assets/sprites/temperate_sprite/d35-0004.png new file mode 100644 index 00000000..7013909b Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0004.png differ diff --git a/assets/sprites/temperate_sprite/d35-0005.png b/assets/sprites/temperate_sprite/d35-0005.png new file mode 100644 index 00000000..f4892ad2 Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0005.png differ diff --git a/assets/sprites/temperate_sprite/d35-0006.png b/assets/sprites/temperate_sprite/d35-0006.png new file mode 100644 index 00000000..e5d488dc Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0006.png differ diff --git a/assets/sprites/temperate_sprite/d35-0007.png b/assets/sprites/temperate_sprite/d35-0007.png new file mode 100644 index 00000000..81a648dc Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0007.png differ diff --git a/assets/sprites/temperate_sprite/d35-0008.png b/assets/sprites/temperate_sprite/d35-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d35-0008.png differ diff --git a/assets/sprites/temperate_sprite/d36-0000.png b/assets/sprites/temperate_sprite/d36-0000.png new file mode 100644 index 00000000..903171b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/d36-0000.png differ diff --git a/assets/sprites/temperate_sprite/d36-0001.png b/assets/sprites/temperate_sprite/d36-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d36-0001.png differ diff --git a/assets/sprites/temperate_sprite/d36-0002.png b/assets/sprites/temperate_sprite/d36-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d36-0002.png differ diff --git a/assets/sprites/temperate_sprite/d36-0003.png b/assets/sprites/temperate_sprite/d36-0003.png new file mode 100644 index 00000000..7b812cc4 Binary files /dev/null and b/assets/sprites/temperate_sprite/d36-0003.png differ diff --git a/assets/sprites/temperate_sprite/d37-0000.png b/assets/sprites/temperate_sprite/d37-0000.png new file mode 100644 index 00000000..383d3301 Binary files /dev/null and b/assets/sprites/temperate_sprite/d37-0000.png differ diff --git a/assets/sprites/temperate_sprite/d37-0001.png b/assets/sprites/temperate_sprite/d37-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d37-0001.png differ diff --git a/assets/sprites/temperate_sprite/d37-0002.png b/assets/sprites/temperate_sprite/d37-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d37-0002.png differ diff --git a/assets/sprites/temperate_sprite/d37-0003.png b/assets/sprites/temperate_sprite/d37-0003.png new file mode 100644 index 00000000..7345688c Binary files /dev/null and b/assets/sprites/temperate_sprite/d37-0003.png differ diff --git a/assets/sprites/temperate_sprite/d38-0000.png b/assets/sprites/temperate_sprite/d38-0000.png new file mode 100644 index 00000000..9c3991c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/d38-0000.png differ diff --git a/assets/sprites/temperate_sprite/d38-0001.png b/assets/sprites/temperate_sprite/d38-0001.png new file mode 100644 index 00000000..07aacc3b Binary files /dev/null and b/assets/sprites/temperate_sprite/d38-0001.png differ diff --git a/assets/sprites/temperate_sprite/d38-0002.png b/assets/sprites/temperate_sprite/d38-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d38-0002.png differ diff --git a/assets/sprites/temperate_sprite/d38-0003.png b/assets/sprites/temperate_sprite/d38-0003.png new file mode 100644 index 00000000..f6fa92a7 Binary files /dev/null and b/assets/sprites/temperate_sprite/d38-0003.png differ diff --git a/assets/sprites/temperate_sprite/d39-0000.png b/assets/sprites/temperate_sprite/d39-0000.png new file mode 100644 index 00000000..f1fa2a46 Binary files /dev/null and b/assets/sprites/temperate_sprite/d39-0000.png differ diff --git a/assets/sprites/temperate_sprite/d39-0001.png b/assets/sprites/temperate_sprite/d39-0001.png new file mode 100644 index 00000000..2026fe2a Binary files /dev/null and b/assets/sprites/temperate_sprite/d39-0001.png differ diff --git a/assets/sprites/temperate_sprite/d39-0002.png b/assets/sprites/temperate_sprite/d39-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d39-0002.png differ diff --git a/assets/sprites/temperate_sprite/d39-0003.png b/assets/sprites/temperate_sprite/d39-0003.png new file mode 100644 index 00000000..febd136d Binary files /dev/null and b/assets/sprites/temperate_sprite/d39-0003.png differ diff --git a/assets/sprites/temperate_sprite/d40-0000.png b/assets/sprites/temperate_sprite/d40-0000.png new file mode 100644 index 00000000..f57f7849 Binary files /dev/null and b/assets/sprites/temperate_sprite/d40-0000.png differ diff --git a/assets/sprites/temperate_sprite/d40-0001.png b/assets/sprites/temperate_sprite/d40-0001.png new file mode 100644 index 00000000..27bfbf04 Binary files /dev/null and b/assets/sprites/temperate_sprite/d40-0001.png differ diff --git a/assets/sprites/temperate_sprite/d40-0002.png b/assets/sprites/temperate_sprite/d40-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d40-0002.png differ diff --git a/assets/sprites/temperate_sprite/d40-0003.png b/assets/sprites/temperate_sprite/d40-0003.png new file mode 100644 index 00000000..dd957955 Binary files /dev/null and b/assets/sprites/temperate_sprite/d40-0003.png differ diff --git a/assets/sprites/temperate_sprite/d41-0000.png b/assets/sprites/temperate_sprite/d41-0000.png new file mode 100644 index 00000000..21659c66 Binary files /dev/null and b/assets/sprites/temperate_sprite/d41-0000.png differ diff --git a/assets/sprites/temperate_sprite/d41-0001.png b/assets/sprites/temperate_sprite/d41-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d41-0001.png differ diff --git a/assets/sprites/temperate_sprite/d41-0002.png b/assets/sprites/temperate_sprite/d41-0002.png new file mode 100644 index 00000000..903c2576 Binary files /dev/null and b/assets/sprites/temperate_sprite/d41-0002.png differ diff --git a/assets/sprites/temperate_sprite/d41-0003.png b/assets/sprites/temperate_sprite/d41-0003.png new file mode 100644 index 00000000..a3f95d60 Binary files /dev/null and b/assets/sprites/temperate_sprite/d41-0003.png differ diff --git a/assets/sprites/temperate_sprite/d42-0000.png b/assets/sprites/temperate_sprite/d42-0000.png new file mode 100644 index 00000000..03d09de5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d42-0000.png differ diff --git a/assets/sprites/temperate_sprite/d42-0001.png b/assets/sprites/temperate_sprite/d42-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d42-0001.png differ diff --git a/assets/sprites/temperate_sprite/d42-0002.png b/assets/sprites/temperate_sprite/d42-0002.png new file mode 100644 index 00000000..9022150e Binary files /dev/null and b/assets/sprites/temperate_sprite/d42-0002.png differ diff --git a/assets/sprites/temperate_sprite/d42-0003.png b/assets/sprites/temperate_sprite/d42-0003.png new file mode 100644 index 00000000..b80b616e Binary files /dev/null and b/assets/sprites/temperate_sprite/d42-0003.png differ diff --git a/assets/sprites/temperate_sprite/d43-0000.png b/assets/sprites/temperate_sprite/d43-0000.png new file mode 100644 index 00000000..a64f8756 Binary files /dev/null and b/assets/sprites/temperate_sprite/d43-0000.png differ diff --git a/assets/sprites/temperate_sprite/d43-0001.png b/assets/sprites/temperate_sprite/d43-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/d43-0001.png differ diff --git a/assets/sprites/temperate_sprite/d43-0002.png b/assets/sprites/temperate_sprite/d43-0002.png new file mode 100644 index 00000000..5959f2b5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d43-0002.png differ diff --git a/assets/sprites/temperate_sprite/d43-0003.png b/assets/sprites/temperate_sprite/d43-0003.png new file mode 100644 index 00000000..c66080d5 Binary files /dev/null and b/assets/sprites/temperate_sprite/d43-0003.png differ diff --git a/assets/sprites/temperate_sprite/d44-0000.png b/assets/sprites/temperate_sprite/d44-0000.png new file mode 100644 index 00000000..415abe7a Binary files /dev/null and b/assets/sprites/temperate_sprite/d44-0000.png differ diff --git a/assets/sprites/temperate_sprite/d45-0000.png b/assets/sprites/temperate_sprite/d45-0000.png new file mode 100644 index 00000000..2eeb9d0f Binary files /dev/null and b/assets/sprites/temperate_sprite/d45-0000.png differ diff --git a/assets/sprites/temperate_sprite/deca-0000.png b/assets/sprites/temperate_sprite/deca-0000.png new file mode 100644 index 00000000..d9ea5bfe Binary files /dev/null and b/assets/sprites/temperate_sprite/deca-0000.png differ diff --git a/assets/sprites/temperate_sprite/decb-0000.png b/assets/sprites/temperate_sprite/decb-0000.png new file mode 100644 index 00000000..4dbc26d7 Binary files /dev/null and b/assets/sprites/temperate_sprite/decb-0000.png differ diff --git a/assets/sprites/temperate_sprite/decc-0000.png b/assets/sprites/temperate_sprite/decc-0000.png new file mode 100644 index 00000000..060b4c64 Binary files /dev/null and b/assets/sprites/temperate_sprite/decc-0000.png differ diff --git a/assets/sprites/temperate_sprite/decd-0000.png b/assets/sprites/temperate_sprite/decd-0000.png new file mode 100644 index 00000000..9725dc6e Binary files /dev/null and b/assets/sprites/temperate_sprite/decd-0000.png differ diff --git a/assets/sprites/temperate_sprite/dece-0000.png b/assets/sprites/temperate_sprite/dece-0000.png new file mode 100644 index 00000000..35d3741a Binary files /dev/null and b/assets/sprites/temperate_sprite/dece-0000.png differ diff --git a/assets/sprites/temperate_sprite/decf-0000.png b/assets/sprites/temperate_sprite/decf-0000.png new file mode 100644 index 00000000..ccf6c1be Binary files /dev/null and b/assets/sprites/temperate_sprite/decf-0000.png differ diff --git a/assets/sprites/temperate_sprite/decg-0000.png b/assets/sprites/temperate_sprite/decg-0000.png new file mode 100644 index 00000000..8b7c0b81 Binary files /dev/null and b/assets/sprites/temperate_sprite/decg-0000.png differ diff --git a/assets/sprites/temperate_sprite/dech-0000.png b/assets/sprites/temperate_sprite/dech-0000.png new file mode 100644 index 00000000..7b874c5f Binary files /dev/null and b/assets/sprites/temperate_sprite/dech-0000.png differ diff --git a/assets/sprites/temperate_sprite/f01-0000.png b/assets/sprites/temperate_sprite/f01-0000.png new file mode 100644 index 00000000..e8ad5021 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0000.png differ diff --git a/assets/sprites/temperate_sprite/f01-0001.png b/assets/sprites/temperate_sprite/f01-0001.png new file mode 100644 index 00000000..ecefec9c Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0001.png differ diff --git a/assets/sprites/temperate_sprite/f01-0002.png b/assets/sprites/temperate_sprite/f01-0002.png new file mode 100644 index 00000000..efd82079 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0002.png differ diff --git a/assets/sprites/temperate_sprite/f01-0003.png b/assets/sprites/temperate_sprite/f01-0003.png new file mode 100644 index 00000000..c1c40fc4 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0003.png differ diff --git a/assets/sprites/temperate_sprite/f01-0004.png b/assets/sprites/temperate_sprite/f01-0004.png new file mode 100644 index 00000000..72e5fc03 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0004.png differ diff --git a/assets/sprites/temperate_sprite/f01-0005.png b/assets/sprites/temperate_sprite/f01-0005.png new file mode 100644 index 00000000..f655e95f Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0005.png differ diff --git a/assets/sprites/temperate_sprite/f01-0006.png b/assets/sprites/temperate_sprite/f01-0006.png new file mode 100644 index 00000000..a8a77ef5 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0006.png differ diff --git a/assets/sprites/temperate_sprite/f01-0007.png b/assets/sprites/temperate_sprite/f01-0007.png new file mode 100644 index 00000000..5863af27 Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0007.png differ diff --git a/assets/sprites/temperate_sprite/f01-0008.png b/assets/sprites/temperate_sprite/f01-0008.png new file mode 100644 index 00000000..f57f511e Binary files /dev/null and b/assets/sprites/temperate_sprite/f01-0008.png differ diff --git a/assets/sprites/temperate_sprite/f02-0000.png b/assets/sprites/temperate_sprite/f02-0000.png new file mode 100644 index 00000000..c09e22f8 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0000.png differ diff --git a/assets/sprites/temperate_sprite/f02-0001.png b/assets/sprites/temperate_sprite/f02-0001.png new file mode 100644 index 00000000..45e1241e Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0001.png differ diff --git a/assets/sprites/temperate_sprite/f02-0002.png b/assets/sprites/temperate_sprite/f02-0002.png new file mode 100644 index 00000000..dbe66575 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0002.png differ diff --git a/assets/sprites/temperate_sprite/f02-0003.png b/assets/sprites/temperate_sprite/f02-0003.png new file mode 100644 index 00000000..bfcdc495 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0003.png differ diff --git a/assets/sprites/temperate_sprite/f02-0004.png b/assets/sprites/temperate_sprite/f02-0004.png new file mode 100644 index 00000000..9a0126fa Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0004.png differ diff --git a/assets/sprites/temperate_sprite/f02-0005.png b/assets/sprites/temperate_sprite/f02-0005.png new file mode 100644 index 00000000..be680c64 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0005.png differ diff --git a/assets/sprites/temperate_sprite/f02-0006.png b/assets/sprites/temperate_sprite/f02-0006.png new file mode 100644 index 00000000..b9e8d765 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0006.png differ diff --git a/assets/sprites/temperate_sprite/f02-0007.png b/assets/sprites/temperate_sprite/f02-0007.png new file mode 100644 index 00000000..d10c1d64 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0007.png differ diff --git a/assets/sprites/temperate_sprite/f02-0008.png b/assets/sprites/temperate_sprite/f02-0008.png new file mode 100644 index 00000000..3eb574f9 Binary files /dev/null and b/assets/sprites/temperate_sprite/f02-0008.png differ diff --git a/assets/sprites/temperate_sprite/f03-0000.png b/assets/sprites/temperate_sprite/f03-0000.png new file mode 100644 index 00000000..5320cc35 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0000.png differ diff --git a/assets/sprites/temperate_sprite/f03-0001.png b/assets/sprites/temperate_sprite/f03-0001.png new file mode 100644 index 00000000..c65bd501 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0001.png differ diff --git a/assets/sprites/temperate_sprite/f03-0002.png b/assets/sprites/temperate_sprite/f03-0002.png new file mode 100644 index 00000000..47fc8f65 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0002.png differ diff --git a/assets/sprites/temperate_sprite/f03-0003.png b/assets/sprites/temperate_sprite/f03-0003.png new file mode 100644 index 00000000..35dcb879 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0003.png differ diff --git a/assets/sprites/temperate_sprite/f03-0004.png b/assets/sprites/temperate_sprite/f03-0004.png new file mode 100644 index 00000000..cbe93bde Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0004.png differ diff --git a/assets/sprites/temperate_sprite/f03-0005.png b/assets/sprites/temperate_sprite/f03-0005.png new file mode 100644 index 00000000..fb79cbb3 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0005.png differ diff --git a/assets/sprites/temperate_sprite/f03-0006.png b/assets/sprites/temperate_sprite/f03-0006.png new file mode 100644 index 00000000..11482421 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0006.png differ diff --git a/assets/sprites/temperate_sprite/f03-0007.png b/assets/sprites/temperate_sprite/f03-0007.png new file mode 100644 index 00000000..630d89c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0007.png differ diff --git a/assets/sprites/temperate_sprite/f03-0008.png b/assets/sprites/temperate_sprite/f03-0008.png new file mode 100644 index 00000000..15c4c91f Binary files /dev/null and b/assets/sprites/temperate_sprite/f03-0008.png differ diff --git a/assets/sprites/temperate_sprite/f04-0000.png b/assets/sprites/temperate_sprite/f04-0000.png new file mode 100644 index 00000000..5ba399ee Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0000.png differ diff --git a/assets/sprites/temperate_sprite/f04-0001.png b/assets/sprites/temperate_sprite/f04-0001.png new file mode 100644 index 00000000..a6dfe816 Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0001.png differ diff --git a/assets/sprites/temperate_sprite/f04-0002.png b/assets/sprites/temperate_sprite/f04-0002.png new file mode 100644 index 00000000..5a82ee14 Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0002.png differ diff --git a/assets/sprites/temperate_sprite/f04-0003.png b/assets/sprites/temperate_sprite/f04-0003.png new file mode 100644 index 00000000..62712014 Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0003.png differ diff --git a/assets/sprites/temperate_sprite/f04-0004.png b/assets/sprites/temperate_sprite/f04-0004.png new file mode 100644 index 00000000..7f1baec9 Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0004.png differ diff --git a/assets/sprites/temperate_sprite/f04-0005.png b/assets/sprites/temperate_sprite/f04-0005.png new file mode 100644 index 00000000..ac365feb Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0005.png differ diff --git a/assets/sprites/temperate_sprite/f04-0006.png b/assets/sprites/temperate_sprite/f04-0006.png new file mode 100644 index 00000000..b57cba98 Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0006.png differ diff --git a/assets/sprites/temperate_sprite/f04-0007.png b/assets/sprites/temperate_sprite/f04-0007.png new file mode 100644 index 00000000..dd33a22b Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0007.png differ diff --git a/assets/sprites/temperate_sprite/f04-0008.png b/assets/sprites/temperate_sprite/f04-0008.png new file mode 100644 index 00000000..6fc166ad Binary files /dev/null and b/assets/sprites/temperate_sprite/f04-0008.png differ diff --git a/assets/sprites/temperate_sprite/f05-0000.png b/assets/sprites/temperate_sprite/f05-0000.png new file mode 100644 index 00000000..5785d589 Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0000.png differ diff --git a/assets/sprites/temperate_sprite/f05-0001.png b/assets/sprites/temperate_sprite/f05-0001.png new file mode 100644 index 00000000..ce13257c Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0001.png differ diff --git a/assets/sprites/temperate_sprite/f05-0002.png b/assets/sprites/temperate_sprite/f05-0002.png new file mode 100644 index 00000000..c1d0105a Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0002.png differ diff --git a/assets/sprites/temperate_sprite/f05-0003.png b/assets/sprites/temperate_sprite/f05-0003.png new file mode 100644 index 00000000..55b62199 Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0003.png differ diff --git a/assets/sprites/temperate_sprite/f05-0004.png b/assets/sprites/temperate_sprite/f05-0004.png new file mode 100644 index 00000000..0e82220d Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0004.png differ diff --git a/assets/sprites/temperate_sprite/f05-0005.png b/assets/sprites/temperate_sprite/f05-0005.png new file mode 100644 index 00000000..d6f7c4c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0005.png differ diff --git a/assets/sprites/temperate_sprite/f05-0006.png b/assets/sprites/temperate_sprite/f05-0006.png new file mode 100644 index 00000000..b4fee672 Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0006.png differ diff --git a/assets/sprites/temperate_sprite/f05-0007.png b/assets/sprites/temperate_sprite/f05-0007.png new file mode 100644 index 00000000..009cbc8d Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0007.png differ diff --git a/assets/sprites/temperate_sprite/f05-0008.png b/assets/sprites/temperate_sprite/f05-0008.png new file mode 100644 index 00000000..fd544650 Binary files /dev/null and b/assets/sprites/temperate_sprite/f05-0008.png differ diff --git a/assets/sprites/temperate_sprite/f06-0000.png b/assets/sprites/temperate_sprite/f06-0000.png new file mode 100644 index 00000000..2005e5ec Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0000.png differ diff --git a/assets/sprites/temperate_sprite/f06-0001.png b/assets/sprites/temperate_sprite/f06-0001.png new file mode 100644 index 00000000..9d5d4cbd Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0001.png differ diff --git a/assets/sprites/temperate_sprite/f06-0002.png b/assets/sprites/temperate_sprite/f06-0002.png new file mode 100644 index 00000000..ead7e18f Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0002.png differ diff --git a/assets/sprites/temperate_sprite/f06-0003.png b/assets/sprites/temperate_sprite/f06-0003.png new file mode 100644 index 00000000..e62264ef Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0003.png differ diff --git a/assets/sprites/temperate_sprite/f06-0004.png b/assets/sprites/temperate_sprite/f06-0004.png new file mode 100644 index 00000000..6a9dd298 Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0004.png differ diff --git a/assets/sprites/temperate_sprite/f06-0005.png b/assets/sprites/temperate_sprite/f06-0005.png new file mode 100644 index 00000000..7f3dfd31 Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0005.png differ diff --git a/assets/sprites/temperate_sprite/f06-0006.png b/assets/sprites/temperate_sprite/f06-0006.png new file mode 100644 index 00000000..c997fea2 Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0006.png differ diff --git a/assets/sprites/temperate_sprite/f06-0007.png b/assets/sprites/temperate_sprite/f06-0007.png new file mode 100644 index 00000000..be81a3eb Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0007.png differ diff --git a/assets/sprites/temperate_sprite/f06-0008.png b/assets/sprites/temperate_sprite/f06-0008.png new file mode 100644 index 00000000..e315478a Binary files /dev/null and b/assets/sprites/temperate_sprite/f06-0008.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0000.png b/assets/sprites/temperate_sprite/falls1-0000.png new file mode 100644 index 00000000..43bfb0f1 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0000.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0001.png b/assets/sprites/temperate_sprite/falls1-0001.png new file mode 100644 index 00000000..41ba41de Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0001.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0002.png b/assets/sprites/temperate_sprite/falls1-0002.png new file mode 100644 index 00000000..52fc636c Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0002.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0003.png b/assets/sprites/temperate_sprite/falls1-0003.png new file mode 100644 index 00000000..da5a6f60 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0003.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0004.png b/assets/sprites/temperate_sprite/falls1-0004.png new file mode 100644 index 00000000..daec13db Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0004.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0005.png b/assets/sprites/temperate_sprite/falls1-0005.png new file mode 100644 index 00000000..af99c479 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0005.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0006.png b/assets/sprites/temperate_sprite/falls1-0006.png new file mode 100644 index 00000000..9d520792 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0006.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0007.png b/assets/sprites/temperate_sprite/falls1-0007.png new file mode 100644 index 00000000..09608862 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0007.png differ diff --git a/assets/sprites/temperate_sprite/falls1-0008.png b/assets/sprites/temperate_sprite/falls1-0008.png new file mode 100644 index 00000000..5a33b587 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1-0008.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0000.png b/assets/sprites/temperate_sprite/falls1a-0000.png new file mode 100644 index 00000000..4cdf390f Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0000.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0001.png b/assets/sprites/temperate_sprite/falls1a-0001.png new file mode 100644 index 00000000..a11ebe74 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0001.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0002.png b/assets/sprites/temperate_sprite/falls1a-0002.png new file mode 100644 index 00000000..f5ae4729 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0002.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0003.png b/assets/sprites/temperate_sprite/falls1a-0003.png new file mode 100644 index 00000000..9d30c6d0 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0003.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0004.png b/assets/sprites/temperate_sprite/falls1a-0004.png new file mode 100644 index 00000000..f4fc6c1e Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0004.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0005.png b/assets/sprites/temperate_sprite/falls1a-0005.png new file mode 100644 index 00000000..af99c479 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0005.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0006.png b/assets/sprites/temperate_sprite/falls1a-0006.png new file mode 100644 index 00000000..e55cdc37 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0006.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0007.png b/assets/sprites/temperate_sprite/falls1a-0007.png new file mode 100644 index 00000000..9c63e396 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0007.png differ diff --git a/assets/sprites/temperate_sprite/falls1a-0008.png b/assets/sprites/temperate_sprite/falls1a-0008.png new file mode 100644 index 00000000..5a33b587 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls1a-0008.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0000.png b/assets/sprites/temperate_sprite/falls2-0000.png new file mode 100644 index 00000000..37a020a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0000.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0001.png b/assets/sprites/temperate_sprite/falls2-0001.png new file mode 100644 index 00000000..579098b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0001.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0002.png b/assets/sprites/temperate_sprite/falls2-0002.png new file mode 100644 index 00000000..81ede16d Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0002.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0003.png b/assets/sprites/temperate_sprite/falls2-0003.png new file mode 100644 index 00000000..8a4d3f3d Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0003.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0004.png b/assets/sprites/temperate_sprite/falls2-0004.png new file mode 100644 index 00000000..1cbde20c Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0004.png differ diff --git a/assets/sprites/temperate_sprite/falls2-0005.png b/assets/sprites/temperate_sprite/falls2-0005.png new file mode 100644 index 00000000..ef3a08dd Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2-0005.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0000.png b/assets/sprites/temperate_sprite/falls2a-0000.png new file mode 100644 index 00000000..d7902d8c Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0000.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0001.png b/assets/sprites/temperate_sprite/falls2a-0001.png new file mode 100644 index 00000000..e98ee603 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0001.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0002.png b/assets/sprites/temperate_sprite/falls2a-0002.png new file mode 100644 index 00000000..f5dfeab0 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0002.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0003.png b/assets/sprites/temperate_sprite/falls2a-0003.png new file mode 100644 index 00000000..19985115 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0003.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0004.png b/assets/sprites/temperate_sprite/falls2a-0004.png new file mode 100644 index 00000000..1965f218 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0004.png differ diff --git a/assets/sprites/temperate_sprite/falls2a-0005.png b/assets/sprites/temperate_sprite/falls2a-0005.png new file mode 100644 index 00000000..43a53203 Binary files /dev/null and b/assets/sprites/temperate_sprite/falls2a-0005.png differ diff --git a/assets/sprites/temperate_sprite/fjord1-0000.png b/assets/sprites/temperate_sprite/fjord1-0000.png new file mode 100644 index 00000000..f56b58ac Binary files /dev/null and b/assets/sprites/temperate_sprite/fjord1-0000.png differ diff --git a/assets/sprites/temperate_sprite/fjord1-0001.png b/assets/sprites/temperate_sprite/fjord1-0001.png new file mode 100644 index 00000000..9e064f42 Binary files /dev/null and b/assets/sprites/temperate_sprite/fjord1-0001.png differ diff --git a/assets/sprites/temperate_sprite/fjord2-0000.png b/assets/sprites/temperate_sprite/fjord2-0000.png new file mode 100644 index 00000000..61fb66b0 Binary files /dev/null and b/assets/sprites/temperate_sprite/fjord2-0000.png differ diff --git a/assets/sprites/temperate_sprite/fjord2-0001.png b/assets/sprites/temperate_sprite/fjord2-0001.png new file mode 100644 index 00000000..349e23ad Binary files /dev/null and b/assets/sprites/temperate_sprite/fjord2-0001.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0000.png b/assets/sprites/temperate_sprite/ford1-0000.png new file mode 100644 index 00000000..0bbd08a5 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0000.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0001.png b/assets/sprites/temperate_sprite/ford1-0001.png new file mode 100644 index 00000000..6ef19175 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0001.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0002.png b/assets/sprites/temperate_sprite/ford1-0002.png new file mode 100644 index 00000000..0c50f618 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0002.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0003.png b/assets/sprites/temperate_sprite/ford1-0003.png new file mode 100644 index 00000000..0503492b Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0003.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0004.png b/assets/sprites/temperate_sprite/ford1-0004.png new file mode 100644 index 00000000..016a14d8 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0004.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0005.png b/assets/sprites/temperate_sprite/ford1-0005.png new file mode 100644 index 00000000..7c67f6ad Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0005.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0006.png b/assets/sprites/temperate_sprite/ford1-0006.png new file mode 100644 index 00000000..974d0c6c Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0006.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0007.png b/assets/sprites/temperate_sprite/ford1-0007.png new file mode 100644 index 00000000..f42bff24 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0007.png differ diff --git a/assets/sprites/temperate_sprite/ford1-0008.png b/assets/sprites/temperate_sprite/ford1-0008.png new file mode 100644 index 00000000..d8549ee2 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford1-0008.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0000.png b/assets/sprites/temperate_sprite/ford2-0000.png new file mode 100644 index 00000000..63806205 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0000.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0001.png b/assets/sprites/temperate_sprite/ford2-0001.png new file mode 100644 index 00000000..9d9d1e5a Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0001.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0002.png b/assets/sprites/temperate_sprite/ford2-0002.png new file mode 100644 index 00000000..a576a3b2 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0002.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0003.png b/assets/sprites/temperate_sprite/ford2-0003.png new file mode 100644 index 00000000..9b057e6e Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0003.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0004.png b/assets/sprites/temperate_sprite/ford2-0004.png new file mode 100644 index 00000000..cf0ecdf3 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0004.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0005.png b/assets/sprites/temperate_sprite/ford2-0005.png new file mode 100644 index 00000000..88296b46 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0005.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0006.png b/assets/sprites/temperate_sprite/ford2-0006.png new file mode 100644 index 00000000..83761b9a Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0006.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0007.png b/assets/sprites/temperate_sprite/ford2-0007.png new file mode 100644 index 00000000..979a8ac8 Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0007.png differ diff --git a/assets/sprites/temperate_sprite/ford2-0008.png b/assets/sprites/temperate_sprite/ford2-0008.png new file mode 100644 index 00000000..8bd20cfa Binary files /dev/null and b/assets/sprites/temperate_sprite/ford2-0008.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0000.png b/assets/sprites/temperate_sprite/hill01-0000.png new file mode 100644 index 00000000..cc6487de Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0000.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0001.png b/assets/sprites/temperate_sprite/hill01-0001.png new file mode 100644 index 00000000..79037eb9 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0001.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0002.png b/assets/sprites/temperate_sprite/hill01-0002.png new file mode 100644 index 00000000..11421c67 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0002.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0003.png b/assets/sprites/temperate_sprite/hill01-0003.png new file mode 100644 index 00000000..2fec1153 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0003.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0004.png b/assets/sprites/temperate_sprite/hill01-0004.png new file mode 100644 index 00000000..5e94d3ca Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0004.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0005.png b/assets/sprites/temperate_sprite/hill01-0005.png new file mode 100644 index 00000000..93bccaae Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0005.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0006.png b/assets/sprites/temperate_sprite/hill01-0006.png new file mode 100644 index 00000000..b0c1e1ee Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0006.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0007.png b/assets/sprites/temperate_sprite/hill01-0007.png new file mode 100644 index 00000000..4a0315c5 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0007.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0008.png b/assets/sprites/temperate_sprite/hill01-0008.png new file mode 100644 index 00000000..79bee954 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0008.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0009.png b/assets/sprites/temperate_sprite/hill01-0009.png new file mode 100644 index 00000000..a0c9af7a Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0009.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0010.png b/assets/sprites/temperate_sprite/hill01-0010.png new file mode 100644 index 00000000..05faf230 Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0010.png differ diff --git a/assets/sprites/temperate_sprite/hill01-0011.png b/assets/sprites/temperate_sprite/hill01-0011.png new file mode 100644 index 00000000..a9caf36e Binary files /dev/null and b/assets/sprites/temperate_sprite/hill01-0011.png differ diff --git a/assets/sprites/temperate_sprite/p01-0000.png b/assets/sprites/temperate_sprite/p01-0000.png new file mode 100644 index 00000000..bee0d30f Binary files /dev/null and b/assets/sprites/temperate_sprite/p01-0000.png differ diff --git a/assets/sprites/temperate_sprite/p02-0000.png b/assets/sprites/temperate_sprite/p02-0000.png new file mode 100644 index 00000000..c79c82c8 Binary files /dev/null and b/assets/sprites/temperate_sprite/p02-0000.png differ diff --git a/assets/sprites/temperate_sprite/p03-0000.png b/assets/sprites/temperate_sprite/p03-0000.png new file mode 100644 index 00000000..44944a46 Binary files /dev/null and b/assets/sprites/temperate_sprite/p03-0000.png differ diff --git a/assets/sprites/temperate_sprite/p04-0000.png b/assets/sprites/temperate_sprite/p04-0000.png new file mode 100644 index 00000000..1a96ea70 Binary files /dev/null and b/assets/sprites/temperate_sprite/p04-0000.png differ diff --git a/assets/sprites/temperate_sprite/p07-0000.png b/assets/sprites/temperate_sprite/p07-0000.png new file mode 100644 index 00000000..15e8a762 Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0000.png differ diff --git a/assets/sprites/temperate_sprite/p07-0001.png b/assets/sprites/temperate_sprite/p07-0001.png new file mode 100644 index 00000000..e444318a Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0001.png differ diff --git a/assets/sprites/temperate_sprite/p07-0002.png b/assets/sprites/temperate_sprite/p07-0002.png new file mode 100644 index 00000000..fbdf6b5e Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0002.png differ diff --git a/assets/sprites/temperate_sprite/p07-0003.png b/assets/sprites/temperate_sprite/p07-0003.png new file mode 100644 index 00000000..b2504262 Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0003.png differ diff --git a/assets/sprites/temperate_sprite/p07-0004.png b/assets/sprites/temperate_sprite/p07-0004.png new file mode 100644 index 00000000..84554657 Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0004.png differ diff --git a/assets/sprites/temperate_sprite/p07-0005.png b/assets/sprites/temperate_sprite/p07-0005.png new file mode 100644 index 00000000..c45585c0 Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0005.png differ diff --git a/assets/sprites/temperate_sprite/p07-0006.png b/assets/sprites/temperate_sprite/p07-0006.png new file mode 100644 index 00000000..97aedaff Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0006.png differ diff --git a/assets/sprites/temperate_sprite/p07-0007.png b/assets/sprites/temperate_sprite/p07-0007.png new file mode 100644 index 00000000..f86ad8af Binary files /dev/null and b/assets/sprites/temperate_sprite/p07-0007.png differ diff --git a/assets/sprites/temperate_sprite/p08-0000.png b/assets/sprites/temperate_sprite/p08-0000.png new file mode 100644 index 00000000..2c788799 Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0000.png differ diff --git a/assets/sprites/temperate_sprite/p08-0001.png b/assets/sprites/temperate_sprite/p08-0001.png new file mode 100644 index 00000000..6f1f554b Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0001.png differ diff --git a/assets/sprites/temperate_sprite/p08-0002.png b/assets/sprites/temperate_sprite/p08-0002.png new file mode 100644 index 00000000..108da99c Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0002.png differ diff --git a/assets/sprites/temperate_sprite/p08-0003.png b/assets/sprites/temperate_sprite/p08-0003.png new file mode 100644 index 00000000..00412b72 Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0003.png differ diff --git a/assets/sprites/temperate_sprite/p08-0004.png b/assets/sprites/temperate_sprite/p08-0004.png new file mode 100644 index 00000000..0d7ff3ca Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0004.png differ diff --git a/assets/sprites/temperate_sprite/p08-0005.png b/assets/sprites/temperate_sprite/p08-0005.png new file mode 100644 index 00000000..11059b19 Binary files /dev/null and b/assets/sprites/temperate_sprite/p08-0005.png differ diff --git a/assets/sprites/temperate_sprite/p13-0000.png b/assets/sprites/temperate_sprite/p13-0000.png new file mode 100644 index 00000000..6f47b99d Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0000.png differ diff --git a/assets/sprites/temperate_sprite/p13-0001.png b/assets/sprites/temperate_sprite/p13-0001.png new file mode 100644 index 00000000..a28ad6b7 Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0001.png differ diff --git a/assets/sprites/temperate_sprite/p13-0002.png b/assets/sprites/temperate_sprite/p13-0002.png new file mode 100644 index 00000000..09d0ce0b Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0002.png differ diff --git a/assets/sprites/temperate_sprite/p13-0003.png b/assets/sprites/temperate_sprite/p13-0003.png new file mode 100644 index 00000000..2deab568 Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0003.png differ diff --git a/assets/sprites/temperate_sprite/p13-0004.png b/assets/sprites/temperate_sprite/p13-0004.png new file mode 100644 index 00000000..3f0b0ace Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0004.png differ diff --git a/assets/sprites/temperate_sprite/p13-0005.png b/assets/sprites/temperate_sprite/p13-0005.png new file mode 100644 index 00000000..f60e7f26 Binary files /dev/null and b/assets/sprites/temperate_sprite/p13-0005.png differ diff --git a/assets/sprites/temperate_sprite/p14-0000.png b/assets/sprites/temperate_sprite/p14-0000.png new file mode 100644 index 00000000..94628d7e Binary files /dev/null and b/assets/sprites/temperate_sprite/p14-0000.png differ diff --git a/assets/sprites/temperate_sprite/p14-0001.png b/assets/sprites/temperate_sprite/p14-0001.png new file mode 100644 index 00000000..eaeefebc Binary files /dev/null and b/assets/sprites/temperate_sprite/p14-0001.png differ diff --git a/assets/sprites/temperate_sprite/rc01-0000.png b/assets/sprites/temperate_sprite/rc01-0000.png new file mode 100644 index 00000000..919d9e17 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc01-0000.png differ diff --git a/assets/sprites/temperate_sprite/rc01-0001.png b/assets/sprites/temperate_sprite/rc01-0001.png new file mode 100644 index 00000000..0448f0bd Binary files /dev/null and b/assets/sprites/temperate_sprite/rc01-0001.png differ diff --git a/assets/sprites/temperate_sprite/rc01-0002.png b/assets/sprites/temperate_sprite/rc01-0002.png new file mode 100644 index 00000000..f02b6219 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc01-0002.png differ diff --git a/assets/sprites/temperate_sprite/rc01-0003.png b/assets/sprites/temperate_sprite/rc01-0003.png new file mode 100644 index 00000000..d57886c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc01-0003.png differ diff --git a/assets/sprites/temperate_sprite/rc02-0000.png b/assets/sprites/temperate_sprite/rc02-0000.png new file mode 100644 index 00000000..438b74d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc02-0000.png differ diff --git a/assets/sprites/temperate_sprite/rc02-0001.png b/assets/sprites/temperate_sprite/rc02-0001.png new file mode 100644 index 00000000..b6755777 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc02-0001.png differ diff --git a/assets/sprites/temperate_sprite/rc02-0002.png b/assets/sprites/temperate_sprite/rc02-0002.png new file mode 100644 index 00000000..f0f9bb29 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc02-0002.png differ diff --git a/assets/sprites/temperate_sprite/rc02-0003.png b/assets/sprites/temperate_sprite/rc02-0003.png new file mode 100644 index 00000000..d8f30f0d Binary files /dev/null and b/assets/sprites/temperate_sprite/rc02-0003.png differ diff --git a/assets/sprites/temperate_sprite/rc03-0000.png b/assets/sprites/temperate_sprite/rc03-0000.png new file mode 100644 index 00000000..916304a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc03-0000.png differ diff --git a/assets/sprites/temperate_sprite/rc03-0001.png b/assets/sprites/temperate_sprite/rc03-0001.png new file mode 100644 index 00000000..f9fdcf9d Binary files /dev/null and b/assets/sprites/temperate_sprite/rc03-0001.png differ diff --git a/assets/sprites/temperate_sprite/rc03-0002.png b/assets/sprites/temperate_sprite/rc03-0002.png new file mode 100644 index 00000000..027f86aa Binary files /dev/null and b/assets/sprites/temperate_sprite/rc03-0002.png differ diff --git a/assets/sprites/temperate_sprite/rc03-0003.png b/assets/sprites/temperate_sprite/rc03-0003.png new file mode 100644 index 00000000..10adab7f Binary files /dev/null and b/assets/sprites/temperate_sprite/rc03-0003.png differ diff --git a/assets/sprites/temperate_sprite/rc04-0000.png b/assets/sprites/temperate_sprite/rc04-0000.png new file mode 100644 index 00000000..b6debf80 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc04-0000.png differ diff --git a/assets/sprites/temperate_sprite/rc04-0001.png b/assets/sprites/temperate_sprite/rc04-0001.png new file mode 100644 index 00000000..5c5265be Binary files /dev/null and b/assets/sprites/temperate_sprite/rc04-0001.png differ diff --git a/assets/sprites/temperate_sprite/rc04-0002.png b/assets/sprites/temperate_sprite/rc04-0002.png new file mode 100644 index 00000000..4089da93 Binary files /dev/null and b/assets/sprites/temperate_sprite/rc04-0002.png differ diff --git a/assets/sprites/temperate_sprite/rc04-0003.png b/assets/sprites/temperate_sprite/rc04-0003.png new file mode 100644 index 00000000..84cd87dc Binary files /dev/null and b/assets/sprites/temperate_sprite/rc04-0003.png differ diff --git a/assets/sprites/temperate_sprite/rf01-0000.png b/assets/sprites/temperate_sprite/rf01-0000.png new file mode 100644 index 00000000..680ec265 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf01-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf02-0000.png b/assets/sprites/temperate_sprite/rf02-0000.png new file mode 100644 index 00000000..1cb2999e Binary files /dev/null and b/assets/sprites/temperate_sprite/rf02-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf03-0000.png b/assets/sprites/temperate_sprite/rf03-0000.png new file mode 100644 index 00000000..1d2f04e8 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf03-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf04-0000.png b/assets/sprites/temperate_sprite/rf04-0000.png new file mode 100644 index 00000000..e0ed59ac Binary files /dev/null and b/assets/sprites/temperate_sprite/rf04-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf05-0000.png b/assets/sprites/temperate_sprite/rf05-0000.png new file mode 100644 index 00000000..8777f957 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf05-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf06-0000.png b/assets/sprites/temperate_sprite/rf06-0000.png new file mode 100644 index 00000000..f3e0db45 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf06-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf07-0000.png b/assets/sprites/temperate_sprite/rf07-0000.png new file mode 100644 index 00000000..2257751d Binary files /dev/null and b/assets/sprites/temperate_sprite/rf07-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf08-0000.png b/assets/sprites/temperate_sprite/rf08-0000.png new file mode 100644 index 00000000..194e3251 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf08-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf08-0001.png b/assets/sprites/temperate_sprite/rf08-0001.png new file mode 100644 index 00000000..e3153d0d Binary files /dev/null and b/assets/sprites/temperate_sprite/rf08-0001.png differ diff --git a/assets/sprites/temperate_sprite/rf09-0000.png b/assets/sprites/temperate_sprite/rf09-0000.png new file mode 100644 index 00000000..3ea4783f Binary files /dev/null and b/assets/sprites/temperate_sprite/rf09-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf09-0001.png b/assets/sprites/temperate_sprite/rf09-0001.png new file mode 100644 index 00000000..6f816cee Binary files /dev/null and b/assets/sprites/temperate_sprite/rf09-0001.png differ diff --git a/assets/sprites/temperate_sprite/rf10-0000.png b/assets/sprites/temperate_sprite/rf10-0000.png new file mode 100644 index 00000000..ab2e12ab Binary files /dev/null and b/assets/sprites/temperate_sprite/rf10-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf10-0001.png b/assets/sprites/temperate_sprite/rf10-0001.png new file mode 100644 index 00000000..f01af484 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf10-0001.png differ diff --git a/assets/sprites/temperate_sprite/rf11-0000.png b/assets/sprites/temperate_sprite/rf11-0000.png new file mode 100644 index 00000000..ef600092 Binary files /dev/null and b/assets/sprites/temperate_sprite/rf11-0000.png differ diff --git a/assets/sprites/temperate_sprite/rf11-0001.png b/assets/sprites/temperate_sprite/rf11-0001.png new file mode 100644 index 00000000..47e2181d Binary files /dev/null and b/assets/sprites/temperate_sprite/rf11-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0000.png b/assets/sprites/temperate_sprite/rv01-0000.png new file mode 100644 index 00000000..2ad35877 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0001.png b/assets/sprites/temperate_sprite/rv01-0001.png new file mode 100644 index 00000000..84c57a24 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0002.png b/assets/sprites/temperate_sprite/rv01-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0003.png b/assets/sprites/temperate_sprite/rv01-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0004.png b/assets/sprites/temperate_sprite/rv01-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0005.png b/assets/sprites/temperate_sprite/rv01-0005.png new file mode 100644 index 00000000..e89a69e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0006.png b/assets/sprites/temperate_sprite/rv01-0006.png new file mode 100644 index 00000000..ac00f807 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0007.png b/assets/sprites/temperate_sprite/rv01-0007.png new file mode 100644 index 00000000..d92b8a39 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0008.png b/assets/sprites/temperate_sprite/rv01-0008.png new file mode 100644 index 00000000..a7de8a3e Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0009.png b/assets/sprites/temperate_sprite/rv01-0009.png new file mode 100644 index 00000000..6a1113fb Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0010.png b/assets/sprites/temperate_sprite/rv01-0010.png new file mode 100644 index 00000000..398746c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0011.png b/assets/sprites/temperate_sprite/rv01-0011.png new file mode 100644 index 00000000..73191015 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0012.png b/assets/sprites/temperate_sprite/rv01-0012.png new file mode 100644 index 00000000..503f55b5 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0012.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0013.png b/assets/sprites/temperate_sprite/rv01-0013.png new file mode 100644 index 00000000..24929ac6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0013.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0014.png b/assets/sprites/temperate_sprite/rv01-0014.png new file mode 100644 index 00000000..3c7aa58f Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0014.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0015.png b/assets/sprites/temperate_sprite/rv01-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0015.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0016.png b/assets/sprites/temperate_sprite/rv01-0016.png new file mode 100644 index 00000000..87b2eb64 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0016.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0017.png b/assets/sprites/temperate_sprite/rv01-0017.png new file mode 100644 index 00000000..085f1dd0 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0017.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0018.png b/assets/sprites/temperate_sprite/rv01-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0018.png differ diff --git a/assets/sprites/temperate_sprite/rv01-0019.png b/assets/sprites/temperate_sprite/rv01-0019.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv01-0019.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0000.png b/assets/sprites/temperate_sprite/rv02-0000.png new file mode 100644 index 00000000..3cf4fd4d Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0001.png b/assets/sprites/temperate_sprite/rv02-0001.png new file mode 100644 index 00000000..68277e14 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0002.png b/assets/sprites/temperate_sprite/rv02-0002.png new file mode 100644 index 00000000..13591d75 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0003.png b/assets/sprites/temperate_sprite/rv02-0003.png new file mode 100644 index 00000000..490000a2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0004.png b/assets/sprites/temperate_sprite/rv02-0004.png new file mode 100644 index 00000000..6981f899 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0005.png b/assets/sprites/temperate_sprite/rv02-0005.png new file mode 100644 index 00000000..2ccea2d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0006.png b/assets/sprites/temperate_sprite/rv02-0006.png new file mode 100644 index 00000000..6eeaa5a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0007.png b/assets/sprites/temperate_sprite/rv02-0007.png new file mode 100644 index 00000000..0494817b Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0008.png b/assets/sprites/temperate_sprite/rv02-0008.png new file mode 100644 index 00000000..ea39fdc8 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0009.png b/assets/sprites/temperate_sprite/rv02-0009.png new file mode 100644 index 00000000..a59aac50 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0010.png b/assets/sprites/temperate_sprite/rv02-0010.png new file mode 100644 index 00000000..9dad90e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0011.png b/assets/sprites/temperate_sprite/rv02-0011.png new file mode 100644 index 00000000..08bda7a2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0012.png b/assets/sprites/temperate_sprite/rv02-0012.png new file mode 100644 index 00000000..d2fe92ca Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0012.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0013.png b/assets/sprites/temperate_sprite/rv02-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0013.png differ diff --git a/assets/sprites/temperate_sprite/rv02-0014.png b/assets/sprites/temperate_sprite/rv02-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv02-0014.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0000.png b/assets/sprites/temperate_sprite/rv03-0000.png new file mode 100644 index 00000000..3b264c2d Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0001.png b/assets/sprites/temperate_sprite/rv03-0001.png new file mode 100644 index 00000000..3b8567de Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0002.png b/assets/sprites/temperate_sprite/rv03-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0003.png b/assets/sprites/temperate_sprite/rv03-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0004.png b/assets/sprites/temperate_sprite/rv03-0004.png new file mode 100644 index 00000000..a834b0e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0005.png b/assets/sprites/temperate_sprite/rv03-0005.png new file mode 100644 index 00000000..e8269b9f Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0006.png b/assets/sprites/temperate_sprite/rv03-0006.png new file mode 100644 index 00000000..0a80b71f Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0007.png b/assets/sprites/temperate_sprite/rv03-0007.png new file mode 100644 index 00000000..ef83eff4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0008.png b/assets/sprites/temperate_sprite/rv03-0008.png new file mode 100644 index 00000000..1906c378 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0009.png b/assets/sprites/temperate_sprite/rv03-0009.png new file mode 100644 index 00000000..ed3c3ab3 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0010.png b/assets/sprites/temperate_sprite/rv03-0010.png new file mode 100644 index 00000000..2d9b21c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0011.png b/assets/sprites/temperate_sprite/rv03-0011.png new file mode 100644 index 00000000..6b162f86 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0012.png b/assets/sprites/temperate_sprite/rv03-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0012.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0013.png b/assets/sprites/temperate_sprite/rv03-0013.png new file mode 100644 index 00000000..3709beda Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0013.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0014.png b/assets/sprites/temperate_sprite/rv03-0014.png new file mode 100644 index 00000000..e8415496 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0014.png differ diff --git a/assets/sprites/temperate_sprite/rv03-0015.png b/assets/sprites/temperate_sprite/rv03-0015.png new file mode 100644 index 00000000..a1e435cf Binary files /dev/null and b/assets/sprites/temperate_sprite/rv03-0015.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0000.png b/assets/sprites/temperate_sprite/rv04-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0001.png b/assets/sprites/temperate_sprite/rv04-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0002.png b/assets/sprites/temperate_sprite/rv04-0002.png new file mode 100644 index 00000000..4dbe3d06 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0003.png b/assets/sprites/temperate_sprite/rv04-0003.png new file mode 100644 index 00000000..a806c556 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0004.png b/assets/sprites/temperate_sprite/rv04-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0005.png b/assets/sprites/temperate_sprite/rv04-0005.png new file mode 100644 index 00000000..7389d702 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0006.png b/assets/sprites/temperate_sprite/rv04-0006.png new file mode 100644 index 00000000..d46e3e54 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0007.png b/assets/sprites/temperate_sprite/rv04-0007.png new file mode 100644 index 00000000..eb12a7c4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0008.png b/assets/sprites/temperate_sprite/rv04-0008.png new file mode 100644 index 00000000..b078941d Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0009.png b/assets/sprites/temperate_sprite/rv04-0009.png new file mode 100644 index 00000000..0ee5b1c4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0010.png b/assets/sprites/temperate_sprite/rv04-0010.png new file mode 100644 index 00000000..9becdd20 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0011.png b/assets/sprites/temperate_sprite/rv04-0011.png new file mode 100644 index 00000000..b5a404d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0012.png b/assets/sprites/temperate_sprite/rv04-0012.png new file mode 100644 index 00000000..b3189c8a Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0012.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0013.png b/assets/sprites/temperate_sprite/rv04-0013.png new file mode 100644 index 00000000..fae21e38 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0013.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0014.png b/assets/sprites/temperate_sprite/rv04-0014.png new file mode 100644 index 00000000..d844adc5 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0014.png differ diff --git a/assets/sprites/temperate_sprite/rv04-0015.png b/assets/sprites/temperate_sprite/rv04-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv04-0015.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0000.png b/assets/sprites/temperate_sprite/rv05-0000.png new file mode 100644 index 00000000..799bf2ad Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0001.png b/assets/sprites/temperate_sprite/rv05-0001.png new file mode 100644 index 00000000..7e22dcac Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0002.png b/assets/sprites/temperate_sprite/rv05-0002.png new file mode 100644 index 00000000..eaf2dd61 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0003.png b/assets/sprites/temperate_sprite/rv05-0003.png new file mode 100644 index 00000000..a45647a6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0004.png b/assets/sprites/temperate_sprite/rv05-0004.png new file mode 100644 index 00000000..b182bd15 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0005.png b/assets/sprites/temperate_sprite/rv05-0005.png new file mode 100644 index 00000000..5aaebaed Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0006.png b/assets/sprites/temperate_sprite/rv05-0006.png new file mode 100644 index 00000000..50c65181 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0007.png b/assets/sprites/temperate_sprite/rv05-0007.png new file mode 100644 index 00000000..d65ae744 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv05-0008.png b/assets/sprites/temperate_sprite/rv05-0008.png new file mode 100644 index 00000000..42331405 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv05-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0000.png b/assets/sprites/temperate_sprite/rv06-0000.png new file mode 100644 index 00000000..a11f8e4d Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0001.png b/assets/sprites/temperate_sprite/rv06-0001.png new file mode 100644 index 00000000..aad5b7f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0002.png b/assets/sprites/temperate_sprite/rv06-0002.png new file mode 100644 index 00000000..ec097572 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0003.png b/assets/sprites/temperate_sprite/rv06-0003.png new file mode 100644 index 00000000..c3bad5a2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0004.png b/assets/sprites/temperate_sprite/rv06-0004.png new file mode 100644 index 00000000..67cfe500 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv06-0005.png b/assets/sprites/temperate_sprite/rv06-0005.png new file mode 100644 index 00000000..f52fa662 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv06-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0000.png b/assets/sprites/temperate_sprite/rv07-0000.png new file mode 100644 index 00000000..0acfdb71 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0001.png b/assets/sprites/temperate_sprite/rv07-0001.png new file mode 100644 index 00000000..691a7bc8 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0002.png b/assets/sprites/temperate_sprite/rv07-0002.png new file mode 100644 index 00000000..49a30a06 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0003.png b/assets/sprites/temperate_sprite/rv07-0003.png new file mode 100644 index 00000000..0caedfa6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0004.png b/assets/sprites/temperate_sprite/rv07-0004.png new file mode 100644 index 00000000..4857f4ad Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv07-0005.png b/assets/sprites/temperate_sprite/rv07-0005.png new file mode 100644 index 00000000..2d5584c7 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv07-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv08-0000.png b/assets/sprites/temperate_sprite/rv08-0000.png new file mode 100644 index 00000000..cc87c332 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv08-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv08-0001.png b/assets/sprites/temperate_sprite/rv08-0001.png new file mode 100644 index 00000000..ba58d201 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv08-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv08-0002.png b/assets/sprites/temperate_sprite/rv08-0002.png new file mode 100644 index 00000000..23959d60 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv08-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv08-0003.png b/assets/sprites/temperate_sprite/rv08-0003.png new file mode 100644 index 00000000..f54858e1 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv08-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv09-0000.png b/assets/sprites/temperate_sprite/rv09-0000.png new file mode 100644 index 00000000..962d2f62 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv09-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv09-0001.png b/assets/sprites/temperate_sprite/rv09-0001.png new file mode 100644 index 00000000..72f5f606 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv09-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv09-0002.png b/assets/sprites/temperate_sprite/rv09-0002.png new file mode 100644 index 00000000..25927cc4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv09-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv09-0003.png b/assets/sprites/temperate_sprite/rv09-0003.png new file mode 100644 index 00000000..dd68fde1 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv09-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv10-0000.png b/assets/sprites/temperate_sprite/rv10-0000.png new file mode 100644 index 00000000..7ef7d7e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv10-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv10-0001.png b/assets/sprites/temperate_sprite/rv10-0001.png new file mode 100644 index 00000000..71a72d75 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv10-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv10-0002.png b/assets/sprites/temperate_sprite/rv10-0002.png new file mode 100644 index 00000000..81100ff4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv10-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv10-0003.png b/assets/sprites/temperate_sprite/rv10-0003.png new file mode 100644 index 00000000..8416ecbd Binary files /dev/null and b/assets/sprites/temperate_sprite/rv10-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv11-0000.png b/assets/sprites/temperate_sprite/rv11-0000.png new file mode 100644 index 00000000..042af2f1 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv11-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv11-0001.png b/assets/sprites/temperate_sprite/rv11-0001.png new file mode 100644 index 00000000..4594e0c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv11-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv11-0002.png b/assets/sprites/temperate_sprite/rv11-0002.png new file mode 100644 index 00000000..4a55a361 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv11-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv11-0003.png b/assets/sprites/temperate_sprite/rv11-0003.png new file mode 100644 index 00000000..a5be0a8f Binary files /dev/null and b/assets/sprites/temperate_sprite/rv11-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0000.png b/assets/sprites/temperate_sprite/rv12-0000.png new file mode 100644 index 00000000..13524b37 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0001.png b/assets/sprites/temperate_sprite/rv12-0001.png new file mode 100644 index 00000000..2d768ee0 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0002.png b/assets/sprites/temperate_sprite/rv12-0002.png new file mode 100644 index 00000000..8f9bc9fe Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0003.png b/assets/sprites/temperate_sprite/rv12-0003.png new file mode 100644 index 00000000..fb402443 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0004.png b/assets/sprites/temperate_sprite/rv12-0004.png new file mode 100644 index 00000000..41e06aae Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0005.png b/assets/sprites/temperate_sprite/rv12-0005.png new file mode 100644 index 00000000..786355e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0006.png b/assets/sprites/temperate_sprite/rv12-0006.png new file mode 100644 index 00000000..4693cce3 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0007.png b/assets/sprites/temperate_sprite/rv12-0007.png new file mode 100644 index 00000000..e8b9bb19 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0008.png b/assets/sprites/temperate_sprite/rv12-0008.png new file mode 100644 index 00000000..726ea7fb Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0009.png b/assets/sprites/temperate_sprite/rv12-0009.png new file mode 100644 index 00000000..7f2c482a Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0010.png b/assets/sprites/temperate_sprite/rv12-0010.png new file mode 100644 index 00000000..0b966b23 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv12-0011.png b/assets/sprites/temperate_sprite/rv12-0011.png new file mode 100644 index 00000000..dfa60726 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv12-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0000.png b/assets/sprites/temperate_sprite/rv13-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0001.png b/assets/sprites/temperate_sprite/rv13-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0002.png b/assets/sprites/temperate_sprite/rv13-0002.png new file mode 100644 index 00000000..6afef135 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0002.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0003.png b/assets/sprites/temperate_sprite/rv13-0003.png new file mode 100644 index 00000000..b5bdd440 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0003.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0004.png b/assets/sprites/temperate_sprite/rv13-0004.png new file mode 100644 index 00000000..6ed8ed07 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0004.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0005.png b/assets/sprites/temperate_sprite/rv13-0005.png new file mode 100644 index 00000000..204c02e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0005.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0006.png b/assets/sprites/temperate_sprite/rv13-0006.png new file mode 100644 index 00000000..91d03212 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0006.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0007.png b/assets/sprites/temperate_sprite/rv13-0007.png new file mode 100644 index 00000000..0965883c Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0007.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0008.png b/assets/sprites/temperate_sprite/rv13-0008.png new file mode 100644 index 00000000..dd3f3239 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0008.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0009.png b/assets/sprites/temperate_sprite/rv13-0009.png new file mode 100644 index 00000000..c92b21c9 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0009.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0010.png b/assets/sprites/temperate_sprite/rv13-0010.png new file mode 100644 index 00000000..1c086143 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0010.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0011.png b/assets/sprites/temperate_sprite/rv13-0011.png new file mode 100644 index 00000000..49bb4986 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0011.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0012.png b/assets/sprites/temperate_sprite/rv13-0012.png new file mode 100644 index 00000000..1aecc7f4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0012.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0013.png b/assets/sprites/temperate_sprite/rv13-0013.png new file mode 100644 index 00000000..079196a6 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0013.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0014.png b/assets/sprites/temperate_sprite/rv13-0014.png new file mode 100644 index 00000000..11b5178c Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0014.png differ diff --git a/assets/sprites/temperate_sprite/rv13-0015.png b/assets/sprites/temperate_sprite/rv13-0015.png new file mode 100644 index 00000000..7e356dde Binary files /dev/null and b/assets/sprites/temperate_sprite/rv13-0015.png differ diff --git a/assets/sprites/temperate_sprite/rv14-0000.png b/assets/sprites/temperate_sprite/rv14-0000.png new file mode 100644 index 00000000..d7664178 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv14-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv14-0001.png b/assets/sprites/temperate_sprite/rv14-0001.png new file mode 100644 index 00000000..6be35074 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv14-0001.png differ diff --git a/assets/sprites/temperate_sprite/rv15-0000.png b/assets/sprites/temperate_sprite/rv15-0000.png new file mode 100644 index 00000000..32779ad4 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv15-0000.png differ diff --git a/assets/sprites/temperate_sprite/rv15-0001.png b/assets/sprites/temperate_sprite/rv15-0001.png new file mode 100644 index 00000000..50d5f430 Binary files /dev/null and b/assets/sprites/temperate_sprite/rv15-0001.png differ diff --git a/assets/sprites/temperate_sprite/s01-0000.png b/assets/sprites/temperate_sprite/s01-0000.png new file mode 100644 index 00000000..f11cce0d Binary files /dev/null and b/assets/sprites/temperate_sprite/s01-0000.png differ diff --git a/assets/sprites/temperate_sprite/s01-0001.png b/assets/sprites/temperate_sprite/s01-0001.png new file mode 100644 index 00000000..816f5684 Binary files /dev/null and b/assets/sprites/temperate_sprite/s01-0001.png differ diff --git a/assets/sprites/temperate_sprite/s01-0002.png b/assets/sprites/temperate_sprite/s01-0002.png new file mode 100644 index 00000000..755a7eec Binary files /dev/null and b/assets/sprites/temperate_sprite/s01-0002.png differ diff --git a/assets/sprites/temperate_sprite/s01-0003.png b/assets/sprites/temperate_sprite/s01-0003.png new file mode 100644 index 00000000..088de8ff Binary files /dev/null and b/assets/sprites/temperate_sprite/s01-0003.png differ diff --git a/assets/sprites/temperate_sprite/s02-0000.png b/assets/sprites/temperate_sprite/s02-0000.png new file mode 100644 index 00000000..7c1b5a72 Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0000.png differ diff --git a/assets/sprites/temperate_sprite/s02-0001.png b/assets/sprites/temperate_sprite/s02-0001.png new file mode 100644 index 00000000..9c781cba Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0001.png differ diff --git a/assets/sprites/temperate_sprite/s02-0002.png b/assets/sprites/temperate_sprite/s02-0002.png new file mode 100644 index 00000000..3bbc3e2e Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0002.png differ diff --git a/assets/sprites/temperate_sprite/s02-0003.png b/assets/sprites/temperate_sprite/s02-0003.png new file mode 100644 index 00000000..aa8e0401 Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0003.png differ diff --git a/assets/sprites/temperate_sprite/s02-0004.png b/assets/sprites/temperate_sprite/s02-0004.png new file mode 100644 index 00000000..ad490ed7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0004.png differ diff --git a/assets/sprites/temperate_sprite/s02-0005.png b/assets/sprites/temperate_sprite/s02-0005.png new file mode 100644 index 00000000..539ef5d4 Binary files /dev/null and b/assets/sprites/temperate_sprite/s02-0005.png differ diff --git a/assets/sprites/temperate_sprite/s03-0000.png b/assets/sprites/temperate_sprite/s03-0000.png new file mode 100644 index 00000000..b11d4186 Binary files /dev/null and b/assets/sprites/temperate_sprite/s03-0000.png differ diff --git a/assets/sprites/temperate_sprite/s03-0001.png b/assets/sprites/temperate_sprite/s03-0001.png new file mode 100644 index 00000000..1cc1d609 Binary files /dev/null and b/assets/sprites/temperate_sprite/s03-0001.png differ diff --git a/assets/sprites/temperate_sprite/s03-0002.png b/assets/sprites/temperate_sprite/s03-0002.png new file mode 100644 index 00000000..e2e88b45 Binary files /dev/null and b/assets/sprites/temperate_sprite/s03-0002.png differ diff --git a/assets/sprites/temperate_sprite/s03-0003.png b/assets/sprites/temperate_sprite/s03-0003.png new file mode 100644 index 00000000..2d71ca82 Binary files /dev/null and b/assets/sprites/temperate_sprite/s03-0003.png differ diff --git a/assets/sprites/temperate_sprite/s04-0000.png b/assets/sprites/temperate_sprite/s04-0000.png new file mode 100644 index 00000000..03dada3d Binary files /dev/null and b/assets/sprites/temperate_sprite/s04-0000.png differ diff --git a/assets/sprites/temperate_sprite/s04-0001.png b/assets/sprites/temperate_sprite/s04-0001.png new file mode 100644 index 00000000..f25c3fa7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s04-0001.png differ diff --git a/assets/sprites/temperate_sprite/s04-0002.png b/assets/sprites/temperate_sprite/s04-0002.png new file mode 100644 index 00000000..c1decbb5 Binary files /dev/null and b/assets/sprites/temperate_sprite/s04-0002.png differ diff --git a/assets/sprites/temperate_sprite/s04-0003.png b/assets/sprites/temperate_sprite/s04-0003.png new file mode 100644 index 00000000..72b30fcf Binary files /dev/null and b/assets/sprites/temperate_sprite/s04-0003.png differ diff --git a/assets/sprites/temperate_sprite/s05-0000.png b/assets/sprites/temperate_sprite/s05-0000.png new file mode 100644 index 00000000..aa1fe1fc Binary files /dev/null and b/assets/sprites/temperate_sprite/s05-0000.png differ diff --git a/assets/sprites/temperate_sprite/s05-0001.png b/assets/sprites/temperate_sprite/s05-0001.png new file mode 100644 index 00000000..21e565e7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s05-0001.png differ diff --git a/assets/sprites/temperate_sprite/s05-0002.png b/assets/sprites/temperate_sprite/s05-0002.png new file mode 100644 index 00000000..16aef914 Binary files /dev/null and b/assets/sprites/temperate_sprite/s05-0002.png differ diff --git a/assets/sprites/temperate_sprite/s05-0003.png b/assets/sprites/temperate_sprite/s05-0003.png new file mode 100644 index 00000000..a6145b16 Binary files /dev/null and b/assets/sprites/temperate_sprite/s05-0003.png differ diff --git a/assets/sprites/temperate_sprite/s06-0000.png b/assets/sprites/temperate_sprite/s06-0000.png new file mode 100644 index 00000000..614a0253 Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0000.png differ diff --git a/assets/sprites/temperate_sprite/s06-0001.png b/assets/sprites/temperate_sprite/s06-0001.png new file mode 100644 index 00000000..d35302bc Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0001.png differ diff --git a/assets/sprites/temperate_sprite/s06-0002.png b/assets/sprites/temperate_sprite/s06-0002.png new file mode 100644 index 00000000..eda1de91 Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0002.png differ diff --git a/assets/sprites/temperate_sprite/s06-0003.png b/assets/sprites/temperate_sprite/s06-0003.png new file mode 100644 index 00000000..24b67443 Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0003.png differ diff --git a/assets/sprites/temperate_sprite/s06-0004.png b/assets/sprites/temperate_sprite/s06-0004.png new file mode 100644 index 00000000..bcda8a94 Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0004.png differ diff --git a/assets/sprites/temperate_sprite/s06-0005.png b/assets/sprites/temperate_sprite/s06-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s06-0005.png differ diff --git a/assets/sprites/temperate_sprite/s07-0000.png b/assets/sprites/temperate_sprite/s07-0000.png new file mode 100644 index 00000000..6feddc5e Binary files /dev/null and b/assets/sprites/temperate_sprite/s07-0000.png differ diff --git a/assets/sprites/temperate_sprite/s07-0001.png b/assets/sprites/temperate_sprite/s07-0001.png new file mode 100644 index 00000000..d47db26f Binary files /dev/null and b/assets/sprites/temperate_sprite/s07-0001.png differ diff --git a/assets/sprites/temperate_sprite/s07-0002.png b/assets/sprites/temperate_sprite/s07-0002.png new file mode 100644 index 00000000..ca636278 Binary files /dev/null and b/assets/sprites/temperate_sprite/s07-0002.png differ diff --git a/assets/sprites/temperate_sprite/s07-0003.png b/assets/sprites/temperate_sprite/s07-0003.png new file mode 100644 index 00000000..66fc7c50 Binary files /dev/null and b/assets/sprites/temperate_sprite/s07-0003.png differ diff --git a/assets/sprites/temperate_sprite/s08-0000.png b/assets/sprites/temperate_sprite/s08-0000.png new file mode 100644 index 00000000..2b3605ca Binary files /dev/null and b/assets/sprites/temperate_sprite/s08-0000.png differ diff --git a/assets/sprites/temperate_sprite/s08-0001.png b/assets/sprites/temperate_sprite/s08-0001.png new file mode 100644 index 00000000..dde27d05 Binary files /dev/null and b/assets/sprites/temperate_sprite/s08-0001.png differ diff --git a/assets/sprites/temperate_sprite/s08-0002.png b/assets/sprites/temperate_sprite/s08-0002.png new file mode 100644 index 00000000..7c90e1c5 Binary files /dev/null and b/assets/sprites/temperate_sprite/s08-0002.png differ diff --git a/assets/sprites/temperate_sprite/s08-0003.png b/assets/sprites/temperate_sprite/s08-0003.png new file mode 100644 index 00000000..273649a7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s08-0003.png differ diff --git a/assets/sprites/temperate_sprite/s09-0000.png b/assets/sprites/temperate_sprite/s09-0000.png new file mode 100644 index 00000000..ccc4a536 Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0000.png differ diff --git a/assets/sprites/temperate_sprite/s09-0001.png b/assets/sprites/temperate_sprite/s09-0001.png new file mode 100644 index 00000000..ccde2467 Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0001.png differ diff --git a/assets/sprites/temperate_sprite/s09-0002.png b/assets/sprites/temperate_sprite/s09-0002.png new file mode 100644 index 00000000..de45cade Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0002.png differ diff --git a/assets/sprites/temperate_sprite/s09-0003.png b/assets/sprites/temperate_sprite/s09-0003.png new file mode 100644 index 00000000..d052e15c Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0003.png differ diff --git a/assets/sprites/temperate_sprite/s09-0004.png b/assets/sprites/temperate_sprite/s09-0004.png new file mode 100644 index 00000000..b08af725 Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0004.png differ diff --git a/assets/sprites/temperate_sprite/s09-0005.png b/assets/sprites/temperate_sprite/s09-0005.png new file mode 100644 index 00000000..b4db2e5f Binary files /dev/null and b/assets/sprites/temperate_sprite/s09-0005.png differ diff --git a/assets/sprites/temperate_sprite/s10-0000.png b/assets/sprites/temperate_sprite/s10-0000.png new file mode 100644 index 00000000..2375e3e9 Binary files /dev/null and b/assets/sprites/temperate_sprite/s10-0000.png differ diff --git a/assets/sprites/temperate_sprite/s10-0001.png b/assets/sprites/temperate_sprite/s10-0001.png new file mode 100644 index 00000000..b73cc9b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/s10-0001.png differ diff --git a/assets/sprites/temperate_sprite/s10-0002.png b/assets/sprites/temperate_sprite/s10-0002.png new file mode 100644 index 00000000..416e42d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/s10-0002.png differ diff --git a/assets/sprites/temperate_sprite/s10-0003.png b/assets/sprites/temperate_sprite/s10-0003.png new file mode 100644 index 00000000..0ed73f3f Binary files /dev/null and b/assets/sprites/temperate_sprite/s10-0003.png differ diff --git a/assets/sprites/temperate_sprite/s11-0000.png b/assets/sprites/temperate_sprite/s11-0000.png new file mode 100644 index 00000000..f7a4fcd2 Binary files /dev/null and b/assets/sprites/temperate_sprite/s11-0000.png differ diff --git a/assets/sprites/temperate_sprite/s11-0001.png b/assets/sprites/temperate_sprite/s11-0001.png new file mode 100644 index 00000000..677ecef7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s11-0001.png differ diff --git a/assets/sprites/temperate_sprite/s11-0002.png b/assets/sprites/temperate_sprite/s11-0002.png new file mode 100644 index 00000000..5936a130 Binary files /dev/null and b/assets/sprites/temperate_sprite/s11-0002.png differ diff --git a/assets/sprites/temperate_sprite/s11-0003.png b/assets/sprites/temperate_sprite/s11-0003.png new file mode 100644 index 00000000..9aa3b7ac Binary files /dev/null and b/assets/sprites/temperate_sprite/s11-0003.png differ diff --git a/assets/sprites/temperate_sprite/s12-0000.png b/assets/sprites/temperate_sprite/s12-0000.png new file mode 100644 index 00000000..06d24ec8 Binary files /dev/null and b/assets/sprites/temperate_sprite/s12-0000.png differ diff --git a/assets/sprites/temperate_sprite/s12-0001.png b/assets/sprites/temperate_sprite/s12-0001.png new file mode 100644 index 00000000..528e5124 Binary files /dev/null and b/assets/sprites/temperate_sprite/s12-0001.png differ diff --git a/assets/sprites/temperate_sprite/s12-0002.png b/assets/sprites/temperate_sprite/s12-0002.png new file mode 100644 index 00000000..2cd59f33 Binary files /dev/null and b/assets/sprites/temperate_sprite/s12-0002.png differ diff --git a/assets/sprites/temperate_sprite/s12-0003.png b/assets/sprites/temperate_sprite/s12-0003.png new file mode 100644 index 00000000..918b37fc Binary files /dev/null and b/assets/sprites/temperate_sprite/s12-0003.png differ diff --git a/assets/sprites/temperate_sprite/s13-0000.png b/assets/sprites/temperate_sprite/s13-0000.png new file mode 100644 index 00000000..21144b90 Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0000.png differ diff --git a/assets/sprites/temperate_sprite/s13-0001.png b/assets/sprites/temperate_sprite/s13-0001.png new file mode 100644 index 00000000..d7632b14 Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0001.png differ diff --git a/assets/sprites/temperate_sprite/s13-0002.png b/assets/sprites/temperate_sprite/s13-0002.png new file mode 100644 index 00000000..dbac4457 Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0002.png differ diff --git a/assets/sprites/temperate_sprite/s13-0003.png b/assets/sprites/temperate_sprite/s13-0003.png new file mode 100644 index 00000000..169705bf Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0003.png differ diff --git a/assets/sprites/temperate_sprite/s13-0004.png b/assets/sprites/temperate_sprite/s13-0004.png new file mode 100644 index 00000000..61dc2cb9 Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0004.png differ diff --git a/assets/sprites/temperate_sprite/s13-0005.png b/assets/sprites/temperate_sprite/s13-0005.png new file mode 100644 index 00000000..ad3dd8ea Binary files /dev/null and b/assets/sprites/temperate_sprite/s13-0005.png differ diff --git a/assets/sprites/temperate_sprite/s14-0000.png b/assets/sprites/temperate_sprite/s14-0000.png new file mode 100644 index 00000000..8007f343 Binary files /dev/null and b/assets/sprites/temperate_sprite/s14-0000.png differ diff --git a/assets/sprites/temperate_sprite/s14-0001.png b/assets/sprites/temperate_sprite/s14-0001.png new file mode 100644 index 00000000..772482c0 Binary files /dev/null and b/assets/sprites/temperate_sprite/s14-0001.png differ diff --git a/assets/sprites/temperate_sprite/s14-0002.png b/assets/sprites/temperate_sprite/s14-0002.png new file mode 100644 index 00000000..342bf6d7 Binary files /dev/null and b/assets/sprites/temperate_sprite/s14-0002.png differ diff --git a/assets/sprites/temperate_sprite/s14-0003.png b/assets/sprites/temperate_sprite/s14-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s14-0003.png differ diff --git a/assets/sprites/temperate_sprite/s15-0000.png b/assets/sprites/temperate_sprite/s15-0000.png new file mode 100644 index 00000000..077f9b25 Binary files /dev/null and b/assets/sprites/temperate_sprite/s15-0000.png differ diff --git a/assets/sprites/temperate_sprite/s15-0001.png b/assets/sprites/temperate_sprite/s15-0001.png new file mode 100644 index 00000000..55ba53ec Binary files /dev/null and b/assets/sprites/temperate_sprite/s15-0001.png differ diff --git a/assets/sprites/temperate_sprite/s15-0002.png b/assets/sprites/temperate_sprite/s15-0002.png new file mode 100644 index 00000000..18e633ac Binary files /dev/null and b/assets/sprites/temperate_sprite/s15-0002.png differ diff --git a/assets/sprites/temperate_sprite/s15-0003.png b/assets/sprites/temperate_sprite/s15-0003.png new file mode 100644 index 00000000..8518e3dd Binary files /dev/null and b/assets/sprites/temperate_sprite/s15-0003.png differ diff --git a/assets/sprites/temperate_sprite/s16-0000.png b/assets/sprites/temperate_sprite/s16-0000.png new file mode 100644 index 00000000..56ac940c Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0000.png differ diff --git a/assets/sprites/temperate_sprite/s16-0001.png b/assets/sprites/temperate_sprite/s16-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0001.png differ diff --git a/assets/sprites/temperate_sprite/s16-0002.png b/assets/sprites/temperate_sprite/s16-0002.png new file mode 100644 index 00000000..afda8f3d Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0002.png differ diff --git a/assets/sprites/temperate_sprite/s16-0003.png b/assets/sprites/temperate_sprite/s16-0003.png new file mode 100644 index 00000000..5d287fa4 Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0003.png differ diff --git a/assets/sprites/temperate_sprite/s16-0004.png b/assets/sprites/temperate_sprite/s16-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0004.png differ diff --git a/assets/sprites/temperate_sprite/s16-0005.png b/assets/sprites/temperate_sprite/s16-0005.png new file mode 100644 index 00000000..b133b1dd Binary files /dev/null and b/assets/sprites/temperate_sprite/s16-0005.png differ diff --git a/assets/sprites/temperate_sprite/s17-0000.png b/assets/sprites/temperate_sprite/s17-0000.png new file mode 100644 index 00000000..9f39eaae Binary files /dev/null and b/assets/sprites/temperate_sprite/s17-0000.png differ diff --git a/assets/sprites/temperate_sprite/s17-0001.png b/assets/sprites/temperate_sprite/s17-0001.png new file mode 100644 index 00000000..7b335545 Binary files /dev/null and b/assets/sprites/temperate_sprite/s17-0001.png differ diff --git a/assets/sprites/temperate_sprite/s17-0002.png b/assets/sprites/temperate_sprite/s17-0002.png new file mode 100644 index 00000000..7b5db02c Binary files /dev/null and b/assets/sprites/temperate_sprite/s17-0002.png differ diff --git a/assets/sprites/temperate_sprite/s17-0003.png b/assets/sprites/temperate_sprite/s17-0003.png new file mode 100644 index 00000000..433fa6f8 Binary files /dev/null and b/assets/sprites/temperate_sprite/s17-0003.png differ diff --git a/assets/sprites/temperate_sprite/s18-0000.png b/assets/sprites/temperate_sprite/s18-0000.png new file mode 100644 index 00000000..f3b17e7f Binary files /dev/null and b/assets/sprites/temperate_sprite/s18-0000.png differ diff --git a/assets/sprites/temperate_sprite/s18-0001.png b/assets/sprites/temperate_sprite/s18-0001.png new file mode 100644 index 00000000..1c9d7764 Binary files /dev/null and b/assets/sprites/temperate_sprite/s18-0001.png differ diff --git a/assets/sprites/temperate_sprite/s18-0002.png b/assets/sprites/temperate_sprite/s18-0002.png new file mode 100644 index 00000000..4552a0a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/s18-0002.png differ diff --git a/assets/sprites/temperate_sprite/s18-0003.png b/assets/sprites/temperate_sprite/s18-0003.png new file mode 100644 index 00000000..3eae0aca Binary files /dev/null and b/assets/sprites/temperate_sprite/s18-0003.png differ diff --git a/assets/sprites/temperate_sprite/s19-0000.png b/assets/sprites/temperate_sprite/s19-0000.png new file mode 100644 index 00000000..19058ab3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s19-0000.png differ diff --git a/assets/sprites/temperate_sprite/s19-0001.png b/assets/sprites/temperate_sprite/s19-0001.png new file mode 100644 index 00000000..1e4d9912 Binary files /dev/null and b/assets/sprites/temperate_sprite/s19-0001.png differ diff --git a/assets/sprites/temperate_sprite/s19-0002.png b/assets/sprites/temperate_sprite/s19-0002.png new file mode 100644 index 00000000..8206e906 Binary files /dev/null and b/assets/sprites/temperate_sprite/s19-0002.png differ diff --git a/assets/sprites/temperate_sprite/s19-0003.png b/assets/sprites/temperate_sprite/s19-0003.png new file mode 100644 index 00000000..153dae40 Binary files /dev/null and b/assets/sprites/temperate_sprite/s19-0003.png differ diff --git a/assets/sprites/temperate_sprite/s20-0000.png b/assets/sprites/temperate_sprite/s20-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0000.png differ diff --git a/assets/sprites/temperate_sprite/s20-0001.png b/assets/sprites/temperate_sprite/s20-0001.png new file mode 100644 index 00000000..f323c830 Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0001.png differ diff --git a/assets/sprites/temperate_sprite/s20-0002.png b/assets/sprites/temperate_sprite/s20-0002.png new file mode 100644 index 00000000..3d5cbf20 Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0002.png differ diff --git a/assets/sprites/temperate_sprite/s20-0003.png b/assets/sprites/temperate_sprite/s20-0003.png new file mode 100644 index 00000000..1c6d974c Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0003.png differ diff --git a/assets/sprites/temperate_sprite/s20-0004.png b/assets/sprites/temperate_sprite/s20-0004.png new file mode 100644 index 00000000..143da00b Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0004.png differ diff --git a/assets/sprites/temperate_sprite/s20-0005.png b/assets/sprites/temperate_sprite/s20-0005.png new file mode 100644 index 00000000..66ca5d32 Binary files /dev/null and b/assets/sprites/temperate_sprite/s20-0005.png differ diff --git a/assets/sprites/temperate_sprite/s21-0000.png b/assets/sprites/temperate_sprite/s21-0000.png new file mode 100644 index 00000000..cd760fb5 Binary files /dev/null and b/assets/sprites/temperate_sprite/s21-0000.png differ diff --git a/assets/sprites/temperate_sprite/s21-0001.png b/assets/sprites/temperate_sprite/s21-0001.png new file mode 100644 index 00000000..ee0cd069 Binary files /dev/null and b/assets/sprites/temperate_sprite/s21-0001.png differ diff --git a/assets/sprites/temperate_sprite/s22-0000.png b/assets/sprites/temperate_sprite/s22-0000.png new file mode 100644 index 00000000..b02246ca Binary files /dev/null and b/assets/sprites/temperate_sprite/s22-0000.png differ diff --git a/assets/sprites/temperate_sprite/s22-0001.png b/assets/sprites/temperate_sprite/s22-0001.png new file mode 100644 index 00000000..d50ea7d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/s22-0001.png differ diff --git a/assets/sprites/temperate_sprite/s23-0000.png b/assets/sprites/temperate_sprite/s23-0000.png new file mode 100644 index 00000000..ecaf4a94 Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0000.png differ diff --git a/assets/sprites/temperate_sprite/s23-0001.png b/assets/sprites/temperate_sprite/s23-0001.png new file mode 100644 index 00000000..03abb2ec Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0001.png differ diff --git a/assets/sprites/temperate_sprite/s23-0002.png b/assets/sprites/temperate_sprite/s23-0002.png new file mode 100644 index 00000000..fe5a1c51 Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0002.png differ diff --git a/assets/sprites/temperate_sprite/s23-0003.png b/assets/sprites/temperate_sprite/s23-0003.png new file mode 100644 index 00000000..d0533592 Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0003.png differ diff --git a/assets/sprites/temperate_sprite/s23-0004.png b/assets/sprites/temperate_sprite/s23-0004.png new file mode 100644 index 00000000..3b685356 Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0004.png differ diff --git a/assets/sprites/temperate_sprite/s23-0005.png b/assets/sprites/temperate_sprite/s23-0005.png new file mode 100644 index 00000000..21bcdc8f Binary files /dev/null and b/assets/sprites/temperate_sprite/s23-0005.png differ diff --git a/assets/sprites/temperate_sprite/s24-0000.png b/assets/sprites/temperate_sprite/s24-0000.png new file mode 100644 index 00000000..703814e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/s24-0000.png differ diff --git a/assets/sprites/temperate_sprite/s24-0001.png b/assets/sprites/temperate_sprite/s24-0001.png new file mode 100644 index 00000000..910a088c Binary files /dev/null and b/assets/sprites/temperate_sprite/s24-0001.png differ diff --git a/assets/sprites/temperate_sprite/s24-0002.png b/assets/sprites/temperate_sprite/s24-0002.png new file mode 100644 index 00000000..64f1ca52 Binary files /dev/null and b/assets/sprites/temperate_sprite/s24-0002.png differ diff --git a/assets/sprites/temperate_sprite/s24-0003.png b/assets/sprites/temperate_sprite/s24-0003.png new file mode 100644 index 00000000..fb3e42fb Binary files /dev/null and b/assets/sprites/temperate_sprite/s24-0003.png differ diff --git a/assets/sprites/temperate_sprite/s25-0000.png b/assets/sprites/temperate_sprite/s25-0000.png new file mode 100644 index 00000000..209d959c Binary files /dev/null and b/assets/sprites/temperate_sprite/s25-0000.png differ diff --git a/assets/sprites/temperate_sprite/s25-0001.png b/assets/sprites/temperate_sprite/s25-0001.png new file mode 100644 index 00000000..a611d9eb Binary files /dev/null and b/assets/sprites/temperate_sprite/s25-0001.png differ diff --git a/assets/sprites/temperate_sprite/s25-0002.png b/assets/sprites/temperate_sprite/s25-0002.png new file mode 100644 index 00000000..e7bc7092 Binary files /dev/null and b/assets/sprites/temperate_sprite/s25-0002.png differ diff --git a/assets/sprites/temperate_sprite/s25-0003.png b/assets/sprites/temperate_sprite/s25-0003.png new file mode 100644 index 00000000..9835aa36 Binary files /dev/null and b/assets/sprites/temperate_sprite/s25-0003.png differ diff --git a/assets/sprites/temperate_sprite/s26-0000.png b/assets/sprites/temperate_sprite/s26-0000.png new file mode 100644 index 00000000..2a56b88d Binary files /dev/null and b/assets/sprites/temperate_sprite/s26-0000.png differ diff --git a/assets/sprites/temperate_sprite/s26-0001.png b/assets/sprites/temperate_sprite/s26-0001.png new file mode 100644 index 00000000..9c9f22a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s26-0001.png differ diff --git a/assets/sprites/temperate_sprite/s26-0002.png b/assets/sprites/temperate_sprite/s26-0002.png new file mode 100644 index 00000000..75dde533 Binary files /dev/null and b/assets/sprites/temperate_sprite/s26-0002.png differ diff --git a/assets/sprites/temperate_sprite/s26-0003.png b/assets/sprites/temperate_sprite/s26-0003.png new file mode 100644 index 00000000..3dcca8a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/s26-0003.png differ diff --git a/assets/sprites/temperate_sprite/s27-0000.png b/assets/sprites/temperate_sprite/s27-0000.png new file mode 100644 index 00000000..6bd17881 Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0000.png differ diff --git a/assets/sprites/temperate_sprite/s27-0001.png b/assets/sprites/temperate_sprite/s27-0001.png new file mode 100644 index 00000000..2c0ecaf4 Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0001.png differ diff --git a/assets/sprites/temperate_sprite/s27-0002.png b/assets/sprites/temperate_sprite/s27-0002.png new file mode 100644 index 00000000..49f090dd Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0002.png differ diff --git a/assets/sprites/temperate_sprite/s27-0003.png b/assets/sprites/temperate_sprite/s27-0003.png new file mode 100644 index 00000000..3510166c Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0003.png differ diff --git a/assets/sprites/temperate_sprite/s27-0004.png b/assets/sprites/temperate_sprite/s27-0004.png new file mode 100644 index 00000000..735f89e6 Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0004.png differ diff --git a/assets/sprites/temperate_sprite/s27-0005.png b/assets/sprites/temperate_sprite/s27-0005.png new file mode 100644 index 00000000..6e8c2741 Binary files /dev/null and b/assets/sprites/temperate_sprite/s27-0005.png differ diff --git a/assets/sprites/temperate_sprite/s28-0000.png b/assets/sprites/temperate_sprite/s28-0000.png new file mode 100644 index 00000000..98495745 Binary files /dev/null and b/assets/sprites/temperate_sprite/s28-0000.png differ diff --git a/assets/sprites/temperate_sprite/s28-0001.png b/assets/sprites/temperate_sprite/s28-0001.png new file mode 100644 index 00000000..c148a312 Binary files /dev/null and b/assets/sprites/temperate_sprite/s28-0001.png differ diff --git a/assets/sprites/temperate_sprite/s28-0002.png b/assets/sprites/temperate_sprite/s28-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s28-0002.png differ diff --git a/assets/sprites/temperate_sprite/s28-0003.png b/assets/sprites/temperate_sprite/s28-0003.png new file mode 100644 index 00000000..95c8ccbf Binary files /dev/null and b/assets/sprites/temperate_sprite/s28-0003.png differ diff --git a/assets/sprites/temperate_sprite/s29-0000.png b/assets/sprites/temperate_sprite/s29-0000.png new file mode 100644 index 00000000..febf2065 Binary files /dev/null and b/assets/sprites/temperate_sprite/s29-0000.png differ diff --git a/assets/sprites/temperate_sprite/s29-0001.png b/assets/sprites/temperate_sprite/s29-0001.png new file mode 100644 index 00000000..07e5b45b Binary files /dev/null and b/assets/sprites/temperate_sprite/s29-0001.png differ diff --git a/assets/sprites/temperate_sprite/s29-0002.png b/assets/sprites/temperate_sprite/s29-0002.png new file mode 100644 index 00000000..30534de1 Binary files /dev/null and b/assets/sprites/temperate_sprite/s29-0002.png differ diff --git a/assets/sprites/temperate_sprite/s29-0003.png b/assets/sprites/temperate_sprite/s29-0003.png new file mode 100644 index 00000000..acde33fe Binary files /dev/null and b/assets/sprites/temperate_sprite/s29-0003.png differ diff --git a/assets/sprites/temperate_sprite/s30-0000.png b/assets/sprites/temperate_sprite/s30-0000.png new file mode 100644 index 00000000..254be358 Binary files /dev/null and b/assets/sprites/temperate_sprite/s30-0000.png differ diff --git a/assets/sprites/temperate_sprite/s30-0001.png b/assets/sprites/temperate_sprite/s30-0001.png new file mode 100644 index 00000000..873813b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s30-0001.png differ diff --git a/assets/sprites/temperate_sprite/s30-0002.png b/assets/sprites/temperate_sprite/s30-0002.png new file mode 100644 index 00000000..56dd56d8 Binary files /dev/null and b/assets/sprites/temperate_sprite/s30-0002.png differ diff --git a/assets/sprites/temperate_sprite/s30-0003.png b/assets/sprites/temperate_sprite/s30-0003.png new file mode 100644 index 00000000..5bbcd898 Binary files /dev/null and b/assets/sprites/temperate_sprite/s30-0003.png differ diff --git a/assets/sprites/temperate_sprite/s31-0000.png b/assets/sprites/temperate_sprite/s31-0000.png new file mode 100644 index 00000000..6bf77450 Binary files /dev/null and b/assets/sprites/temperate_sprite/s31-0000.png differ diff --git a/assets/sprites/temperate_sprite/s31-0001.png b/assets/sprites/temperate_sprite/s31-0001.png new file mode 100644 index 00000000..b73e6096 Binary files /dev/null and b/assets/sprites/temperate_sprite/s31-0001.png differ diff --git a/assets/sprites/temperate_sprite/s31-0002.png b/assets/sprites/temperate_sprite/s31-0002.png new file mode 100644 index 00000000..1ba79cc5 Binary files /dev/null and b/assets/sprites/temperate_sprite/s31-0002.png differ diff --git a/assets/sprites/temperate_sprite/s31-0003.png b/assets/sprites/temperate_sprite/s31-0003.png new file mode 100644 index 00000000..bf8ad617 Binary files /dev/null and b/assets/sprites/temperate_sprite/s31-0003.png differ diff --git a/assets/sprites/temperate_sprite/s32-0000.png b/assets/sprites/temperate_sprite/s32-0000.png new file mode 100644 index 00000000..19b64786 Binary files /dev/null and b/assets/sprites/temperate_sprite/s32-0000.png differ diff --git a/assets/sprites/temperate_sprite/s32-0001.png b/assets/sprites/temperate_sprite/s32-0001.png new file mode 100644 index 00000000..f6f466cb Binary files /dev/null and b/assets/sprites/temperate_sprite/s32-0001.png differ diff --git a/assets/sprites/temperate_sprite/s32-0002.png b/assets/sprites/temperate_sprite/s32-0002.png new file mode 100644 index 00000000..23bb04fb Binary files /dev/null and b/assets/sprites/temperate_sprite/s32-0002.png differ diff --git a/assets/sprites/temperate_sprite/s32-0003.png b/assets/sprites/temperate_sprite/s32-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/s32-0003.png differ diff --git a/assets/sprites/temperate_sprite/s33-0000.png b/assets/sprites/temperate_sprite/s33-0000.png new file mode 100644 index 00000000..1eee88a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/s33-0000.png differ diff --git a/assets/sprites/temperate_sprite/s33-0001.png b/assets/sprites/temperate_sprite/s33-0001.png new file mode 100644 index 00000000..7478d624 Binary files /dev/null and b/assets/sprites/temperate_sprite/s33-0001.png differ diff --git a/assets/sprites/temperate_sprite/s33-0002.png b/assets/sprites/temperate_sprite/s33-0002.png new file mode 100644 index 00000000..f5ab9e6a Binary files /dev/null and b/assets/sprites/temperate_sprite/s33-0002.png differ diff --git a/assets/sprites/temperate_sprite/s33-0003.png b/assets/sprites/temperate_sprite/s33-0003.png new file mode 100644 index 00000000..7e761c47 Binary files /dev/null and b/assets/sprites/temperate_sprite/s33-0003.png differ diff --git a/assets/sprites/temperate_sprite/s34-0000.png b/assets/sprites/temperate_sprite/s34-0000.png new file mode 100644 index 00000000..933ef89c Binary files /dev/null and b/assets/sprites/temperate_sprite/s34-0000.png differ diff --git a/assets/sprites/temperate_sprite/s34-0001.png b/assets/sprites/temperate_sprite/s34-0001.png new file mode 100644 index 00000000..fd7efb7c Binary files /dev/null and b/assets/sprites/temperate_sprite/s34-0001.png differ diff --git a/assets/sprites/temperate_sprite/s34-0002.png b/assets/sprites/temperate_sprite/s34-0002.png new file mode 100644 index 00000000..ad54d3e3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s34-0002.png differ diff --git a/assets/sprites/temperate_sprite/s34-0003.png b/assets/sprites/temperate_sprite/s34-0003.png new file mode 100644 index 00000000..b158a816 Binary files /dev/null and b/assets/sprites/temperate_sprite/s34-0003.png differ diff --git a/assets/sprites/temperate_sprite/s35-0000.png b/assets/sprites/temperate_sprite/s35-0000.png new file mode 100644 index 00000000..93f2fdb3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s35-0000.png differ diff --git a/assets/sprites/temperate_sprite/s35-0001.png b/assets/sprites/temperate_sprite/s35-0001.png new file mode 100644 index 00000000..17b389ce Binary files /dev/null and b/assets/sprites/temperate_sprite/s35-0001.png differ diff --git a/assets/sprites/temperate_sprite/s35-0002.png b/assets/sprites/temperate_sprite/s35-0002.png new file mode 100644 index 00000000..df4859e8 Binary files /dev/null and b/assets/sprites/temperate_sprite/s35-0002.png differ diff --git a/assets/sprites/temperate_sprite/s35-0003.png b/assets/sprites/temperate_sprite/s35-0003.png new file mode 100644 index 00000000..ebd647ea Binary files /dev/null and b/assets/sprites/temperate_sprite/s35-0003.png differ diff --git a/assets/sprites/temperate_sprite/s36-0000.png b/assets/sprites/temperate_sprite/s36-0000.png new file mode 100644 index 00000000..5e232070 Binary files /dev/null and b/assets/sprites/temperate_sprite/s36-0000.png differ diff --git a/assets/sprites/temperate_sprite/s36-0001.png b/assets/sprites/temperate_sprite/s36-0001.png new file mode 100644 index 00000000..b3e3196f Binary files /dev/null and b/assets/sprites/temperate_sprite/s36-0001.png differ diff --git a/assets/sprites/temperate_sprite/s36-0002.png b/assets/sprites/temperate_sprite/s36-0002.png new file mode 100644 index 00000000..08faaa60 Binary files /dev/null and b/assets/sprites/temperate_sprite/s36-0002.png differ diff --git a/assets/sprites/temperate_sprite/s36-0003.png b/assets/sprites/temperate_sprite/s36-0003.png new file mode 100644 index 00000000..3c7f8aa0 Binary files /dev/null and b/assets/sprites/temperate_sprite/s36-0003.png differ diff --git a/assets/sprites/temperate_sprite/s37-0000.png b/assets/sprites/temperate_sprite/s37-0000.png new file mode 100644 index 00000000..4a3b1dbe Binary files /dev/null and b/assets/sprites/temperate_sprite/s37-0000.png differ diff --git a/assets/sprites/temperate_sprite/s37-0001.png b/assets/sprites/temperate_sprite/s37-0001.png new file mode 100644 index 00000000..f0033adf Binary files /dev/null and b/assets/sprites/temperate_sprite/s37-0001.png differ diff --git a/assets/sprites/temperate_sprite/s37-0002.png b/assets/sprites/temperate_sprite/s37-0002.png new file mode 100644 index 00000000..d1e92370 Binary files /dev/null and b/assets/sprites/temperate_sprite/s37-0002.png differ diff --git a/assets/sprites/temperate_sprite/s37-0003.png b/assets/sprites/temperate_sprite/s37-0003.png new file mode 100644 index 00000000..b510b8a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s37-0003.png differ diff --git a/assets/sprites/temperate_sprite/s38-0000.png b/assets/sprites/temperate_sprite/s38-0000.png new file mode 100644 index 00000000..7c3bc017 Binary files /dev/null and b/assets/sprites/temperate_sprite/s38-0000.png differ diff --git a/assets/sprites/temperate_sprite/s38-0001.png b/assets/sprites/temperate_sprite/s38-0001.png new file mode 100644 index 00000000..5c6afff3 Binary files /dev/null and b/assets/sprites/temperate_sprite/s38-0001.png differ diff --git a/assets/sprites/temperate_sprite/s38-0002.png b/assets/sprites/temperate_sprite/s38-0002.png new file mode 100644 index 00000000..701164fd Binary files /dev/null and b/assets/sprites/temperate_sprite/s38-0002.png differ diff --git a/assets/sprites/temperate_sprite/s38-0003.png b/assets/sprites/temperate_sprite/s38-0003.png new file mode 100644 index 00000000..2737329a Binary files /dev/null and b/assets/sprites/temperate_sprite/s38-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0000.png b/assets/sprites/temperate_sprite/sbridge1-0000.png new file mode 100644 index 00000000..bd8c6602 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0001.png b/assets/sprites/temperate_sprite/sbridge1-0001.png new file mode 100644 index 00000000..e03f25b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0002.png b/assets/sprites/temperate_sprite/sbridge1-0002.png new file mode 100644 index 00000000..48a679fb Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0003.png b/assets/sprites/temperate_sprite/sbridge1-0003.png new file mode 100644 index 00000000..b6a62a7f Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0004.png b/assets/sprites/temperate_sprite/sbridge1-0004.png new file mode 100644 index 00000000..1cb526b0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1-0005.png b/assets/sprites/temperate_sprite/sbridge1-0005.png new file mode 100644 index 00000000..6f4f11f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0000.png b/assets/sprites/temperate_sprite/sbridge1d-0000.png new file mode 100644 index 00000000..5029bdf3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0001.png b/assets/sprites/temperate_sprite/sbridge1d-0001.png new file mode 100644 index 00000000..767a31b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0002.png b/assets/sprites/temperate_sprite/sbridge1d-0002.png new file mode 100644 index 00000000..79171518 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0003.png b/assets/sprites/temperate_sprite/sbridge1d-0003.png new file mode 100644 index 00000000..60f246f0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0004.png b/assets/sprites/temperate_sprite/sbridge1d-0004.png new file mode 100644 index 00000000..5b7d96d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1d-0005.png b/assets/sprites/temperate_sprite/sbridge1d-0005.png new file mode 100644 index 00000000..610dfd16 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1d-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0000.png b/assets/sprites/temperate_sprite/sbridge1h-0000.png new file mode 100644 index 00000000..67754848 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0001.png b/assets/sprites/temperate_sprite/sbridge1h-0001.png new file mode 100644 index 00000000..c0ffc1e6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0002.png b/assets/sprites/temperate_sprite/sbridge1h-0002.png new file mode 100644 index 00000000..bd03bbb8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0003.png b/assets/sprites/temperate_sprite/sbridge1h-0003.png new file mode 100644 index 00000000..33f1ae8d Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0004.png b/assets/sprites/temperate_sprite/sbridge1h-0004.png new file mode 100644 index 00000000..1107f781 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1h-0005.png b/assets/sprites/temperate_sprite/sbridge1h-0005.png new file mode 100644 index 00000000..18551a49 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1h-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0000.png b/assets/sprites/temperate_sprite/sbridge1x-0000.png new file mode 100644 index 00000000..a0d1dc09 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0001.png b/assets/sprites/temperate_sprite/sbridge1x-0001.png new file mode 100644 index 00000000..51a08248 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0002.png b/assets/sprites/temperate_sprite/sbridge1x-0002.png new file mode 100644 index 00000000..441d9f4f Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0003.png b/assets/sprites/temperate_sprite/sbridge1x-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0004.png b/assets/sprites/temperate_sprite/sbridge1x-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0005.png b/assets/sprites/temperate_sprite/sbridge1x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0006.png b/assets/sprites/temperate_sprite/sbridge1x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0007.png b/assets/sprites/temperate_sprite/sbridge1x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0008.png b/assets/sprites/temperate_sprite/sbridge1x-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0008.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0009.png b/assets/sprites/temperate_sprite/sbridge1x-0009.png new file mode 100644 index 00000000..97c4d57b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0009.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0010.png b/assets/sprites/temperate_sprite/sbridge1x-0010.png new file mode 100644 index 00000000..afc8bdbd Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0010.png differ diff --git a/assets/sprites/temperate_sprite/sbridge1x-0011.png b/assets/sprites/temperate_sprite/sbridge1x-0011.png new file mode 100644 index 00000000..04a62f9b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge1x-0011.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0000.png b/assets/sprites/temperate_sprite/sbridge2-0000.png new file mode 100644 index 00000000..8c4511ea Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0001.png b/assets/sprites/temperate_sprite/sbridge2-0001.png new file mode 100644 index 00000000..4982b433 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0002.png b/assets/sprites/temperate_sprite/sbridge2-0002.png new file mode 100644 index 00000000..a8aedce6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0003.png b/assets/sprites/temperate_sprite/sbridge2-0003.png new file mode 100644 index 00000000..438026cc Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0004.png b/assets/sprites/temperate_sprite/sbridge2-0004.png new file mode 100644 index 00000000..10df58ef Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2-0005.png b/assets/sprites/temperate_sprite/sbridge2-0005.png new file mode 100644 index 00000000..17aa9a90 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0000.png b/assets/sprites/temperate_sprite/sbridge2d-0000.png new file mode 100644 index 00000000..eebe87ac Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0001.png b/assets/sprites/temperate_sprite/sbridge2d-0001.png new file mode 100644 index 00000000..544dd48a Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0002.png b/assets/sprites/temperate_sprite/sbridge2d-0002.png new file mode 100644 index 00000000..e4542fde Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0003.png b/assets/sprites/temperate_sprite/sbridge2d-0003.png new file mode 100644 index 00000000..ef2a9244 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0004.png b/assets/sprites/temperate_sprite/sbridge2d-0004.png new file mode 100644 index 00000000..b2fe3efe Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2d-0005.png b/assets/sprites/temperate_sprite/sbridge2d-0005.png new file mode 100644 index 00000000..68a50e91 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2d-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0000.png b/assets/sprites/temperate_sprite/sbridge2h-0000.png new file mode 100644 index 00000000..9074b7f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0001.png b/assets/sprites/temperate_sprite/sbridge2h-0001.png new file mode 100644 index 00000000..35981255 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0002.png b/assets/sprites/temperate_sprite/sbridge2h-0002.png new file mode 100644 index 00000000..1cb9e43d Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0003.png b/assets/sprites/temperate_sprite/sbridge2h-0003.png new file mode 100644 index 00000000..d04fc610 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0004.png b/assets/sprites/temperate_sprite/sbridge2h-0004.png new file mode 100644 index 00000000..cbf711d0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2h-0005.png b/assets/sprites/temperate_sprite/sbridge2h-0005.png new file mode 100644 index 00000000..f770d770 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2h-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0000.png b/assets/sprites/temperate_sprite/sbridge2x-0000.png new file mode 100644 index 00000000..49ecb556 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0001.png b/assets/sprites/temperate_sprite/sbridge2x-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0002.png b/assets/sprites/temperate_sprite/sbridge2x-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0003.png b/assets/sprites/temperate_sprite/sbridge2x-0003.png new file mode 100644 index 00000000..6b6ac04a Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0004.png b/assets/sprites/temperate_sprite/sbridge2x-0004.png new file mode 100644 index 00000000..e1c378d0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0005.png b/assets/sprites/temperate_sprite/sbridge2x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0006.png b/assets/sprites/temperate_sprite/sbridge2x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0007.png b/assets/sprites/temperate_sprite/sbridge2x-0007.png new file mode 100644 index 00000000..3e1184dd Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0008.png b/assets/sprites/temperate_sprite/sbridge2x-0008.png new file mode 100644 index 00000000..2f51e2a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0008.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0009.png b/assets/sprites/temperate_sprite/sbridge2x-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0009.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0010.png b/assets/sprites/temperate_sprite/sbridge2x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0010.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0011.png b/assets/sprites/temperate_sprite/sbridge2x-0011.png new file mode 100644 index 00000000..481602aa Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0011.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0012.png b/assets/sprites/temperate_sprite/sbridge2x-0012.png new file mode 100644 index 00000000..6195d364 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0012.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0013.png b/assets/sprites/temperate_sprite/sbridge2x-0013.png new file mode 100644 index 00000000..2448d883 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0013.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0014.png b/assets/sprites/temperate_sprite/sbridge2x-0014.png new file mode 100644 index 00000000..a7911503 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0014.png differ diff --git a/assets/sprites/temperate_sprite/sbridge2x-0015.png b/assets/sprites/temperate_sprite/sbridge2x-0015.png new file mode 100644 index 00000000..5be2130b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge2x-0015.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0000.png b/assets/sprites/temperate_sprite/sbridge3-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0001.png b/assets/sprites/temperate_sprite/sbridge3-0001.png new file mode 100644 index 00000000..4fe5e194 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0002.png b/assets/sprites/temperate_sprite/sbridge3-0002.png new file mode 100644 index 00000000..fd6ea7b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0003.png b/assets/sprites/temperate_sprite/sbridge3-0003.png new file mode 100644 index 00000000..287baec4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0004.png b/assets/sprites/temperate_sprite/sbridge3-0004.png new file mode 100644 index 00000000..7e1b0aff Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0005.png b/assets/sprites/temperate_sprite/sbridge3-0005.png new file mode 100644 index 00000000..25f60db6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0006.png b/assets/sprites/temperate_sprite/sbridge3-0006.png new file mode 100644 index 00000000..7115038b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3-0007.png b/assets/sprites/temperate_sprite/sbridge3-0007.png new file mode 100644 index 00000000..d4442106 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0000.png b/assets/sprites/temperate_sprite/sbridge3d-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0001.png b/assets/sprites/temperate_sprite/sbridge3d-0001.png new file mode 100644 index 00000000..ffd03e0c Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0002.png b/assets/sprites/temperate_sprite/sbridge3d-0002.png new file mode 100644 index 00000000..96d9181b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0003.png b/assets/sprites/temperate_sprite/sbridge3d-0003.png new file mode 100644 index 00000000..1bc9b529 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0004.png b/assets/sprites/temperate_sprite/sbridge3d-0004.png new file mode 100644 index 00000000..d0887dd4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0005.png b/assets/sprites/temperate_sprite/sbridge3d-0005.png new file mode 100644 index 00000000..2662f66c Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0006.png b/assets/sprites/temperate_sprite/sbridge3d-0006.png new file mode 100644 index 00000000..8815b87b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3d-0007.png b/assets/sprites/temperate_sprite/sbridge3d-0007.png new file mode 100644 index 00000000..a2b3bdc7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3d-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0000.png b/assets/sprites/temperate_sprite/sbridge3h-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0001.png b/assets/sprites/temperate_sprite/sbridge3h-0001.png new file mode 100644 index 00000000..8b76325a Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0002.png b/assets/sprites/temperate_sprite/sbridge3h-0002.png new file mode 100644 index 00000000..76ebb406 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0003.png b/assets/sprites/temperate_sprite/sbridge3h-0003.png new file mode 100644 index 00000000..a2ce8df9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0004.png b/assets/sprites/temperate_sprite/sbridge3h-0004.png new file mode 100644 index 00000000..7e1b0aff Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0005.png b/assets/sprites/temperate_sprite/sbridge3h-0005.png new file mode 100644 index 00000000..88898af6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0006.png b/assets/sprites/temperate_sprite/sbridge3h-0006.png new file mode 100644 index 00000000..a5c0ab49 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3h-0007.png b/assets/sprites/temperate_sprite/sbridge3h-0007.png new file mode 100644 index 00000000..e3ab69ae Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3h-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0000.png b/assets/sprites/temperate_sprite/sbridge3x-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0001.png b/assets/sprites/temperate_sprite/sbridge3x-0001.png new file mode 100644 index 00000000..aaffc205 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0002.png b/assets/sprites/temperate_sprite/sbridge3x-0002.png new file mode 100644 index 00000000..ad98cde6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0003.png b/assets/sprites/temperate_sprite/sbridge3x-0003.png new file mode 100644 index 00000000..2390451f Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0004.png b/assets/sprites/temperate_sprite/sbridge3x-0004.png new file mode 100644 index 00000000..75bcb213 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0005.png b/assets/sprites/temperate_sprite/sbridge3x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0006.png b/assets/sprites/temperate_sprite/sbridge3x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0007.png b/assets/sprites/temperate_sprite/sbridge3x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0008.png b/assets/sprites/temperate_sprite/sbridge3x-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0008.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0009.png b/assets/sprites/temperate_sprite/sbridge3x-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0009.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0010.png b/assets/sprites/temperate_sprite/sbridge3x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0010.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0011.png b/assets/sprites/temperate_sprite/sbridge3x-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0011.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0012.png b/assets/sprites/temperate_sprite/sbridge3x-0012.png new file mode 100644 index 00000000..4499395e Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0012.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0013.png b/assets/sprites/temperate_sprite/sbridge3x-0013.png new file mode 100644 index 00000000..81834179 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0013.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0014.png b/assets/sprites/temperate_sprite/sbridge3x-0014.png new file mode 100644 index 00000000..f3319d33 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0014.png differ diff --git a/assets/sprites/temperate_sprite/sbridge3x-0015.png b/assets/sprites/temperate_sprite/sbridge3x-0015.png new file mode 100644 index 00000000..e71d9948 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge3x-0015.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0000.png b/assets/sprites/temperate_sprite/sbridge4-0000.png new file mode 100644 index 00000000..d8eb90e3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0001.png b/assets/sprites/temperate_sprite/sbridge4-0001.png new file mode 100644 index 00000000..3d70f0d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0002.png b/assets/sprites/temperate_sprite/sbridge4-0002.png new file mode 100644 index 00000000..2861036b Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0003.png b/assets/sprites/temperate_sprite/sbridge4-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0004.png b/assets/sprites/temperate_sprite/sbridge4-0004.png new file mode 100644 index 00000000..31d8bf95 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0005.png b/assets/sprites/temperate_sprite/sbridge4-0005.png new file mode 100644 index 00000000..1dbe43b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0006.png b/assets/sprites/temperate_sprite/sbridge4-0006.png new file mode 100644 index 00000000..bc383860 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4-0007.png b/assets/sprites/temperate_sprite/sbridge4-0007.png new file mode 100644 index 00000000..f1e75be2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0000.png b/assets/sprites/temperate_sprite/sbridge4d-0000.png new file mode 100644 index 00000000..23d91007 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0001.png b/assets/sprites/temperate_sprite/sbridge4d-0001.png new file mode 100644 index 00000000..b845dc35 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0002.png b/assets/sprites/temperate_sprite/sbridge4d-0002.png new file mode 100644 index 00000000..36464b24 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0003.png b/assets/sprites/temperate_sprite/sbridge4d-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0004.png b/assets/sprites/temperate_sprite/sbridge4d-0004.png new file mode 100644 index 00000000..be24302e Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0005.png b/assets/sprites/temperate_sprite/sbridge4d-0005.png new file mode 100644 index 00000000..7c04efee Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0006.png b/assets/sprites/temperate_sprite/sbridge4d-0006.png new file mode 100644 index 00000000..f77a5210 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4d-0007.png b/assets/sprites/temperate_sprite/sbridge4d-0007.png new file mode 100644 index 00000000..e04989dd Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4d-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0000.png b/assets/sprites/temperate_sprite/sbridge4h-0000.png new file mode 100644 index 00000000..4dece98a Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0001.png b/assets/sprites/temperate_sprite/sbridge4h-0001.png new file mode 100644 index 00000000..57cb4fe7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0002.png b/assets/sprites/temperate_sprite/sbridge4h-0002.png new file mode 100644 index 00000000..208653ef Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0003.png b/assets/sprites/temperate_sprite/sbridge4h-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0004.png b/assets/sprites/temperate_sprite/sbridge4h-0004.png new file mode 100644 index 00000000..4396ef8a Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0005.png b/assets/sprites/temperate_sprite/sbridge4h-0005.png new file mode 100644 index 00000000..7d8910ef Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0006.png b/assets/sprites/temperate_sprite/sbridge4h-0006.png new file mode 100644 index 00000000..07019974 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4h-0007.png b/assets/sprites/temperate_sprite/sbridge4h-0007.png new file mode 100644 index 00000000..f1e75be2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4h-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0000.png b/assets/sprites/temperate_sprite/sbridge4x-0000.png new file mode 100644 index 00000000..85296463 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0000.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0001.png b/assets/sprites/temperate_sprite/sbridge4x-0001.png new file mode 100644 index 00000000..a859abef Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0001.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0002.png b/assets/sprites/temperate_sprite/sbridge4x-0002.png new file mode 100644 index 00000000..7a5f7ba1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0002.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0003.png b/assets/sprites/temperate_sprite/sbridge4x-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0003.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0004.png b/assets/sprites/temperate_sprite/sbridge4x-0004.png new file mode 100644 index 00000000..6d4b22ed Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0004.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0005.png b/assets/sprites/temperate_sprite/sbridge4x-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0005.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0006.png b/assets/sprites/temperate_sprite/sbridge4x-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0006.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0007.png b/assets/sprites/temperate_sprite/sbridge4x-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0007.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0008.png b/assets/sprites/temperate_sprite/sbridge4x-0008.png new file mode 100644 index 00000000..18601fd8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0008.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0009.png b/assets/sprites/temperate_sprite/sbridge4x-0009.png new file mode 100644 index 00000000..dd1e0adc Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0009.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0010.png b/assets/sprites/temperate_sprite/sbridge4x-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0010.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0011.png b/assets/sprites/temperate_sprite/sbridge4x-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0011.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0012.png b/assets/sprites/temperate_sprite/sbridge4x-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0012.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0013.png b/assets/sprites/temperate_sprite/sbridge4x-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0013.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0014.png b/assets/sprites/temperate_sprite/sbridge4x-0014.png new file mode 100644 index 00000000..59ccf41d Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0014.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0015.png b/assets/sprites/temperate_sprite/sbridge4x-0015.png new file mode 100644 index 00000000..a31d106d Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0015.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0016.png b/assets/sprites/temperate_sprite/sbridge4x-0016.png new file mode 100644 index 00000000..f1a37213 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0016.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0017.png b/assets/sprites/temperate_sprite/sbridge4x-0017.png new file mode 100644 index 00000000..ee87e96c Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0017.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0018.png b/assets/sprites/temperate_sprite/sbridge4x-0018.png new file mode 100644 index 00000000..118ee36c Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0018.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0019.png b/assets/sprites/temperate_sprite/sbridge4x-0019.png new file mode 100644 index 00000000..89fbd511 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0019.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0020.png b/assets/sprites/temperate_sprite/sbridge4x-0020.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0020.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0021.png b/assets/sprites/temperate_sprite/sbridge4x-0021.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0021.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0022.png b/assets/sprites/temperate_sprite/sbridge4x-0022.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0022.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0023.png b/assets/sprites/temperate_sprite/sbridge4x-0023.png new file mode 100644 index 00000000..37f02843 Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0023.png differ diff --git a/assets/sprites/temperate_sprite/sbridge4x-0024.png b/assets/sprites/temperate_sprite/sbridge4x-0024.png new file mode 100644 index 00000000..5c6395be Binary files /dev/null and b/assets/sprites/temperate_sprite/sbridge4x-0024.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0000.png b/assets/sprites/temperate_sprite/sccln-0000.png new file mode 100644 index 00000000..9aef3ffc Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0001.png b/assets/sprites/temperate_sprite/sccln-0001.png new file mode 100644 index 00000000..b0cf3137 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0002.png b/assets/sprites/temperate_sprite/sccln-0002.png new file mode 100644 index 00000000..6ca4b182 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0003.png b/assets/sprites/temperate_sprite/sccln-0003.png new file mode 100644 index 00000000..50ef0981 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0004.png b/assets/sprites/temperate_sprite/sccln-0004.png new file mode 100644 index 00000000..cc808d3b Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccln-0005.png b/assets/sprites/temperate_sprite/sccln-0005.png new file mode 100644 index 00000000..f9bc6965 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccln-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0000.png b/assets/sprites/temperate_sprite/sccls-0000.png new file mode 100644 index 00000000..f3b16b4d Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0001.png b/assets/sprites/temperate_sprite/sccls-0001.png new file mode 100644 index 00000000..cbedc730 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0002.png b/assets/sprites/temperate_sprite/sccls-0002.png new file mode 100644 index 00000000..3405abd7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0003.png b/assets/sprites/temperate_sprite/sccls-0003.png new file mode 100644 index 00000000..8dc27ab4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0004.png b/assets/sprites/temperate_sprite/sccls-0004.png new file mode 100644 index 00000000..d5dece65 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccls-0005.png b/assets/sprites/temperate_sprite/sccls-0005.png new file mode 100644 index 00000000..2f6dae0a Binary files /dev/null and b/assets/sprites/temperate_sprite/sccls-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0000.png b/assets/sprites/temperate_sprite/sccnl-0000.png new file mode 100644 index 00000000..209d959c Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0001.png b/assets/sprites/temperate_sprite/sccnl-0001.png new file mode 100644 index 00000000..94a495a0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0002.png b/assets/sprites/temperate_sprite/sccnl-0002.png new file mode 100644 index 00000000..e8a45e4e Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0003.png b/assets/sprites/temperate_sprite/sccnl-0003.png new file mode 100644 index 00000000..a1e84f50 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0004.png b/assets/sprites/temperate_sprite/sccnl-0004.png new file mode 100644 index 00000000..75dde533 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccnl-0005.png b/assets/sprites/temperate_sprite/sccnl-0005.png new file mode 100644 index 00000000..cb529a51 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnl-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0000.png b/assets/sprites/temperate_sprite/sccnr-0000.png new file mode 100644 index 00000000..87d22b9b Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0001.png b/assets/sprites/temperate_sprite/sccnr-0001.png new file mode 100644 index 00000000..098c9971 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0002.png b/assets/sprites/temperate_sprite/sccnr-0002.png new file mode 100644 index 00000000..3ad32978 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0003.png b/assets/sprites/temperate_sprite/sccnr-0003.png new file mode 100644 index 00000000..96a74da3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0004.png b/assets/sprites/temperate_sprite/sccnr-0004.png new file mode 100644 index 00000000..dbd9eed8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccnr-0005.png b/assets/sprites/temperate_sprite/sccnr-0005.png new file mode 100644 index 00000000..88e04609 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccnr-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0000.png b/assets/sprites/temperate_sprite/sccrn-0000.png new file mode 100644 index 00000000..d3454eed Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0001.png b/assets/sprites/temperate_sprite/sccrn-0001.png new file mode 100644 index 00000000..1f92d052 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0002.png b/assets/sprites/temperate_sprite/sccrn-0002.png new file mode 100644 index 00000000..3e5a5dfe Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0003.png b/assets/sprites/temperate_sprite/sccrn-0003.png new file mode 100644 index 00000000..48ee52ec Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0004.png b/assets/sprites/temperate_sprite/sccrn-0004.png new file mode 100644 index 00000000..1959c9a3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccrn-0005.png b/assets/sprites/temperate_sprite/sccrn-0005.png new file mode 100644 index 00000000..e73304f6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrn-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0000.png b/assets/sprites/temperate_sprite/sccrs-0000.png new file mode 100644 index 00000000..b32e6605 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0001.png b/assets/sprites/temperate_sprite/sccrs-0001.png new file mode 100644 index 00000000..d47f8174 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0002.png b/assets/sprites/temperate_sprite/sccrs-0002.png new file mode 100644 index 00000000..63cd1b4c Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0003.png b/assets/sprites/temperate_sprite/sccrs-0003.png new file mode 100644 index 00000000..4552a0a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0004.png b/assets/sprites/temperate_sprite/sccrs-0004.png new file mode 100644 index 00000000..30bad4ed Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccrs-0005.png b/assets/sprites/temperate_sprite/sccrs-0005.png new file mode 100644 index 00000000..b614e7c0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccrs-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0000.png b/assets/sprites/temperate_sprite/sccsl-0000.png new file mode 100644 index 00000000..209d959c Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0001.png b/assets/sprites/temperate_sprite/sccsl-0001.png new file mode 100644 index 00000000..35abf492 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0002.png b/assets/sprites/temperate_sprite/sccsl-0002.png new file mode 100644 index 00000000..ec97496b Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0003.png b/assets/sprites/temperate_sprite/sccsl-0003.png new file mode 100644 index 00000000..df3cac7b Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0004.png b/assets/sprites/temperate_sprite/sccsl-0004.png new file mode 100644 index 00000000..75dde533 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccsl-0005.png b/assets/sprites/temperate_sprite/sccsl-0005.png new file mode 100644 index 00000000..9a3dd806 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsl-0005.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0000.png b/assets/sprites/temperate_sprite/sccsr-0000.png new file mode 100644 index 00000000..d197df5b Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0000.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0001.png b/assets/sprites/temperate_sprite/sccsr-0001.png new file mode 100644 index 00000000..d944df62 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0001.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0002.png b/assets/sprites/temperate_sprite/sccsr-0002.png new file mode 100644 index 00000000..d916a87a Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0002.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0003.png b/assets/sprites/temperate_sprite/sccsr-0003.png new file mode 100644 index 00000000..9051cf99 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0003.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0004.png b/assets/sprites/temperate_sprite/sccsr-0004.png new file mode 100644 index 00000000..c9409fe5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0004.png differ diff --git a/assets/sprites/temperate_sprite/sccsr-0005.png b/assets/sprites/temperate_sprite/sccsr-0005.png new file mode 100644 index 00000000..9a90c47c Binary files /dev/null and b/assets/sprites/temperate_sprite/sccsr-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0000.png b/assets/sprites/temperate_sprite/sh01-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0001.png b/assets/sprites/temperate_sprite/sh01-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0002.png b/assets/sprites/temperate_sprite/sh01-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0003.png b/assets/sprites/temperate_sprite/sh01-0003.png new file mode 100644 index 00000000..b4070b50 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0004.png b/assets/sprites/temperate_sprite/sh01-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0005.png b/assets/sprites/temperate_sprite/sh01-0005.png new file mode 100644 index 00000000..941e62f1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0006.png b/assets/sprites/temperate_sprite/sh01-0006.png new file mode 100644 index 00000000..e06e9eb7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0007.png b/assets/sprites/temperate_sprite/sh01-0007.png new file mode 100644 index 00000000..dc405791 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0008.png b/assets/sprites/temperate_sprite/sh01-0008.png new file mode 100644 index 00000000..17891e59 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0009.png b/assets/sprites/temperate_sprite/sh01-0009.png new file mode 100644 index 00000000..501658e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0010.png b/assets/sprites/temperate_sprite/sh01-0010.png new file mode 100644 index 00000000..c5c6e45b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0011.png b/assets/sprites/temperate_sprite/sh01-0011.png new file mode 100644 index 00000000..ab9876a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0012.png b/assets/sprites/temperate_sprite/sh01-0012.png new file mode 100644 index 00000000..d2b86142 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0013.png b/assets/sprites/temperate_sprite/sh01-0013.png new file mode 100644 index 00000000..319f72f4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0014.png b/assets/sprites/temperate_sprite/sh01-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0015.png b/assets/sprites/temperate_sprite/sh01-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0016.png b/assets/sprites/temperate_sprite/sh01-0016.png new file mode 100644 index 00000000..d1247f09 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0017.png b/assets/sprites/temperate_sprite/sh01-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0018.png b/assets/sprites/temperate_sprite/sh01-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh01-0019.png b/assets/sprites/temperate_sprite/sh01-0019.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh01-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0000.png b/assets/sprites/temperate_sprite/sh02-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0001.png b/assets/sprites/temperate_sprite/sh02-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0002.png b/assets/sprites/temperate_sprite/sh02-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0003.png b/assets/sprites/temperate_sprite/sh02-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0004.png b/assets/sprites/temperate_sprite/sh02-0004.png new file mode 100644 index 00000000..007ec8cc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0005.png b/assets/sprites/temperate_sprite/sh02-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0006.png b/assets/sprites/temperate_sprite/sh02-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0007.png b/assets/sprites/temperate_sprite/sh02-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0008.png b/assets/sprites/temperate_sprite/sh02-0008.png new file mode 100644 index 00000000..bde417d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0009.png b/assets/sprites/temperate_sprite/sh02-0009.png new file mode 100644 index 00000000..b5564ed2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0010.png b/assets/sprites/temperate_sprite/sh02-0010.png new file mode 100644 index 00000000..8c63a7c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0011.png b/assets/sprites/temperate_sprite/sh02-0011.png new file mode 100644 index 00000000..ec7ea975 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0012.png b/assets/sprites/temperate_sprite/sh02-0012.png new file mode 100644 index 00000000..a4f3046c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0013.png b/assets/sprites/temperate_sprite/sh02-0013.png new file mode 100644 index 00000000..1d56145c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0014.png b/assets/sprites/temperate_sprite/sh02-0014.png new file mode 100644 index 00000000..b4e38233 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0015.png b/assets/sprites/temperate_sprite/sh02-0015.png new file mode 100644 index 00000000..14b2ea3e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0016.png b/assets/sprites/temperate_sprite/sh02-0016.png new file mode 100644 index 00000000..d8815c4a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0017.png b/assets/sprites/temperate_sprite/sh02-0017.png new file mode 100644 index 00000000..0a70cc69 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0018.png b/assets/sprites/temperate_sprite/sh02-0018.png new file mode 100644 index 00000000..9c1053a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0019.png b/assets/sprites/temperate_sprite/sh02-0019.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0020.png b/assets/sprites/temperate_sprite/sh02-0020.png new file mode 100644 index 00000000..1f32cde3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0021.png b/assets/sprites/temperate_sprite/sh02-0021.png new file mode 100644 index 00000000..ae4a61df Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0022.png b/assets/sprites/temperate_sprite/sh02-0022.png new file mode 100644 index 00000000..ef0e0acc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0023.png b/assets/sprites/temperate_sprite/sh02-0023.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh02-0024.png b/assets/sprites/temperate_sprite/sh02-0024.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh02-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0000.png b/assets/sprites/temperate_sprite/sh03-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0001.png b/assets/sprites/temperate_sprite/sh03-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0002.png b/assets/sprites/temperate_sprite/sh03-0002.png new file mode 100644 index 00000000..d3ab1c47 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0003.png b/assets/sprites/temperate_sprite/sh03-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0004.png b/assets/sprites/temperate_sprite/sh03-0004.png new file mode 100644 index 00000000..f1ee7e09 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0005.png b/assets/sprites/temperate_sprite/sh03-0005.png new file mode 100644 index 00000000..e178a63a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0006.png b/assets/sprites/temperate_sprite/sh03-0006.png new file mode 100644 index 00000000..532ba871 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0007.png b/assets/sprites/temperate_sprite/sh03-0007.png new file mode 100644 index 00000000..ea2a5ceb Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0008.png b/assets/sprites/temperate_sprite/sh03-0008.png new file mode 100644 index 00000000..f0dd35ff Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0009.png b/assets/sprites/temperate_sprite/sh03-0009.png new file mode 100644 index 00000000..de8df912 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0010.png b/assets/sprites/temperate_sprite/sh03-0010.png new file mode 100644 index 00000000..fb5862cf Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0011.png b/assets/sprites/temperate_sprite/sh03-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0012.png b/assets/sprites/temperate_sprite/sh03-0012.png new file mode 100644 index 00000000..8ab0f208 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0013.png b/assets/sprites/temperate_sprite/sh03-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh03-0014.png b/assets/sprites/temperate_sprite/sh03-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh03-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0000.png b/assets/sprites/temperate_sprite/sh04-0000.png new file mode 100644 index 00000000..908ccd66 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0001.png b/assets/sprites/temperate_sprite/sh04-0001.png new file mode 100644 index 00000000..0b59ae3e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0002.png b/assets/sprites/temperate_sprite/sh04-0002.png new file mode 100644 index 00000000..c4d0e053 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0003.png b/assets/sprites/temperate_sprite/sh04-0003.png new file mode 100644 index 00000000..ddd6ddb5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0004.png b/assets/sprites/temperate_sprite/sh04-0004.png new file mode 100644 index 00000000..7c928bee Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0005.png b/assets/sprites/temperate_sprite/sh04-0005.png new file mode 100644 index 00000000..71e5f7d8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0006.png b/assets/sprites/temperate_sprite/sh04-0006.png new file mode 100644 index 00000000..17734335 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0007.png b/assets/sprites/temperate_sprite/sh04-0007.png new file mode 100644 index 00000000..42e366be Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh04-0008.png b/assets/sprites/temperate_sprite/sh04-0008.png new file mode 100644 index 00000000..719c06fd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh04-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0000.png b/assets/sprites/temperate_sprite/sh05-0000.png new file mode 100644 index 00000000..4c8793c5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0001.png b/assets/sprites/temperate_sprite/sh05-0001.png new file mode 100644 index 00000000..2ca3ca6c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0002.png b/assets/sprites/temperate_sprite/sh05-0002.png new file mode 100644 index 00000000..e9ea1e1c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0003.png b/assets/sprites/temperate_sprite/sh05-0003.png new file mode 100644 index 00000000..b2ce618e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0004.png b/assets/sprites/temperate_sprite/sh05-0004.png new file mode 100644 index 00000000..9049c34d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0005.png b/assets/sprites/temperate_sprite/sh05-0005.png new file mode 100644 index 00000000..1ceec631 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0006.png b/assets/sprites/temperate_sprite/sh05-0006.png new file mode 100644 index 00000000..8ce95367 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0007.png b/assets/sprites/temperate_sprite/sh05-0007.png new file mode 100644 index 00000000..97dd4e4d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh05-0008.png b/assets/sprites/temperate_sprite/sh05-0008.png new file mode 100644 index 00000000..c5d62c26 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh05-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0000.png b/assets/sprites/temperate_sprite/sh06-0000.png new file mode 100644 index 00000000..4e145f22 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0001.png b/assets/sprites/temperate_sprite/sh06-0001.png new file mode 100644 index 00000000..0316cdda Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0002.png b/assets/sprites/temperate_sprite/sh06-0002.png new file mode 100644 index 00000000..3a9d98e8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0003.png b/assets/sprites/temperate_sprite/sh06-0003.png new file mode 100644 index 00000000..2ce18b54 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0004.png b/assets/sprites/temperate_sprite/sh06-0004.png new file mode 100644 index 00000000..460a99bd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0005.png b/assets/sprites/temperate_sprite/sh06-0005.png new file mode 100644 index 00000000..2ff45dc9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0006.png b/assets/sprites/temperate_sprite/sh06-0006.png new file mode 100644 index 00000000..cdb8e89e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0007.png b/assets/sprites/temperate_sprite/sh06-0007.png new file mode 100644 index 00000000..560d037f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh06-0008.png b/assets/sprites/temperate_sprite/sh06-0008.png new file mode 100644 index 00000000..d31194d5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh06-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0000.png b/assets/sprites/temperate_sprite/sh07-0000.png new file mode 100644 index 00000000..6fb3172e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0001.png b/assets/sprites/temperate_sprite/sh07-0001.png new file mode 100644 index 00000000..8671e3f3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0002.png b/assets/sprites/temperate_sprite/sh07-0002.png new file mode 100644 index 00000000..bf0806c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0003.png b/assets/sprites/temperate_sprite/sh07-0003.png new file mode 100644 index 00000000..70b4f9e3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0004.png b/assets/sprites/temperate_sprite/sh07-0004.png new file mode 100644 index 00000000..437c0ca6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0005.png b/assets/sprites/temperate_sprite/sh07-0005.png new file mode 100644 index 00000000..d1a34e01 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0006.png b/assets/sprites/temperate_sprite/sh07-0006.png new file mode 100644 index 00000000..07ccbcdd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0007.png b/assets/sprites/temperate_sprite/sh07-0007.png new file mode 100644 index 00000000..1afbc311 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh07-0008.png b/assets/sprites/temperate_sprite/sh07-0008.png new file mode 100644 index 00000000..719c06fd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh07-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh08-0000.png b/assets/sprites/temperate_sprite/sh08-0000.png new file mode 100644 index 00000000..e04a54c6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh08-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh08-0001.png b/assets/sprites/temperate_sprite/sh08-0001.png new file mode 100644 index 00000000..31777e79 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh08-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0000.png b/assets/sprites/temperate_sprite/sh09-0000.png new file mode 100644 index 00000000..5be22f0b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0001.png b/assets/sprites/temperate_sprite/sh09-0001.png new file mode 100644 index 00000000..0dafe968 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0002.png b/assets/sprites/temperate_sprite/sh09-0002.png new file mode 100644 index 00000000..e0219041 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0003.png b/assets/sprites/temperate_sprite/sh09-0003.png new file mode 100644 index 00000000..0fc4c009 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0004.png b/assets/sprites/temperate_sprite/sh09-0004.png new file mode 100644 index 00000000..322518ed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0005.png b/assets/sprites/temperate_sprite/sh09-0005.png new file mode 100644 index 00000000..4973cf45 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0006.png b/assets/sprites/temperate_sprite/sh09-0006.png new file mode 100644 index 00000000..f0f2518c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0007.png b/assets/sprites/temperate_sprite/sh09-0007.png new file mode 100644 index 00000000..2aade40d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh09-0008.png b/assets/sprites/temperate_sprite/sh09-0008.png new file mode 100644 index 00000000..042982ac Binary files /dev/null and b/assets/sprites/temperate_sprite/sh09-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0000.png b/assets/sprites/temperate_sprite/sh10-0000.png new file mode 100644 index 00000000..7a138bce Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0001.png b/assets/sprites/temperate_sprite/sh10-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0002.png b/assets/sprites/temperate_sprite/sh10-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0003.png b/assets/sprites/temperate_sprite/sh10-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0004.png b/assets/sprites/temperate_sprite/sh10-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0005.png b/assets/sprites/temperate_sprite/sh10-0005.png new file mode 100644 index 00000000..916785b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0006.png b/assets/sprites/temperate_sprite/sh10-0006.png new file mode 100644 index 00000000..1d5d6a7a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0007.png b/assets/sprites/temperate_sprite/sh10-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0008.png b/assets/sprites/temperate_sprite/sh10-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0009.png b/assets/sprites/temperate_sprite/sh10-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0010.png b/assets/sprites/temperate_sprite/sh10-0010.png new file mode 100644 index 00000000..63fd559f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0011.png b/assets/sprites/temperate_sprite/sh10-0011.png new file mode 100644 index 00000000..b856a5ed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0012.png b/assets/sprites/temperate_sprite/sh10-0012.png new file mode 100644 index 00000000..944c06dc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0013.png b/assets/sprites/temperate_sprite/sh10-0013.png new file mode 100644 index 00000000..90be3811 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0014.png b/assets/sprites/temperate_sprite/sh10-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0015.png b/assets/sprites/temperate_sprite/sh10-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0016.png b/assets/sprites/temperate_sprite/sh10-0016.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0017.png b/assets/sprites/temperate_sprite/sh10-0017.png new file mode 100644 index 00000000..75681a63 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0018.png b/assets/sprites/temperate_sprite/sh10-0018.png new file mode 100644 index 00000000..c48e6694 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0019.png b/assets/sprites/temperate_sprite/sh10-0019.png new file mode 100644 index 00000000..d7c22a38 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0020.png b/assets/sprites/temperate_sprite/sh10-0020.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0021.png b/assets/sprites/temperate_sprite/sh10-0021.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0022.png b/assets/sprites/temperate_sprite/sh10-0022.png new file mode 100644 index 00000000..29a108a0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0023.png b/assets/sprites/temperate_sprite/sh10-0023.png new file mode 100644 index 00000000..1e468098 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0024.png b/assets/sprites/temperate_sprite/sh10-0024.png new file mode 100644 index 00000000..30e790f6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0025.png b/assets/sprites/temperate_sprite/sh10-0025.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0025.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0026.png b/assets/sprites/temperate_sprite/sh10-0026.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0026.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0027.png b/assets/sprites/temperate_sprite/sh10-0027.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0027.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0028.png b/assets/sprites/temperate_sprite/sh10-0028.png new file mode 100644 index 00000000..96adc187 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0028.png differ diff --git a/assets/sprites/temperate_sprite/sh10-0029.png b/assets/sprites/temperate_sprite/sh10-0029.png new file mode 100644 index 00000000..e3bc809b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh10-0029.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0000.png b/assets/sprites/temperate_sprite/sh11-0000.png new file mode 100644 index 00000000..cf25b42e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0001.png b/assets/sprites/temperate_sprite/sh11-0001.png new file mode 100644 index 00000000..27aa57a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0002.png b/assets/sprites/temperate_sprite/sh11-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0003.png b/assets/sprites/temperate_sprite/sh11-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0004.png b/assets/sprites/temperate_sprite/sh11-0004.png new file mode 100644 index 00000000..754b9624 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0005.png b/assets/sprites/temperate_sprite/sh11-0005.png new file mode 100644 index 00000000..02d818a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0006.png b/assets/sprites/temperate_sprite/sh11-0006.png new file mode 100644 index 00000000..4c6f2d27 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0007.png b/assets/sprites/temperate_sprite/sh11-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0008.png b/assets/sprites/temperate_sprite/sh11-0008.png new file mode 100644 index 00000000..bcc09122 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0009.png b/assets/sprites/temperate_sprite/sh11-0009.png new file mode 100644 index 00000000..15ba88fc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0010.png b/assets/sprites/temperate_sprite/sh11-0010.png new file mode 100644 index 00000000..08448c95 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0011.png b/assets/sprites/temperate_sprite/sh11-0011.png new file mode 100644 index 00000000..919e2bd6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0012.png b/assets/sprites/temperate_sprite/sh11-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0013.png b/assets/sprites/temperate_sprite/sh11-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0014.png b/assets/sprites/temperate_sprite/sh11-0014.png new file mode 100644 index 00000000..534040db Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0015.png b/assets/sprites/temperate_sprite/sh11-0015.png new file mode 100644 index 00000000..cdf26207 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0016.png b/assets/sprites/temperate_sprite/sh11-0016.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0017.png b/assets/sprites/temperate_sprite/sh11-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0018.png b/assets/sprites/temperate_sprite/sh11-0018.png new file mode 100644 index 00000000..3217864a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh11-0019.png b/assets/sprites/temperate_sprite/sh11-0019.png new file mode 100644 index 00000000..cb22ecbe Binary files /dev/null and b/assets/sprites/temperate_sprite/sh11-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0000.png b/assets/sprites/temperate_sprite/sh12-0000.png new file mode 100644 index 00000000..08e8151f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0001.png b/assets/sprites/temperate_sprite/sh12-0001.png new file mode 100644 index 00000000..b6655d89 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0002.png b/assets/sprites/temperate_sprite/sh12-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0003.png b/assets/sprites/temperate_sprite/sh12-0003.png new file mode 100644 index 00000000..667299bc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0004.png b/assets/sprites/temperate_sprite/sh12-0004.png new file mode 100644 index 00000000..33a90cb1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0005.png b/assets/sprites/temperate_sprite/sh12-0005.png new file mode 100644 index 00000000..5bbb7b5d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0006.png b/assets/sprites/temperate_sprite/sh12-0006.png new file mode 100644 index 00000000..e55fa017 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0007.png b/assets/sprites/temperate_sprite/sh12-0007.png new file mode 100644 index 00000000..f344758d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0008.png b/assets/sprites/temperate_sprite/sh12-0008.png new file mode 100644 index 00000000..95947d6f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0009.png b/assets/sprites/temperate_sprite/sh12-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0010.png b/assets/sprites/temperate_sprite/sh12-0010.png new file mode 100644 index 00000000..5c85994d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0011.png b/assets/sprites/temperate_sprite/sh12-0011.png new file mode 100644 index 00000000..959ff76c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0012.png b/assets/sprites/temperate_sprite/sh12-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0013.png b/assets/sprites/temperate_sprite/sh12-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh12-0014.png b/assets/sprites/temperate_sprite/sh12-0014.png new file mode 100644 index 00000000..cbee56b0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh12-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0000.png b/assets/sprites/temperate_sprite/sh13-0000.png new file mode 100644 index 00000000..d287ff7c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0001.png b/assets/sprites/temperate_sprite/sh13-0001.png new file mode 100644 index 00000000..2cb75c31 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0002.png b/assets/sprites/temperate_sprite/sh13-0002.png new file mode 100644 index 00000000..6f932082 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0003.png b/assets/sprites/temperate_sprite/sh13-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0004.png b/assets/sprites/temperate_sprite/sh13-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0005.png b/assets/sprites/temperate_sprite/sh13-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0006.png b/assets/sprites/temperate_sprite/sh13-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0007.png b/assets/sprites/temperate_sprite/sh13-0007.png new file mode 100644 index 00000000..5c92ee84 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0008.png b/assets/sprites/temperate_sprite/sh13-0008.png new file mode 100644 index 00000000..5ea1ba95 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0009.png b/assets/sprites/temperate_sprite/sh13-0009.png new file mode 100644 index 00000000..401ac8ee Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0010.png b/assets/sprites/temperate_sprite/sh13-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0011.png b/assets/sprites/temperate_sprite/sh13-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0012.png b/assets/sprites/temperate_sprite/sh13-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0013.png b/assets/sprites/temperate_sprite/sh13-0013.png new file mode 100644 index 00000000..90e15c80 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0014.png b/assets/sprites/temperate_sprite/sh13-0014.png new file mode 100644 index 00000000..618f0186 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0015.png b/assets/sprites/temperate_sprite/sh13-0015.png new file mode 100644 index 00000000..166e7f55 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0016.png b/assets/sprites/temperate_sprite/sh13-0016.png new file mode 100644 index 00000000..49dd8629 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0017.png b/assets/sprites/temperate_sprite/sh13-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0018.png b/assets/sprites/temperate_sprite/sh13-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0019.png b/assets/sprites/temperate_sprite/sh13-0019.png new file mode 100644 index 00000000..ad7f7bb0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0020.png b/assets/sprites/temperate_sprite/sh13-0020.png new file mode 100644 index 00000000..1e5f274b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0021.png b/assets/sprites/temperate_sprite/sh13-0021.png new file mode 100644 index 00000000..29b5744a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0022.png b/assets/sprites/temperate_sprite/sh13-0022.png new file mode 100644 index 00000000..e64eebd2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0023.png b/assets/sprites/temperate_sprite/sh13-0023.png new file mode 100644 index 00000000..4f4ac94f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0024.png b/assets/sprites/temperate_sprite/sh13-0024.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0025.png b/assets/sprites/temperate_sprite/sh13-0025.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0025.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0026.png b/assets/sprites/temperate_sprite/sh13-0026.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0026.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0027.png b/assets/sprites/temperate_sprite/sh13-0027.png new file mode 100644 index 00000000..308d2d36 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0027.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0028.png b/assets/sprites/temperate_sprite/sh13-0028.png new file mode 100644 index 00000000..6cf8e91f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0028.png differ diff --git a/assets/sprites/temperate_sprite/sh13-0029.png b/assets/sprites/temperate_sprite/sh13-0029.png new file mode 100644 index 00000000..b710fdcb Binary files /dev/null and b/assets/sprites/temperate_sprite/sh13-0029.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0000.png b/assets/sprites/temperate_sprite/sh14-0000.png new file mode 100644 index 00000000..57fced09 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0001.png b/assets/sprites/temperate_sprite/sh14-0001.png new file mode 100644 index 00000000..9f857eb7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0002.png b/assets/sprites/temperate_sprite/sh14-0002.png new file mode 100644 index 00000000..aeffc346 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0003.png b/assets/sprites/temperate_sprite/sh14-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0004.png b/assets/sprites/temperate_sprite/sh14-0004.png new file mode 100644 index 00000000..df6c2d27 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0005.png b/assets/sprites/temperate_sprite/sh14-0005.png new file mode 100644 index 00000000..c0fb8b4e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0006.png b/assets/sprites/temperate_sprite/sh14-0006.png new file mode 100644 index 00000000..d8bf5a71 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0007.png b/assets/sprites/temperate_sprite/sh14-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0008.png b/assets/sprites/temperate_sprite/sh14-0008.png new file mode 100644 index 00000000..322310b1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0009.png b/assets/sprites/temperate_sprite/sh14-0009.png new file mode 100644 index 00000000..bd869e14 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0010.png b/assets/sprites/temperate_sprite/sh14-0010.png new file mode 100644 index 00000000..f93efa1b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0011.png b/assets/sprites/temperate_sprite/sh14-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0012.png b/assets/sprites/temperate_sprite/sh14-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0013.png b/assets/sprites/temperate_sprite/sh14-0013.png new file mode 100644 index 00000000..02972bf0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0014.png b/assets/sprites/temperate_sprite/sh14-0014.png new file mode 100644 index 00000000..e3061ecc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh14-0015.png b/assets/sprites/temperate_sprite/sh14-0015.png new file mode 100644 index 00000000..477f1dfa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh14-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0000.png b/assets/sprites/temperate_sprite/sh15-0000.png new file mode 100644 index 00000000..223d0859 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0001.png b/assets/sprites/temperate_sprite/sh15-0001.png new file mode 100644 index 00000000..24dcf0dc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0002.png b/assets/sprites/temperate_sprite/sh15-0002.png new file mode 100644 index 00000000..928cbdfa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0003.png b/assets/sprites/temperate_sprite/sh15-0003.png new file mode 100644 index 00000000..0dd34893 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0004.png b/assets/sprites/temperate_sprite/sh15-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0005.png b/assets/sprites/temperate_sprite/sh15-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0006.png b/assets/sprites/temperate_sprite/sh15-0006.png new file mode 100644 index 00000000..b172b4aa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0007.png b/assets/sprites/temperate_sprite/sh15-0007.png new file mode 100644 index 00000000..b4888a13 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0008.png b/assets/sprites/temperate_sprite/sh15-0008.png new file mode 100644 index 00000000..b326c731 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0009.png b/assets/sprites/temperate_sprite/sh15-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0010.png b/assets/sprites/temperate_sprite/sh15-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0011.png b/assets/sprites/temperate_sprite/sh15-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0012.png b/assets/sprites/temperate_sprite/sh15-0012.png new file mode 100644 index 00000000..434843d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0013.png b/assets/sprites/temperate_sprite/sh15-0013.png new file mode 100644 index 00000000..3225bc17 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh15-0014.png b/assets/sprites/temperate_sprite/sh15-0014.png new file mode 100644 index 00000000..6aaa38d8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh15-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0000.png b/assets/sprites/temperate_sprite/sh16-0000.png new file mode 100644 index 00000000..0bb832df Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0001.png b/assets/sprites/temperate_sprite/sh16-0001.png new file mode 100644 index 00000000..edcf0db3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0002.png b/assets/sprites/temperate_sprite/sh16-0002.png new file mode 100644 index 00000000..120de2b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0003.png b/assets/sprites/temperate_sprite/sh16-0003.png new file mode 100644 index 00000000..cca1cbef Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0004.png b/assets/sprites/temperate_sprite/sh16-0004.png new file mode 100644 index 00000000..a5156f9d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0005.png b/assets/sprites/temperate_sprite/sh16-0005.png new file mode 100644 index 00000000..9ef84fe6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0006.png b/assets/sprites/temperate_sprite/sh16-0006.png new file mode 100644 index 00000000..689d9977 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0007.png b/assets/sprites/temperate_sprite/sh16-0007.png new file mode 100644 index 00000000..cac0c1a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh16-0008.png b/assets/sprites/temperate_sprite/sh16-0008.png new file mode 100644 index 00000000..761c06ef Binary files /dev/null and b/assets/sprites/temperate_sprite/sh16-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh17-0000.png b/assets/sprites/temperate_sprite/sh17-0000.png new file mode 100644 index 00000000..09f180b8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh17-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh17-0001.png b/assets/sprites/temperate_sprite/sh17-0001.png new file mode 100644 index 00000000..2a121c89 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh17-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0000.png b/assets/sprites/temperate_sprite/sh18-0000.png new file mode 100644 index 00000000..15fe0052 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0001.png b/assets/sprites/temperate_sprite/sh18-0001.png new file mode 100644 index 00000000..674664e4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0002.png b/assets/sprites/temperate_sprite/sh18-0002.png new file mode 100644 index 00000000..a527e4db Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0003.png b/assets/sprites/temperate_sprite/sh18-0003.png new file mode 100644 index 00000000..7f5d9cf3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0004.png b/assets/sprites/temperate_sprite/sh18-0004.png new file mode 100644 index 00000000..6e6a3246 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0005.png b/assets/sprites/temperate_sprite/sh18-0005.png new file mode 100644 index 00000000..288b32c1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0006.png b/assets/sprites/temperate_sprite/sh18-0006.png new file mode 100644 index 00000000..4d2cf38a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0007.png b/assets/sprites/temperate_sprite/sh18-0007.png new file mode 100644 index 00000000..200255c2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh18-0008.png b/assets/sprites/temperate_sprite/sh18-0008.png new file mode 100644 index 00000000..0e2bcdb4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh18-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0000.png b/assets/sprites/temperate_sprite/sh19-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0001.png b/assets/sprites/temperate_sprite/sh19-0001.png new file mode 100644 index 00000000..94e12173 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0002.png b/assets/sprites/temperate_sprite/sh19-0002.png new file mode 100644 index 00000000..9466f858 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0003.png b/assets/sprites/temperate_sprite/sh19-0003.png new file mode 100644 index 00000000..6cc6d187 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0004.png b/assets/sprites/temperate_sprite/sh19-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0005.png b/assets/sprites/temperate_sprite/sh19-0005.png new file mode 100644 index 00000000..122fa36c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0006.png b/assets/sprites/temperate_sprite/sh19-0006.png new file mode 100644 index 00000000..b0a8bd15 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0007.png b/assets/sprites/temperate_sprite/sh19-0007.png new file mode 100644 index 00000000..457e19f9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0008.png b/assets/sprites/temperate_sprite/sh19-0008.png new file mode 100644 index 00000000..cc82c598 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0009.png b/assets/sprites/temperate_sprite/sh19-0009.png new file mode 100644 index 00000000..e09096cb Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0010.png b/assets/sprites/temperate_sprite/sh19-0010.png new file mode 100644 index 00000000..9e812d17 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0011.png b/assets/sprites/temperate_sprite/sh19-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0012.png b/assets/sprites/temperate_sprite/sh19-0012.png new file mode 100644 index 00000000..47f1495a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0013.png b/assets/sprites/temperate_sprite/sh19-0013.png new file mode 100644 index 00000000..c050d798 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0014.png b/assets/sprites/temperate_sprite/sh19-0014.png new file mode 100644 index 00000000..e158422a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0015.png b/assets/sprites/temperate_sprite/sh19-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0016.png b/assets/sprites/temperate_sprite/sh19-0016.png new file mode 100644 index 00000000..4b4b5946 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0017.png b/assets/sprites/temperate_sprite/sh19-0017.png new file mode 100644 index 00000000..a33e2721 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0018.png b/assets/sprites/temperate_sprite/sh19-0018.png new file mode 100644 index 00000000..ce74f92f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh19-0019.png b/assets/sprites/temperate_sprite/sh19-0019.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh19-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0000.png b/assets/sprites/temperate_sprite/sh20-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0001.png b/assets/sprites/temperate_sprite/sh20-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0002.png b/assets/sprites/temperate_sprite/sh20-0002.png new file mode 100644 index 00000000..3862c1de Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0003.png b/assets/sprites/temperate_sprite/sh20-0003.png new file mode 100644 index 00000000..fbf9cc2e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0004.png b/assets/sprites/temperate_sprite/sh20-0004.png new file mode 100644 index 00000000..f1ffdc93 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0005.png b/assets/sprites/temperate_sprite/sh20-0005.png new file mode 100644 index 00000000..4a0a5530 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0006.png b/assets/sprites/temperate_sprite/sh20-0006.png new file mode 100644 index 00000000..881a416e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0007.png b/assets/sprites/temperate_sprite/sh20-0007.png new file mode 100644 index 00000000..30404e51 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0008.png b/assets/sprites/temperate_sprite/sh20-0008.png new file mode 100644 index 00000000..50a444c0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0009.png b/assets/sprites/temperate_sprite/sh20-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0010.png b/assets/sprites/temperate_sprite/sh20-0010.png new file mode 100644 index 00000000..cdb440b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0011.png b/assets/sprites/temperate_sprite/sh20-0011.png new file mode 100644 index 00000000..b9e1c70a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0012.png b/assets/sprites/temperate_sprite/sh20-0012.png new file mode 100644 index 00000000..4019a5c2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0013.png b/assets/sprites/temperate_sprite/sh20-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0014.png b/assets/sprites/temperate_sprite/sh20-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0015.png b/assets/sprites/temperate_sprite/sh20-0015.png new file mode 100644 index 00000000..b807bda7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0016.png b/assets/sprites/temperate_sprite/sh20-0016.png new file mode 100644 index 00000000..3a87de50 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0017.png b/assets/sprites/temperate_sprite/sh20-0017.png new file mode 100644 index 00000000..58747273 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0018.png b/assets/sprites/temperate_sprite/sh20-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh20-0019.png b/assets/sprites/temperate_sprite/sh20-0019.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh20-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0000.png b/assets/sprites/temperate_sprite/sh21-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0001.png b/assets/sprites/temperate_sprite/sh21-0001.png new file mode 100644 index 00000000..06f97109 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0002.png b/assets/sprites/temperate_sprite/sh21-0002.png new file mode 100644 index 00000000..970418bc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0003.png b/assets/sprites/temperate_sprite/sh21-0003.png new file mode 100644 index 00000000..ec7a9f6c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0004.png b/assets/sprites/temperate_sprite/sh21-0004.png new file mode 100644 index 00000000..5280d561 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0005.png b/assets/sprites/temperate_sprite/sh21-0005.png new file mode 100644 index 00000000..70e51579 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0006.png b/assets/sprites/temperate_sprite/sh21-0006.png new file mode 100644 index 00000000..54d7acbf Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0007.png b/assets/sprites/temperate_sprite/sh21-0007.png new file mode 100644 index 00000000..6d2f6c3a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0008.png b/assets/sprites/temperate_sprite/sh21-0008.png new file mode 100644 index 00000000..bfaa6b8a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0009.png b/assets/sprites/temperate_sprite/sh21-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0010.png b/assets/sprites/temperate_sprite/sh21-0010.png new file mode 100644 index 00000000..5c669711 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0011.png b/assets/sprites/temperate_sprite/sh21-0011.png new file mode 100644 index 00000000..36f70489 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0012.png b/assets/sprites/temperate_sprite/sh21-0012.png new file mode 100644 index 00000000..a1efb06a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0013.png b/assets/sprites/temperate_sprite/sh21-0013.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh21-0014.png b/assets/sprites/temperate_sprite/sh21-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh21-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0000.png b/assets/sprites/temperate_sprite/sh22-0000.png new file mode 100644 index 00000000..4e22b314 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0001.png b/assets/sprites/temperate_sprite/sh22-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0002.png b/assets/sprites/temperate_sprite/sh22-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0003.png b/assets/sprites/temperate_sprite/sh22-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0004.png b/assets/sprites/temperate_sprite/sh22-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0005.png b/assets/sprites/temperate_sprite/sh22-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0006.png b/assets/sprites/temperate_sprite/sh22-0006.png new file mode 100644 index 00000000..ce110d4f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0007.png b/assets/sprites/temperate_sprite/sh22-0007.png new file mode 100644 index 00000000..a2deb265 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0008.png b/assets/sprites/temperate_sprite/sh22-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0009.png b/assets/sprites/temperate_sprite/sh22-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0010.png b/assets/sprites/temperate_sprite/sh22-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0011.png b/assets/sprites/temperate_sprite/sh22-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0012.png b/assets/sprites/temperate_sprite/sh22-0012.png new file mode 100644 index 00000000..ac10ce67 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0013.png b/assets/sprites/temperate_sprite/sh22-0013.png new file mode 100644 index 00000000..30343b42 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0014.png b/assets/sprites/temperate_sprite/sh22-0014.png new file mode 100644 index 00000000..afdfa810 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0015.png b/assets/sprites/temperate_sprite/sh22-0015.png new file mode 100644 index 00000000..0f918145 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0016.png b/assets/sprites/temperate_sprite/sh22-0016.png new file mode 100644 index 00000000..1f5d0493 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0017.png b/assets/sprites/temperate_sprite/sh22-0017.png new file mode 100644 index 00000000..f0fb888d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0018.png b/assets/sprites/temperate_sprite/sh22-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0019.png b/assets/sprites/temperate_sprite/sh22-0019.png new file mode 100644 index 00000000..4168a396 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0020.png b/assets/sprites/temperate_sprite/sh22-0020.png new file mode 100644 index 00000000..5f40147c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0021.png b/assets/sprites/temperate_sprite/sh22-0021.png new file mode 100644 index 00000000..b5c26aed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0022.png b/assets/sprites/temperate_sprite/sh22-0022.png new file mode 100644 index 00000000..7a19cc0b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0023.png b/assets/sprites/temperate_sprite/sh22-0023.png new file mode 100644 index 00000000..e577c6d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0024.png b/assets/sprites/temperate_sprite/sh22-0024.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0025.png b/assets/sprites/temperate_sprite/sh22-0025.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0025.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0026.png b/assets/sprites/temperate_sprite/sh22-0026.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0026.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0027.png b/assets/sprites/temperate_sprite/sh22-0027.png new file mode 100644 index 00000000..320a1975 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0027.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0028.png b/assets/sprites/temperate_sprite/sh22-0028.png new file mode 100644 index 00000000..fe642a33 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0028.png differ diff --git a/assets/sprites/temperate_sprite/sh22-0029.png b/assets/sprites/temperate_sprite/sh22-0029.png new file mode 100644 index 00000000..58fe88df Binary files /dev/null and b/assets/sprites/temperate_sprite/sh22-0029.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0000.png b/assets/sprites/temperate_sprite/sh23-0000.png new file mode 100644 index 00000000..620eed15 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0001.png b/assets/sprites/temperate_sprite/sh23-0001.png new file mode 100644 index 00000000..41fe8820 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0002.png b/assets/sprites/temperate_sprite/sh23-0002.png new file mode 100644 index 00000000..2fd33140 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0003.png b/assets/sprites/temperate_sprite/sh23-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0004.png b/assets/sprites/temperate_sprite/sh23-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0005.png b/assets/sprites/temperate_sprite/sh23-0005.png new file mode 100644 index 00000000..ba4f4c62 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0006.png b/assets/sprites/temperate_sprite/sh23-0006.png new file mode 100644 index 00000000..167b6677 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0007.png b/assets/sprites/temperate_sprite/sh23-0007.png new file mode 100644 index 00000000..571363f6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0008.png b/assets/sprites/temperate_sprite/sh23-0008.png new file mode 100644 index 00000000..98130999 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0009.png b/assets/sprites/temperate_sprite/sh23-0009.png new file mode 100644 index 00000000..08e728a8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0010.png b/assets/sprites/temperate_sprite/sh23-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0011.png b/assets/sprites/temperate_sprite/sh23-0011.png new file mode 100644 index 00000000..fa674065 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0012.png b/assets/sprites/temperate_sprite/sh23-0012.png new file mode 100644 index 00000000..98e302e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0013.png b/assets/sprites/temperate_sprite/sh23-0013.png new file mode 100644 index 00000000..50d51afa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0014.png b/assets/sprites/temperate_sprite/sh23-0014.png new file mode 100644 index 00000000..6f129fae Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0015.png b/assets/sprites/temperate_sprite/sh23-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0016.png b/assets/sprites/temperate_sprite/sh23-0016.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0017.png b/assets/sprites/temperate_sprite/sh23-0017.png new file mode 100644 index 00000000..246493da Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0018.png b/assets/sprites/temperate_sprite/sh23-0018.png new file mode 100644 index 00000000..46045fc3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0019.png b/assets/sprites/temperate_sprite/sh23-0019.png new file mode 100644 index 00000000..268d076f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0020.png b/assets/sprites/temperate_sprite/sh23-0020.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0021.png b/assets/sprites/temperate_sprite/sh23-0021.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0022.png b/assets/sprites/temperate_sprite/sh23-0022.png new file mode 100644 index 00000000..4535d841 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0023.png b/assets/sprites/temperate_sprite/sh23-0023.png new file mode 100644 index 00000000..7795475a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh23-0024.png b/assets/sprites/temperate_sprite/sh23-0024.png new file mode 100644 index 00000000..d04e058d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh23-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0000.png b/assets/sprites/temperate_sprite/sh24-0000.png new file mode 100644 index 00000000..327a5f4c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0001.png b/assets/sprites/temperate_sprite/sh24-0001.png new file mode 100644 index 00000000..7a7155ce Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0002.png b/assets/sprites/temperate_sprite/sh24-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0003.png b/assets/sprites/temperate_sprite/sh24-0003.png new file mode 100644 index 00000000..2b080b42 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0004.png b/assets/sprites/temperate_sprite/sh24-0004.png new file mode 100644 index 00000000..d3310e61 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0005.png b/assets/sprites/temperate_sprite/sh24-0005.png new file mode 100644 index 00000000..7e9befc8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0006.png b/assets/sprites/temperate_sprite/sh24-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0007.png b/assets/sprites/temperate_sprite/sh24-0007.png new file mode 100644 index 00000000..6c9f4b70 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0008.png b/assets/sprites/temperate_sprite/sh24-0008.png new file mode 100644 index 00000000..7f03cea7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0009.png b/assets/sprites/temperate_sprite/sh24-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0010.png b/assets/sprites/temperate_sprite/sh24-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh24-0011.png b/assets/sprites/temperate_sprite/sh24-0011.png new file mode 100644 index 00000000..9da8f287 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh24-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0000.png b/assets/sprites/temperate_sprite/sh25-0000.png new file mode 100644 index 00000000..7a0a4c8d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0001.png b/assets/sprites/temperate_sprite/sh25-0001.png new file mode 100644 index 00000000..44e2e9e1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0002.png b/assets/sprites/temperate_sprite/sh25-0002.png new file mode 100644 index 00000000..6743dd18 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0003.png b/assets/sprites/temperate_sprite/sh25-0003.png new file mode 100644 index 00000000..51116883 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0004.png b/assets/sprites/temperate_sprite/sh25-0004.png new file mode 100644 index 00000000..ea3f5598 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0005.png b/assets/sprites/temperate_sprite/sh25-0005.png new file mode 100644 index 00000000..45c036d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0006.png b/assets/sprites/temperate_sprite/sh25-0006.png new file mode 100644 index 00000000..d53949d4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0007.png b/assets/sprites/temperate_sprite/sh25-0007.png new file mode 100644 index 00000000..b4b0ed4f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh25-0008.png b/assets/sprites/temperate_sprite/sh25-0008.png new file mode 100644 index 00000000..6a522379 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh25-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0000.png b/assets/sprites/temperate_sprite/sh26-0000.png new file mode 100644 index 00000000..01791b3e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0001.png b/assets/sprites/temperate_sprite/sh26-0001.png new file mode 100644 index 00000000..26747b5c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0002.png b/assets/sprites/temperate_sprite/sh26-0002.png new file mode 100644 index 00000000..342cc6b7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0003.png b/assets/sprites/temperate_sprite/sh26-0003.png new file mode 100644 index 00000000..dc45bbfa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0004.png b/assets/sprites/temperate_sprite/sh26-0004.png new file mode 100644 index 00000000..92600755 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0005.png b/assets/sprites/temperate_sprite/sh26-0005.png new file mode 100644 index 00000000..71e3dca0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0006.png b/assets/sprites/temperate_sprite/sh26-0006.png new file mode 100644 index 00000000..98a88fc9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0007.png b/assets/sprites/temperate_sprite/sh26-0007.png new file mode 100644 index 00000000..66423ced Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh26-0008.png b/assets/sprites/temperate_sprite/sh26-0008.png new file mode 100644 index 00000000..f2215eda Binary files /dev/null and b/assets/sprites/temperate_sprite/sh26-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0000.png b/assets/sprites/temperate_sprite/sh27-0000.png new file mode 100644 index 00000000..977dd837 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0001.png b/assets/sprites/temperate_sprite/sh27-0001.png new file mode 100644 index 00000000..694f4343 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0002.png b/assets/sprites/temperate_sprite/sh27-0002.png new file mode 100644 index 00000000..c330eadd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0003.png b/assets/sprites/temperate_sprite/sh27-0003.png new file mode 100644 index 00000000..02a76fb6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0004.png b/assets/sprites/temperate_sprite/sh27-0004.png new file mode 100644 index 00000000..003b3fa6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0005.png b/assets/sprites/temperate_sprite/sh27-0005.png new file mode 100644 index 00000000..28abbc3b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0006.png b/assets/sprites/temperate_sprite/sh27-0006.png new file mode 100644 index 00000000..941facdd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0007.png b/assets/sprites/temperate_sprite/sh27-0007.png new file mode 100644 index 00000000..81d7cb25 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh27-0008.png b/assets/sprites/temperate_sprite/sh27-0008.png new file mode 100644 index 00000000..16df589c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh27-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0000.png b/assets/sprites/temperate_sprite/sh28-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0001.png b/assets/sprites/temperate_sprite/sh28-0001.png new file mode 100644 index 00000000..e199cfc9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0002.png b/assets/sprites/temperate_sprite/sh28-0002.png new file mode 100644 index 00000000..4791794b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0003.png b/assets/sprites/temperate_sprite/sh28-0003.png new file mode 100644 index 00000000..020702fa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0004.png b/assets/sprites/temperate_sprite/sh28-0004.png new file mode 100644 index 00000000..d2bf0e45 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0005.png b/assets/sprites/temperate_sprite/sh28-0005.png new file mode 100644 index 00000000..b0e53112 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0006.png b/assets/sprites/temperate_sprite/sh28-0006.png new file mode 100644 index 00000000..f2b2e7b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0007.png b/assets/sprites/temperate_sprite/sh28-0007.png new file mode 100644 index 00000000..c71b4edf Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh28-0008.png b/assets/sprites/temperate_sprite/sh28-0008.png new file mode 100644 index 00000000..e79029a4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh28-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh29-0000.png b/assets/sprites/temperate_sprite/sh29-0000.png new file mode 100644 index 00000000..f08ae34e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh29-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh29-0001.png b/assets/sprites/temperate_sprite/sh29-0001.png new file mode 100644 index 00000000..30a4f836 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh29-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0000.png b/assets/sprites/temperate_sprite/sh30-0000.png new file mode 100644 index 00000000..ce234c20 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0001.png b/assets/sprites/temperate_sprite/sh30-0001.png new file mode 100644 index 00000000..d4900eed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0002.png b/assets/sprites/temperate_sprite/sh30-0002.png new file mode 100644 index 00000000..17395e66 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0003.png b/assets/sprites/temperate_sprite/sh30-0003.png new file mode 100644 index 00000000..0102c8a5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0004.png b/assets/sprites/temperate_sprite/sh30-0004.png new file mode 100644 index 00000000..6c181f6a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh30-0005.png b/assets/sprites/temperate_sprite/sh30-0005.png new file mode 100644 index 00000000..3230c1a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh30-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0000.png b/assets/sprites/temperate_sprite/sh31-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0001.png b/assets/sprites/temperate_sprite/sh31-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0002.png b/assets/sprites/temperate_sprite/sh31-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0003.png b/assets/sprites/temperate_sprite/sh31-0003.png new file mode 100644 index 00000000..82e2dcaa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0004.png b/assets/sprites/temperate_sprite/sh31-0004.png new file mode 100644 index 00000000..4bd1b3b7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0005.png b/assets/sprites/temperate_sprite/sh31-0005.png new file mode 100644 index 00000000..fc5325aa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0006.png b/assets/sprites/temperate_sprite/sh31-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0007.png b/assets/sprites/temperate_sprite/sh31-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0008.png b/assets/sprites/temperate_sprite/sh31-0008.png new file mode 100644 index 00000000..7e29cbf6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0009.png b/assets/sprites/temperate_sprite/sh31-0009.png new file mode 100644 index 00000000..4af7746b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0010.png b/assets/sprites/temperate_sprite/sh31-0010.png new file mode 100644 index 00000000..d55c9808 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0011.png b/assets/sprites/temperate_sprite/sh31-0011.png new file mode 100644 index 00000000..7c78c5da Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0012.png b/assets/sprites/temperate_sprite/sh31-0012.png new file mode 100644 index 00000000..db6916d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0013.png b/assets/sprites/temperate_sprite/sh31-0013.png new file mode 100644 index 00000000..4c70fd3c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0014.png b/assets/sprites/temperate_sprite/sh31-0014.png new file mode 100644 index 00000000..58726d0a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0015.png b/assets/sprites/temperate_sprite/sh31-0015.png new file mode 100644 index 00000000..9da8ff99 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0016.png b/assets/sprites/temperate_sprite/sh31-0016.png new file mode 100644 index 00000000..1cb92cdc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0017.png b/assets/sprites/temperate_sprite/sh31-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0018.png b/assets/sprites/temperate_sprite/sh31-0018.png new file mode 100644 index 00000000..a5ac5f1d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0019.png b/assets/sprites/temperate_sprite/sh31-0019.png new file mode 100644 index 00000000..a7d48951 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0020.png b/assets/sprites/temperate_sprite/sh31-0020.png new file mode 100644 index 00000000..c1095e86 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0021.png b/assets/sprites/temperate_sprite/sh31-0021.png new file mode 100644 index 00000000..86927253 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0022.png b/assets/sprites/temperate_sprite/sh31-0022.png new file mode 100644 index 00000000..ece52798 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0023.png b/assets/sprites/temperate_sprite/sh31-0023.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0024.png b/assets/sprites/temperate_sprite/sh31-0024.png new file mode 100644 index 00000000..9c898dc6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0025.png b/assets/sprites/temperate_sprite/sh31-0025.png new file mode 100644 index 00000000..166599a0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0025.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0026.png b/assets/sprites/temperate_sprite/sh31-0026.png new file mode 100644 index 00000000..83439004 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0026.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0027.png b/assets/sprites/temperate_sprite/sh31-0027.png new file mode 100644 index 00000000..663ba2bd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0027.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0028.png b/assets/sprites/temperate_sprite/sh31-0028.png new file mode 100644 index 00000000..8e1369d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0028.png differ diff --git a/assets/sprites/temperate_sprite/sh31-0029.png b/assets/sprites/temperate_sprite/sh31-0029.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh31-0029.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0000.png b/assets/sprites/temperate_sprite/sh32-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0001.png b/assets/sprites/temperate_sprite/sh32-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0002.png b/assets/sprites/temperate_sprite/sh32-0002.png new file mode 100644 index 00000000..17dec1d5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0003.png b/assets/sprites/temperate_sprite/sh32-0003.png new file mode 100644 index 00000000..0ac195f3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0004.png b/assets/sprites/temperate_sprite/sh32-0004.png new file mode 100644 index 00000000..ecda8d45 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0005.png b/assets/sprites/temperate_sprite/sh32-0005.png new file mode 100644 index 00000000..80791022 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0006.png b/assets/sprites/temperate_sprite/sh32-0006.png new file mode 100644 index 00000000..ed5307dc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0007.png b/assets/sprites/temperate_sprite/sh32-0007.png new file mode 100644 index 00000000..eb484eed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0008.png b/assets/sprites/temperate_sprite/sh32-0008.png new file mode 100644 index 00000000..aa201d5f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0009.png b/assets/sprites/temperate_sprite/sh32-0009.png new file mode 100644 index 00000000..881f40d3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0010.png b/assets/sprites/temperate_sprite/sh32-0010.png new file mode 100644 index 00000000..5bd866ed Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0011.png b/assets/sprites/temperate_sprite/sh32-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0012.png b/assets/sprites/temperate_sprite/sh32-0012.png new file mode 100644 index 00000000..8689ffc1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0013.png b/assets/sprites/temperate_sprite/sh32-0013.png new file mode 100644 index 00000000..6560221f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0014.png b/assets/sprites/temperate_sprite/sh32-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh32-0015.png b/assets/sprites/temperate_sprite/sh32-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh32-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0000.png b/assets/sprites/temperate_sprite/sh33-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0001.png b/assets/sprites/temperate_sprite/sh33-0001.png new file mode 100644 index 00000000..09ad1d36 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0002.png b/assets/sprites/temperate_sprite/sh33-0002.png new file mode 100644 index 00000000..7157f41d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0003.png b/assets/sprites/temperate_sprite/sh33-0003.png new file mode 100644 index 00000000..c242b365 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0004.png b/assets/sprites/temperate_sprite/sh33-0004.png new file mode 100644 index 00000000..c242f026 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0005.png b/assets/sprites/temperate_sprite/sh33-0005.png new file mode 100644 index 00000000..5f0e247e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0006.png b/assets/sprites/temperate_sprite/sh33-0006.png new file mode 100644 index 00000000..16fb8df2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0007.png b/assets/sprites/temperate_sprite/sh33-0007.png new file mode 100644 index 00000000..6494d326 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0008.png b/assets/sprites/temperate_sprite/sh33-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0009.png b/assets/sprites/temperate_sprite/sh33-0009.png new file mode 100644 index 00000000..3f5df584 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0010.png b/assets/sprites/temperate_sprite/sh33-0010.png new file mode 100644 index 00000000..5b5d99fd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh33-0011.png b/assets/sprites/temperate_sprite/sh33-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh33-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0000.png b/assets/sprites/temperate_sprite/sh34-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0001.png b/assets/sprites/temperate_sprite/sh34-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0002.png b/assets/sprites/temperate_sprite/sh34-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0003.png b/assets/sprites/temperate_sprite/sh34-0003.png new file mode 100644 index 00000000..a982c687 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0004.png b/assets/sprites/temperate_sprite/sh34-0004.png new file mode 100644 index 00000000..8ada1e3d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0005.png b/assets/sprites/temperate_sprite/sh34-0005.png new file mode 100644 index 00000000..846e1db6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0006.png b/assets/sprites/temperate_sprite/sh34-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0007.png b/assets/sprites/temperate_sprite/sh34-0007.png new file mode 100644 index 00000000..4f019599 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0008.png b/assets/sprites/temperate_sprite/sh34-0008.png new file mode 100644 index 00000000..55410890 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0009.png b/assets/sprites/temperate_sprite/sh34-0009.png new file mode 100644 index 00000000..271fa4a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0010.png b/assets/sprites/temperate_sprite/sh34-0010.png new file mode 100644 index 00000000..f826ac9a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0011.png b/assets/sprites/temperate_sprite/sh34-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0012.png b/assets/sprites/temperate_sprite/sh34-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0013.png b/assets/sprites/temperate_sprite/sh34-0013.png new file mode 100644 index 00000000..64459892 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0014.png b/assets/sprites/temperate_sprite/sh34-0014.png new file mode 100644 index 00000000..0302ede2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0015.png b/assets/sprites/temperate_sprite/sh34-0015.png new file mode 100644 index 00000000..76444edd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0016.png b/assets/sprites/temperate_sprite/sh34-0016.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0017.png b/assets/sprites/temperate_sprite/sh34-0017.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0018.png b/assets/sprites/temperate_sprite/sh34-0018.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0019.png b/assets/sprites/temperate_sprite/sh34-0019.png new file mode 100644 index 00000000..d54bdd54 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0020.png b/assets/sprites/temperate_sprite/sh34-0020.png new file mode 100644 index 00000000..6416061c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0021.png b/assets/sprites/temperate_sprite/sh34-0021.png new file mode 100644 index 00000000..0f75e127 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0022.png b/assets/sprites/temperate_sprite/sh34-0022.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0023.png b/assets/sprites/temperate_sprite/sh34-0023.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0024.png b/assets/sprites/temperate_sprite/sh34-0024.png new file mode 100644 index 00000000..2cc14766 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0025.png b/assets/sprites/temperate_sprite/sh34-0025.png new file mode 100644 index 00000000..118c7126 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0025.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0026.png b/assets/sprites/temperate_sprite/sh34-0026.png new file mode 100644 index 00000000..d1e037ef Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0026.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0027.png b/assets/sprites/temperate_sprite/sh34-0027.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0027.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0028.png b/assets/sprites/temperate_sprite/sh34-0028.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0028.png differ diff --git a/assets/sprites/temperate_sprite/sh34-0029.png b/assets/sprites/temperate_sprite/sh34-0029.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh34-0029.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0000.png b/assets/sprites/temperate_sprite/sh35-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0001.png b/assets/sprites/temperate_sprite/sh35-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0002.png b/assets/sprites/temperate_sprite/sh35-0002.png new file mode 100644 index 00000000..98d88190 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0003.png b/assets/sprites/temperate_sprite/sh35-0003.png new file mode 100644 index 00000000..7d6a4be5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0004.png b/assets/sprites/temperate_sprite/sh35-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0005.png b/assets/sprites/temperate_sprite/sh35-0005.png new file mode 100644 index 00000000..3338e606 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0006.png b/assets/sprites/temperate_sprite/sh35-0006.png new file mode 100644 index 00000000..627dbf99 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0007.png b/assets/sprites/temperate_sprite/sh35-0007.png new file mode 100644 index 00000000..0abc7ab9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0008.png b/assets/sprites/temperate_sprite/sh35-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0009.png b/assets/sprites/temperate_sprite/sh35-0009.png new file mode 100644 index 00000000..c2d5c670 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0010.png b/assets/sprites/temperate_sprite/sh35-0010.png new file mode 100644 index 00000000..e4d96def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0011.png b/assets/sprites/temperate_sprite/sh35-0011.png new file mode 100644 index 00000000..efa3e727 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0012.png b/assets/sprites/temperate_sprite/sh35-0012.png new file mode 100644 index 00000000..cad2789f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0013.png b/assets/sprites/temperate_sprite/sh35-0013.png new file mode 100644 index 00000000..352222d3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0014.png b/assets/sprites/temperate_sprite/sh35-0014.png new file mode 100644 index 00000000..858de899 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh35-0015.png b/assets/sprites/temperate_sprite/sh35-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh35-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0000.png b/assets/sprites/temperate_sprite/sh36-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0001.png b/assets/sprites/temperate_sprite/sh36-0001.png new file mode 100644 index 00000000..c5547386 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0002.png b/assets/sprites/temperate_sprite/sh36-0002.png new file mode 100644 index 00000000..749da4a5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0003.png b/assets/sprites/temperate_sprite/sh36-0003.png new file mode 100644 index 00000000..b5d3b824 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0004.png b/assets/sprites/temperate_sprite/sh36-0004.png new file mode 100644 index 00000000..16fd353b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0005.png b/assets/sprites/temperate_sprite/sh36-0005.png new file mode 100644 index 00000000..b889f9b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0006.png b/assets/sprites/temperate_sprite/sh36-0006.png new file mode 100644 index 00000000..4d82da8a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0007.png b/assets/sprites/temperate_sprite/sh36-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0008.png b/assets/sprites/temperate_sprite/sh36-0008.png new file mode 100644 index 00000000..160991ca Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0009.png b/assets/sprites/temperate_sprite/sh36-0009.png new file mode 100644 index 00000000..00372545 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0010.png b/assets/sprites/temperate_sprite/sh36-0010.png new file mode 100644 index 00000000..b7eeaae9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh36-0011.png b/assets/sprites/temperate_sprite/sh36-0011.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh36-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0000.png b/assets/sprites/temperate_sprite/sh37-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0001.png b/assets/sprites/temperate_sprite/sh37-0001.png new file mode 100644 index 00000000..098c14ea Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0002.png b/assets/sprites/temperate_sprite/sh37-0002.png new file mode 100644 index 00000000..f98db1f7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0003.png b/assets/sprites/temperate_sprite/sh37-0003.png new file mode 100644 index 00000000..0afb5462 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0004.png b/assets/sprites/temperate_sprite/sh37-0004.png new file mode 100644 index 00000000..eece19fa Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0005.png b/assets/sprites/temperate_sprite/sh37-0005.png new file mode 100644 index 00000000..2f22abc5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0006.png b/assets/sprites/temperate_sprite/sh37-0006.png new file mode 100644 index 00000000..f42a1fbf Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0007.png b/assets/sprites/temperate_sprite/sh37-0007.png new file mode 100644 index 00000000..1a9d58e2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh37-0008.png b/assets/sprites/temperate_sprite/sh37-0008.png new file mode 100644 index 00000000..8223b137 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh37-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh38-0000.png b/assets/sprites/temperate_sprite/sh38-0000.png new file mode 100644 index 00000000..8f3d7818 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh38-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh38-0001.png b/assets/sprites/temperate_sprite/sh38-0001.png new file mode 100644 index 00000000..794f0659 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh38-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0000.png b/assets/sprites/temperate_sprite/sh39-0000.png new file mode 100644 index 00000000..032545b3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0001.png b/assets/sprites/temperate_sprite/sh39-0001.png new file mode 100644 index 00000000..aaaee1f0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0002.png b/assets/sprites/temperate_sprite/sh39-0002.png new file mode 100644 index 00000000..3c3c8716 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0003.png b/assets/sprites/temperate_sprite/sh39-0003.png new file mode 100644 index 00000000..965df026 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0004.png b/assets/sprites/temperate_sprite/sh39-0004.png new file mode 100644 index 00000000..3060d62e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0005.png b/assets/sprites/temperate_sprite/sh39-0005.png new file mode 100644 index 00000000..41afe5cb Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0006.png b/assets/sprites/temperate_sprite/sh39-0006.png new file mode 100644 index 00000000..ad9fb8c8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0007.png b/assets/sprites/temperate_sprite/sh39-0007.png new file mode 100644 index 00000000..4fc6f67f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh39-0008.png b/assets/sprites/temperate_sprite/sh39-0008.png new file mode 100644 index 00000000..f37fb780 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh39-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0000.png b/assets/sprites/temperate_sprite/sh40-0000.png new file mode 100644 index 00000000..cd9a2a6e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0001.png b/assets/sprites/temperate_sprite/sh40-0001.png new file mode 100644 index 00000000..c756765e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0002.png b/assets/sprites/temperate_sprite/sh40-0002.png new file mode 100644 index 00000000..2076afb9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0003.png b/assets/sprites/temperate_sprite/sh40-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0004.png b/assets/sprites/temperate_sprite/sh40-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0005.png b/assets/sprites/temperate_sprite/sh40-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0006.png b/assets/sprites/temperate_sprite/sh40-0006.png new file mode 100644 index 00000000..516a1dd8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0007.png b/assets/sprites/temperate_sprite/sh40-0007.png new file mode 100644 index 00000000..31d6b255 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0008.png b/assets/sprites/temperate_sprite/sh40-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0009.png b/assets/sprites/temperate_sprite/sh40-0009.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0010.png b/assets/sprites/temperate_sprite/sh40-0010.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0011.png b/assets/sprites/temperate_sprite/sh40-0011.png new file mode 100644 index 00000000..e54722c7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0012.png b/assets/sprites/temperate_sprite/sh40-0012.png new file mode 100644 index 00000000..c9bc6043 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0013.png b/assets/sprites/temperate_sprite/sh40-0013.png new file mode 100644 index 00000000..7fa4a598 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0014.png b/assets/sprites/temperate_sprite/sh40-0014.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0015.png b/assets/sprites/temperate_sprite/sh40-0015.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0016.png b/assets/sprites/temperate_sprite/sh40-0016.png new file mode 100644 index 00000000..df2f981b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0016.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0017.png b/assets/sprites/temperate_sprite/sh40-0017.png new file mode 100644 index 00000000..5aa9eb2e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0017.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0018.png b/assets/sprites/temperate_sprite/sh40-0018.png new file mode 100644 index 00000000..ffc2e95d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0018.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0019.png b/assets/sprites/temperate_sprite/sh40-0019.png new file mode 100644 index 00000000..0233944e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0019.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0020.png b/assets/sprites/temperate_sprite/sh40-0020.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0020.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0021.png b/assets/sprites/temperate_sprite/sh40-0021.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0021.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0022.png b/assets/sprites/temperate_sprite/sh40-0022.png new file mode 100644 index 00000000..d255a621 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0022.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0023.png b/assets/sprites/temperate_sprite/sh40-0023.png new file mode 100644 index 00000000..c76b3652 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0023.png differ diff --git a/assets/sprites/temperate_sprite/sh40-0024.png b/assets/sprites/temperate_sprite/sh40-0024.png new file mode 100644 index 00000000..0f0bf7f2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh40-0024.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0000.png b/assets/sprites/temperate_sprite/sh41-0000.png new file mode 100644 index 00000000..324636ca Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0001.png b/assets/sprites/temperate_sprite/sh41-0001.png new file mode 100644 index 00000000..90798e6a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0002.png b/assets/sprites/temperate_sprite/sh41-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0003.png b/assets/sprites/temperate_sprite/sh41-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0004.png b/assets/sprites/temperate_sprite/sh41-0004.png new file mode 100644 index 00000000..f2495cb1 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0005.png b/assets/sprites/temperate_sprite/sh41-0005.png new file mode 100644 index 00000000..4901be4b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0006.png b/assets/sprites/temperate_sprite/sh41-0006.png new file mode 100644 index 00000000..8e2c717d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0007.png b/assets/sprites/temperate_sprite/sh41-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0008.png b/assets/sprites/temperate_sprite/sh41-0008.png new file mode 100644 index 00000000..335412c2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0009.png b/assets/sprites/temperate_sprite/sh41-0009.png new file mode 100644 index 00000000..700801d3 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0010.png b/assets/sprites/temperate_sprite/sh41-0010.png new file mode 100644 index 00000000..b9157f2d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0011.png b/assets/sprites/temperate_sprite/sh41-0011.png new file mode 100644 index 00000000..692b3479 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0012.png b/assets/sprites/temperate_sprite/sh41-0012.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0012.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0013.png b/assets/sprites/temperate_sprite/sh41-0013.png new file mode 100644 index 00000000..9d885b02 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0013.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0014.png b/assets/sprites/temperate_sprite/sh41-0014.png new file mode 100644 index 00000000..6459d52f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0014.png differ diff --git a/assets/sprites/temperate_sprite/sh41-0015.png b/assets/sprites/temperate_sprite/sh41-0015.png new file mode 100644 index 00000000..dc180719 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh41-0015.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0000.png b/assets/sprites/temperate_sprite/sh42-0000.png new file mode 100644 index 00000000..2ff53e6b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0001.png b/assets/sprites/temperate_sprite/sh42-0001.png new file mode 100644 index 00000000..500182d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0002.png b/assets/sprites/temperate_sprite/sh42-0002.png new file mode 100644 index 00000000..78b915b4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0003.png b/assets/sprites/temperate_sprite/sh42-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0004.png b/assets/sprites/temperate_sprite/sh42-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0005.png b/assets/sprites/temperate_sprite/sh42-0005.png new file mode 100644 index 00000000..97b34139 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0006.png b/assets/sprites/temperate_sprite/sh42-0006.png new file mode 100644 index 00000000..b38507d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0007.png b/assets/sprites/temperate_sprite/sh42-0007.png new file mode 100644 index 00000000..b8391eb0 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0008.png b/assets/sprites/temperate_sprite/sh42-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0009.png b/assets/sprites/temperate_sprite/sh42-0009.png new file mode 100644 index 00000000..26b33fc7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0009.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0010.png b/assets/sprites/temperate_sprite/sh42-0010.png new file mode 100644 index 00000000..9c65a7fe Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0010.png differ diff --git a/assets/sprites/temperate_sprite/sh42-0011.png b/assets/sprites/temperate_sprite/sh42-0011.png new file mode 100644 index 00000000..2d4465e6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh42-0011.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0000.png b/assets/sprites/temperate_sprite/sh43-0000.png new file mode 100644 index 00000000..5ab1e273 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0001.png b/assets/sprites/temperate_sprite/sh43-0001.png new file mode 100644 index 00000000..9fdb2f6c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0002.png b/assets/sprites/temperate_sprite/sh43-0002.png new file mode 100644 index 00000000..c4228e78 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0003.png b/assets/sprites/temperate_sprite/sh43-0003.png new file mode 100644 index 00000000..114dac39 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0004.png b/assets/sprites/temperate_sprite/sh43-0004.png new file mode 100644 index 00000000..bda2683d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0005.png b/assets/sprites/temperate_sprite/sh43-0005.png new file mode 100644 index 00000000..f6385787 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0006.png b/assets/sprites/temperate_sprite/sh43-0006.png new file mode 100644 index 00000000..f3992fee Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0007.png b/assets/sprites/temperate_sprite/sh43-0007.png new file mode 100644 index 00000000..691fcff4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh43-0008.png b/assets/sprites/temperate_sprite/sh43-0008.png new file mode 100644 index 00000000..ff75117f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh43-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh44-0000.png b/assets/sprites/temperate_sprite/sh44-0000.png new file mode 100644 index 00000000..f13de30c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh44-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh44-0001.png b/assets/sprites/temperate_sprite/sh44-0001.png new file mode 100644 index 00000000..cda11479 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh44-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh44-0002.png b/assets/sprites/temperate_sprite/sh44-0002.png new file mode 100644 index 00000000..3868d4b6 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh44-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh44-0003.png b/assets/sprites/temperate_sprite/sh44-0003.png new file mode 100644 index 00000000..cb19215d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh44-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0000.png b/assets/sprites/temperate_sprite/sh45-0000.png new file mode 100644 index 00000000..ef519d95 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0001.png b/assets/sprites/temperate_sprite/sh45-0001.png new file mode 100644 index 00000000..a6b6f911 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0002.png b/assets/sprites/temperate_sprite/sh45-0002.png new file mode 100644 index 00000000..93cef640 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0003.png b/assets/sprites/temperate_sprite/sh45-0003.png new file mode 100644 index 00000000..06ebc60f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0004.png b/assets/sprites/temperate_sprite/sh45-0004.png new file mode 100644 index 00000000..dce39a72 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0005.png b/assets/sprites/temperate_sprite/sh45-0005.png new file mode 100644 index 00000000..3955ad20 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0006.png b/assets/sprites/temperate_sprite/sh45-0006.png new file mode 100644 index 00000000..905a1d04 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0007.png b/assets/sprites/temperate_sprite/sh45-0007.png new file mode 100644 index 00000000..24129eee Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh45-0008.png b/assets/sprites/temperate_sprite/sh45-0008.png new file mode 100644 index 00000000..b1642b45 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh45-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh46-0000.png b/assets/sprites/temperate_sprite/sh46-0000.png new file mode 100644 index 00000000..ae1a132f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh46-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh46-0001.png b/assets/sprites/temperate_sprite/sh46-0001.png new file mode 100644 index 00000000..23587bcb Binary files /dev/null and b/assets/sprites/temperate_sprite/sh46-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh46-0002.png b/assets/sprites/temperate_sprite/sh46-0002.png new file mode 100644 index 00000000..e8958cb9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh46-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh46-0003.png b/assets/sprites/temperate_sprite/sh46-0003.png new file mode 100644 index 00000000..f780921d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh46-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0000.png b/assets/sprites/temperate_sprite/sh47-0000.png new file mode 100644 index 00000000..ba0cd0dd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0001.png b/assets/sprites/temperate_sprite/sh47-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0002.png b/assets/sprites/temperate_sprite/sh47-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0003.png b/assets/sprites/temperate_sprite/sh47-0003.png new file mode 100644 index 00000000..ac074e3e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0004.png b/assets/sprites/temperate_sprite/sh47-0004.png new file mode 100644 index 00000000..a3f7cb74 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0005.png b/assets/sprites/temperate_sprite/sh47-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0006.png b/assets/sprites/temperate_sprite/sh47-0006.png new file mode 100644 index 00000000..dcb2efd7 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0007.png b/assets/sprites/temperate_sprite/sh47-0007.png new file mode 100644 index 00000000..62c74bc2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh47-0008.png b/assets/sprites/temperate_sprite/sh47-0008.png new file mode 100644 index 00000000..191ad78b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh47-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh48-0000.png b/assets/sprites/temperate_sprite/sh48-0000.png new file mode 100644 index 00000000..b531ac00 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh48-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh48-0001.png b/assets/sprites/temperate_sprite/sh48-0001.png new file mode 100644 index 00000000..ea6daf16 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh48-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh48-0002.png b/assets/sprites/temperate_sprite/sh48-0002.png new file mode 100644 index 00000000..917fa840 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh48-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh48-0003.png b/assets/sprites/temperate_sprite/sh48-0003.png new file mode 100644 index 00000000..a512b574 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh48-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0000.png b/assets/sprites/temperate_sprite/sh49-0000.png new file mode 100644 index 00000000..0a1e34b8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0001.png b/assets/sprites/temperate_sprite/sh49-0001.png new file mode 100644 index 00000000..8ed0c9d2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0002.png b/assets/sprites/temperate_sprite/sh49-0002.png new file mode 100644 index 00000000..4a60c107 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0003.png b/assets/sprites/temperate_sprite/sh49-0003.png new file mode 100644 index 00000000..e1972c62 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0004.png b/assets/sprites/temperate_sprite/sh49-0004.png new file mode 100644 index 00000000..7def447d Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0005.png b/assets/sprites/temperate_sprite/sh49-0005.png new file mode 100644 index 00000000..e425c43e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0006.png b/assets/sprites/temperate_sprite/sh49-0006.png new file mode 100644 index 00000000..b11eeef8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0007.png b/assets/sprites/temperate_sprite/sh49-0007.png new file mode 100644 index 00000000..b5c9f3b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh49-0008.png b/assets/sprites/temperate_sprite/sh49-0008.png new file mode 100644 index 00000000..866aa797 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh49-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh50-0000.png b/assets/sprites/temperate_sprite/sh50-0000.png new file mode 100644 index 00000000..12283851 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh50-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh50-0001.png b/assets/sprites/temperate_sprite/sh50-0001.png new file mode 100644 index 00000000..8c6cb678 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh50-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh50-0002.png b/assets/sprites/temperate_sprite/sh50-0002.png new file mode 100644 index 00000000..70b7cc02 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh50-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh50-0003.png b/assets/sprites/temperate_sprite/sh50-0003.png new file mode 100644 index 00000000..9ad9334e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh50-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0000.png b/assets/sprites/temperate_sprite/sh51-0000.png new file mode 100644 index 00000000..eed1baf4 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0001.png b/assets/sprites/temperate_sprite/sh51-0001.png new file mode 100644 index 00000000..44d94439 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0002.png b/assets/sprites/temperate_sprite/sh51-0002.png new file mode 100644 index 00000000..91ce1548 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0003.png b/assets/sprites/temperate_sprite/sh51-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0004.png b/assets/sprites/temperate_sprite/sh51-0004.png new file mode 100644 index 00000000..512f7cc5 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0005.png b/assets/sprites/temperate_sprite/sh51-0005.png new file mode 100644 index 00000000..6354310c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0006.png b/assets/sprites/temperate_sprite/sh51-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0007.png b/assets/sprites/temperate_sprite/sh51-0007.png new file mode 100644 index 00000000..9ace5b1f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh51-0008.png b/assets/sprites/temperate_sprite/sh51-0008.png new file mode 100644 index 00000000..1fb6d0e9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh51-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0000.png b/assets/sprites/temperate_sprite/sh52-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0001.png b/assets/sprites/temperate_sprite/sh52-0001.png new file mode 100644 index 00000000..9532b2da Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0002.png b/assets/sprites/temperate_sprite/sh52-0002.png new file mode 100644 index 00000000..e1383456 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0003.png b/assets/sprites/temperate_sprite/sh52-0003.png new file mode 100644 index 00000000..3f6c700e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0004.png b/assets/sprites/temperate_sprite/sh52-0004.png new file mode 100644 index 00000000..d0a98b79 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0005.png b/assets/sprites/temperate_sprite/sh52-0005.png new file mode 100644 index 00000000..982c28fe Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0006.png b/assets/sprites/temperate_sprite/sh52-0006.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0007.png b/assets/sprites/temperate_sprite/sh52-0007.png new file mode 100644 index 00000000..58cb857e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh52-0008.png b/assets/sprites/temperate_sprite/sh52-0008.png new file mode 100644 index 00000000..56309e7a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh52-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0000.png b/assets/sprites/temperate_sprite/sh53-0000.png new file mode 100644 index 00000000..a53888fe Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0001.png b/assets/sprites/temperate_sprite/sh53-0001.png new file mode 100644 index 00000000..66bdcd1c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0002.png b/assets/sprites/temperate_sprite/sh53-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0003.png b/assets/sprites/temperate_sprite/sh53-0003.png new file mode 100644 index 00000000..e753b153 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0004.png b/assets/sprites/temperate_sprite/sh53-0004.png new file mode 100644 index 00000000..0531fc35 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0005.png b/assets/sprites/temperate_sprite/sh53-0005.png new file mode 100644 index 00000000..ff6acfdc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0006.png b/assets/sprites/temperate_sprite/sh53-0006.png new file mode 100644 index 00000000..3467b653 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0007.png b/assets/sprites/temperate_sprite/sh53-0007.png new file mode 100644 index 00000000..42619653 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh53-0008.png b/assets/sprites/temperate_sprite/sh53-0008.png new file mode 100644 index 00000000..5494c273 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh53-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0000.png b/assets/sprites/temperate_sprite/sh54-0000.png new file mode 100644 index 00000000..b541c245 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0001.png b/assets/sprites/temperate_sprite/sh54-0001.png new file mode 100644 index 00000000..ac1023a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0002.png b/assets/sprites/temperate_sprite/sh54-0002.png new file mode 100644 index 00000000..e670d60e Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0003.png b/assets/sprites/temperate_sprite/sh54-0003.png new file mode 100644 index 00000000..71685ee8 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0004.png b/assets/sprites/temperate_sprite/sh54-0004.png new file mode 100644 index 00000000..72787c51 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0004.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0005.png b/assets/sprites/temperate_sprite/sh54-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0005.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0006.png b/assets/sprites/temperate_sprite/sh54-0006.png new file mode 100644 index 00000000..6d408954 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0006.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0007.png b/assets/sprites/temperate_sprite/sh54-0007.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0007.png differ diff --git a/assets/sprites/temperate_sprite/sh54-0008.png b/assets/sprites/temperate_sprite/sh54-0008.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/sh54-0008.png differ diff --git a/assets/sprites/temperate_sprite/sh55-0000.png b/assets/sprites/temperate_sprite/sh55-0000.png new file mode 100644 index 00000000..a4861e72 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh55-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh56-0000.png b/assets/sprites/temperate_sprite/sh56-0000.png new file mode 100644 index 00000000..4fc02544 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh56-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh56-0001.png b/assets/sprites/temperate_sprite/sh56-0001.png new file mode 100644 index 00000000..475331dc Binary files /dev/null and b/assets/sprites/temperate_sprite/sh56-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh57-0000.png b/assets/sprites/temperate_sprite/sh57-0000.png new file mode 100644 index 00000000..59d9690b Binary files /dev/null and b/assets/sprites/temperate_sprite/sh57-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh58-0000.png b/assets/sprites/temperate_sprite/sh58-0000.png new file mode 100644 index 00000000..aead2d80 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh58-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh58-0001.png b/assets/sprites/temperate_sprite/sh58-0001.png new file mode 100644 index 00000000..9ed85ebd Binary files /dev/null and b/assets/sprites/temperate_sprite/sh58-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh59-0000.png b/assets/sprites/temperate_sprite/sh59-0000.png new file mode 100644 index 00000000..e14f3fa2 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh59-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh59-0001.png b/assets/sprites/temperate_sprite/sh59-0001.png new file mode 100644 index 00000000..d71748d9 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh59-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh60-0000.png b/assets/sprites/temperate_sprite/sh60-0000.png new file mode 100644 index 00000000..3ef3937f Binary files /dev/null and b/assets/sprites/temperate_sprite/sh60-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh60-0001.png b/assets/sprites/temperate_sprite/sh60-0001.png new file mode 100644 index 00000000..fbe2af96 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh60-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh61-0000.png b/assets/sprites/temperate_sprite/sh61-0000.png new file mode 100644 index 00000000..f6527a34 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh61-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh62-0000.png b/assets/sprites/temperate_sprite/sh62-0000.png new file mode 100644 index 00000000..d5c3e592 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh62-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh63-0000.png b/assets/sprites/temperate_sprite/sh63-0000.png new file mode 100644 index 00000000..e06cfc5a Binary files /dev/null and b/assets/sprites/temperate_sprite/sh63-0000.png differ diff --git a/assets/sprites/temperate_sprite/sh63-0001.png b/assets/sprites/temperate_sprite/sh63-0001.png new file mode 100644 index 00000000..e8c9be75 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh63-0001.png differ diff --git a/assets/sprites/temperate_sprite/sh63-0002.png b/assets/sprites/temperate_sprite/sh63-0002.png new file mode 100644 index 00000000..45459e2c Binary files /dev/null and b/assets/sprites/temperate_sprite/sh63-0002.png differ diff --git a/assets/sprites/temperate_sprite/sh63-0003.png b/assets/sprites/temperate_sprite/sh63-0003.png new file mode 100644 index 00000000..4499eb22 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh63-0003.png differ diff --git a/assets/sprites/temperate_sprite/sh64-0000.png b/assets/sprites/temperate_sprite/sh64-0000.png new file mode 100644 index 00000000..3132aa17 Binary files /dev/null and b/assets/sprites/temperate_sprite/sh64-0000.png differ diff --git a/assets/sprites/temperate_sprite/w1-0000.png b/assets/sprites/temperate_sprite/w1-0000.png new file mode 100644 index 00000000..90cd2f2f Binary files /dev/null and b/assets/sprites/temperate_sprite/w1-0000.png differ diff --git a/assets/sprites/temperate_sprite/w2-0000.png b/assets/sprites/temperate_sprite/w2-0000.png new file mode 100644 index 00000000..e55cdc37 Binary files /dev/null and b/assets/sprites/temperate_sprite/w2-0000.png differ diff --git a/assets/sprites/temperate_sprite/w2-0001.png b/assets/sprites/temperate_sprite/w2-0001.png new file mode 100644 index 00000000..65cab5a0 Binary files /dev/null and b/assets/sprites/temperate_sprite/w2-0001.png differ diff --git a/assets/sprites/temperate_sprite/w2-0002.png b/assets/sprites/temperate_sprite/w2-0002.png new file mode 100644 index 00000000..dd995b87 Binary files /dev/null and b/assets/sprites/temperate_sprite/w2-0002.png differ diff --git a/assets/sprites/temperate_sprite/w2-0003.png b/assets/sprites/temperate_sprite/w2-0003.png new file mode 100644 index 00000000..31430172 Binary files /dev/null and b/assets/sprites/temperate_sprite/w2-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc01-0000.png b/assets/sprites/temperate_sprite/wc01-0000.png new file mode 100644 index 00000000..f49ef6e9 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc01-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc01-0001.png b/assets/sprites/temperate_sprite/wc01-0001.png new file mode 100644 index 00000000..7217e886 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc01-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc01-0002.png b/assets/sprites/temperate_sprite/wc01-0002.png new file mode 100644 index 00000000..17be2721 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc01-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc01-0003.png b/assets/sprites/temperate_sprite/wc01-0003.png new file mode 100644 index 00000000..dce0f876 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc01-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0000.png b/assets/sprites/temperate_sprite/wc02-0000.png new file mode 100644 index 00000000..7c1b5a72 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0001.png b/assets/sprites/temperate_sprite/wc02-0001.png new file mode 100644 index 00000000..9c781cba Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0002.png b/assets/sprites/temperate_sprite/wc02-0002.png new file mode 100644 index 00000000..8390f354 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0003.png b/assets/sprites/temperate_sprite/wc02-0003.png new file mode 100644 index 00000000..5cac7de6 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0004.png b/assets/sprites/temperate_sprite/wc02-0004.png new file mode 100644 index 00000000..9bbacef8 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc02-0005.png b/assets/sprites/temperate_sprite/wc02-0005.png new file mode 100644 index 00000000..a734557d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc02-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc03-0000.png b/assets/sprites/temperate_sprite/wc03-0000.png new file mode 100644 index 00000000..b11d4186 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc03-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc03-0001.png b/assets/sprites/temperate_sprite/wc03-0001.png new file mode 100644 index 00000000..9fadb2d1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc03-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc03-0002.png b/assets/sprites/temperate_sprite/wc03-0002.png new file mode 100644 index 00000000..3b7cabff Binary files /dev/null and b/assets/sprites/temperate_sprite/wc03-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc03-0003.png b/assets/sprites/temperate_sprite/wc03-0003.png new file mode 100644 index 00000000..5bb70afb Binary files /dev/null and b/assets/sprites/temperate_sprite/wc03-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc04-0000.png b/assets/sprites/temperate_sprite/wc04-0000.png new file mode 100644 index 00000000..cdce3f94 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc04-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc04-0001.png b/assets/sprites/temperate_sprite/wc04-0001.png new file mode 100644 index 00000000..48d91dec Binary files /dev/null and b/assets/sprites/temperate_sprite/wc04-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc04-0002.png b/assets/sprites/temperate_sprite/wc04-0002.png new file mode 100644 index 00000000..d7f5e371 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc04-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc04-0003.png b/assets/sprites/temperate_sprite/wc04-0003.png new file mode 100644 index 00000000..b2007374 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc04-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc05-0000.png b/assets/sprites/temperate_sprite/wc05-0000.png new file mode 100644 index 00000000..aa1fe1fc Binary files /dev/null and b/assets/sprites/temperate_sprite/wc05-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc05-0001.png b/assets/sprites/temperate_sprite/wc05-0001.png new file mode 100644 index 00000000..21e565e7 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc05-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc05-0002.png b/assets/sprites/temperate_sprite/wc05-0002.png new file mode 100644 index 00000000..57f81864 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc05-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc05-0003.png b/assets/sprites/temperate_sprite/wc05-0003.png new file mode 100644 index 00000000..0429552a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc05-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0000.png b/assets/sprites/temperate_sprite/wc06-0000.png new file mode 100644 index 00000000..614a0253 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0001.png b/assets/sprites/temperate_sprite/wc06-0001.png new file mode 100644 index 00000000..d35302bc Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0002.png b/assets/sprites/temperate_sprite/wc06-0002.png new file mode 100644 index 00000000..78170589 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0003.png b/assets/sprites/temperate_sprite/wc06-0003.png new file mode 100644 index 00000000..3d17bf6f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0004.png b/assets/sprites/temperate_sprite/wc06-0004.png new file mode 100644 index 00000000..5c1c763c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc06-0005.png b/assets/sprites/temperate_sprite/wc06-0005.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc06-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc07-0000.png b/assets/sprites/temperate_sprite/wc07-0000.png new file mode 100644 index 00000000..2d91d703 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc07-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc07-0001.png b/assets/sprites/temperate_sprite/wc07-0001.png new file mode 100644 index 00000000..d500cef0 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc07-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc07-0002.png b/assets/sprites/temperate_sprite/wc07-0002.png new file mode 100644 index 00000000..2c774a8f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc07-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc07-0003.png b/assets/sprites/temperate_sprite/wc07-0003.png new file mode 100644 index 00000000..fd98ff22 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc07-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc08-0000.png b/assets/sprites/temperate_sprite/wc08-0000.png new file mode 100644 index 00000000..b2cbb6e1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc08-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc08-0001.png b/assets/sprites/temperate_sprite/wc08-0001.png new file mode 100644 index 00000000..08cb1517 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc08-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc08-0002.png b/assets/sprites/temperate_sprite/wc08-0002.png new file mode 100644 index 00000000..fad47aba Binary files /dev/null and b/assets/sprites/temperate_sprite/wc08-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc08-0003.png b/assets/sprites/temperate_sprite/wc08-0003.png new file mode 100644 index 00000000..21be93cc Binary files /dev/null and b/assets/sprites/temperate_sprite/wc08-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0000.png b/assets/sprites/temperate_sprite/wc09-0000.png new file mode 100644 index 00000000..1d3db1d6 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0001.png b/assets/sprites/temperate_sprite/wc09-0001.png new file mode 100644 index 00000000..c468df69 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0002.png b/assets/sprites/temperate_sprite/wc09-0002.png new file mode 100644 index 00000000..de45cade Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0003.png b/assets/sprites/temperate_sprite/wc09-0003.png new file mode 100644 index 00000000..439e3dae Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0004.png b/assets/sprites/temperate_sprite/wc09-0004.png new file mode 100644 index 00000000..5ffb6cb8 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc09-0005.png b/assets/sprites/temperate_sprite/wc09-0005.png new file mode 100644 index 00000000..b4db2e5f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc09-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc10-0000.png b/assets/sprites/temperate_sprite/wc10-0000.png new file mode 100644 index 00000000..12d7ddac Binary files /dev/null and b/assets/sprites/temperate_sprite/wc10-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc10-0001.png b/assets/sprites/temperate_sprite/wc10-0001.png new file mode 100644 index 00000000..b73cc9b9 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc10-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc10-0002.png b/assets/sprites/temperate_sprite/wc10-0002.png new file mode 100644 index 00000000..17ceb4ed Binary files /dev/null and b/assets/sprites/temperate_sprite/wc10-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc10-0003.png b/assets/sprites/temperate_sprite/wc10-0003.png new file mode 100644 index 00000000..0ed73f3f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc10-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc11-0000.png b/assets/sprites/temperate_sprite/wc11-0000.png new file mode 100644 index 00000000..7d5fd79f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc11-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc11-0001.png b/assets/sprites/temperate_sprite/wc11-0001.png new file mode 100644 index 00000000..677ecef7 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc11-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc11-0002.png b/assets/sprites/temperate_sprite/wc11-0002.png new file mode 100644 index 00000000..52ae1330 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc11-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc11-0003.png b/assets/sprites/temperate_sprite/wc11-0003.png new file mode 100644 index 00000000..4633848a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc11-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc12-0000.png b/assets/sprites/temperate_sprite/wc12-0000.png new file mode 100644 index 00000000..9f454bb3 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc12-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc12-0001.png b/assets/sprites/temperate_sprite/wc12-0001.png new file mode 100644 index 00000000..528e5124 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc12-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc12-0002.png b/assets/sprites/temperate_sprite/wc12-0002.png new file mode 100644 index 00000000..a48a248d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc12-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc12-0003.png b/assets/sprites/temperate_sprite/wc12-0003.png new file mode 100644 index 00000000..918b37fc Binary files /dev/null and b/assets/sprites/temperate_sprite/wc12-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0000.png b/assets/sprites/temperate_sprite/wc13-0000.png new file mode 100644 index 00000000..a6a99649 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0001.png b/assets/sprites/temperate_sprite/wc13-0001.png new file mode 100644 index 00000000..8fca2609 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0002.png b/assets/sprites/temperate_sprite/wc13-0002.png new file mode 100644 index 00000000..987e67bf Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0003.png b/assets/sprites/temperate_sprite/wc13-0003.png new file mode 100644 index 00000000..475186f5 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0004.png b/assets/sprites/temperate_sprite/wc13-0004.png new file mode 100644 index 00000000..fa0a764c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc13-0005.png b/assets/sprites/temperate_sprite/wc13-0005.png new file mode 100644 index 00000000..1edd566d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc13-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc14-0000.png b/assets/sprites/temperate_sprite/wc14-0000.png new file mode 100644 index 00000000..ab792726 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc14-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc14-0001.png b/assets/sprites/temperate_sprite/wc14-0001.png new file mode 100644 index 00000000..feff3c0b Binary files /dev/null and b/assets/sprites/temperate_sprite/wc14-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc14-0002.png b/assets/sprites/temperate_sprite/wc14-0002.png new file mode 100644 index 00000000..691aa5fd Binary files /dev/null and b/assets/sprites/temperate_sprite/wc14-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc14-0003.png b/assets/sprites/temperate_sprite/wc14-0003.png new file mode 100644 index 00000000..fea19018 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc14-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc15-0000.png b/assets/sprites/temperate_sprite/wc15-0000.png new file mode 100644 index 00000000..f271797e Binary files /dev/null and b/assets/sprites/temperate_sprite/wc15-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc15-0001.png b/assets/sprites/temperate_sprite/wc15-0001.png new file mode 100644 index 00000000..f9fad262 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc15-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc15-0002.png b/assets/sprites/temperate_sprite/wc15-0002.png new file mode 100644 index 00000000..c4f5dfae Binary files /dev/null and b/assets/sprites/temperate_sprite/wc15-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc15-0003.png b/assets/sprites/temperate_sprite/wc15-0003.png new file mode 100644 index 00000000..8518e3dd Binary files /dev/null and b/assets/sprites/temperate_sprite/wc15-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0000.png b/assets/sprites/temperate_sprite/wc16-0000.png new file mode 100644 index 00000000..e4dcce33 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0001.png b/assets/sprites/temperate_sprite/wc16-0001.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0002.png b/assets/sprites/temperate_sprite/wc16-0002.png new file mode 100644 index 00000000..9db03f64 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0003.png b/assets/sprites/temperate_sprite/wc16-0003.png new file mode 100644 index 00000000..055684ce Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0004.png b/assets/sprites/temperate_sprite/wc16-0004.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc16-0005.png b/assets/sprites/temperate_sprite/wc16-0005.png new file mode 100644 index 00000000..b133b1dd Binary files /dev/null and b/assets/sprites/temperate_sprite/wc16-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc17-0000.png b/assets/sprites/temperate_sprite/wc17-0000.png new file mode 100644 index 00000000..470bcc2a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc17-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc17-0001.png b/assets/sprites/temperate_sprite/wc17-0001.png new file mode 100644 index 00000000..2063a975 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc17-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc17-0002.png b/assets/sprites/temperate_sprite/wc17-0002.png new file mode 100644 index 00000000..13560800 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc17-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc17-0003.png b/assets/sprites/temperate_sprite/wc17-0003.png new file mode 100644 index 00000000..b7bf1954 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc17-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc18-0000.png b/assets/sprites/temperate_sprite/wc18-0000.png new file mode 100644 index 00000000..c4259139 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc18-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc18-0001.png b/assets/sprites/temperate_sprite/wc18-0001.png new file mode 100644 index 00000000..845e7c5a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc18-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc18-0002.png b/assets/sprites/temperate_sprite/wc18-0002.png new file mode 100644 index 00000000..4552a0a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc18-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc18-0003.png b/assets/sprites/temperate_sprite/wc18-0003.png new file mode 100644 index 00000000..ca4fe2a6 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc18-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc19-0000.png b/assets/sprites/temperate_sprite/wc19-0000.png new file mode 100644 index 00000000..2b05416a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc19-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc19-0001.png b/assets/sprites/temperate_sprite/wc19-0001.png new file mode 100644 index 00000000..11425343 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc19-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc19-0002.png b/assets/sprites/temperate_sprite/wc19-0002.png new file mode 100644 index 00000000..8206e906 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc19-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc19-0003.png b/assets/sprites/temperate_sprite/wc19-0003.png new file mode 100644 index 00000000..153dae40 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc19-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0000.png b/assets/sprites/temperate_sprite/wc20-0000.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0001.png b/assets/sprites/temperate_sprite/wc20-0001.png new file mode 100644 index 00000000..32e54392 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0002.png b/assets/sprites/temperate_sprite/wc20-0002.png new file mode 100644 index 00000000..99ed6cb5 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0003.png b/assets/sprites/temperate_sprite/wc20-0003.png new file mode 100644 index 00000000..6a591b13 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0004.png b/assets/sprites/temperate_sprite/wc20-0004.png new file mode 100644 index 00000000..143da00b Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc20-0005.png b/assets/sprites/temperate_sprite/wc20-0005.png new file mode 100644 index 00000000..66ca5d32 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc20-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc21-0000.png b/assets/sprites/temperate_sprite/wc21-0000.png new file mode 100644 index 00000000..de9b3ef3 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc21-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc21-0001.png b/assets/sprites/temperate_sprite/wc21-0001.png new file mode 100644 index 00000000..d8a05f25 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc21-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc22-0000.png b/assets/sprites/temperate_sprite/wc22-0000.png new file mode 100644 index 00000000..b02246ca Binary files /dev/null and b/assets/sprites/temperate_sprite/wc22-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc22-0001.png b/assets/sprites/temperate_sprite/wc22-0001.png new file mode 100644 index 00000000..a92c9e31 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc22-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc22-0002.png b/assets/sprites/temperate_sprite/wc22-0002.png new file mode 100644 index 00000000..87caa644 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc22-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc22-0003.png b/assets/sprites/temperate_sprite/wc22-0003.png new file mode 100644 index 00000000..bf781089 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc22-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0000.png b/assets/sprites/temperate_sprite/wc23-0000.png new file mode 100644 index 00000000..ecaf4a94 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0001.png b/assets/sprites/temperate_sprite/wc23-0001.png new file mode 100644 index 00000000..b63e90a8 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0002.png b/assets/sprites/temperate_sprite/wc23-0002.png new file mode 100644 index 00000000..48afb1b2 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0003.png b/assets/sprites/temperate_sprite/wc23-0003.png new file mode 100644 index 00000000..d0533592 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0004.png b/assets/sprites/temperate_sprite/wc23-0004.png new file mode 100644 index 00000000..edddf925 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc23-0005.png b/assets/sprites/temperate_sprite/wc23-0005.png new file mode 100644 index 00000000..021bb647 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc23-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc24-0000.png b/assets/sprites/temperate_sprite/wc24-0000.png new file mode 100644 index 00000000..703814e0 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc24-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc24-0001.png b/assets/sprites/temperate_sprite/wc24-0001.png new file mode 100644 index 00000000..7a114d5b Binary files /dev/null and b/assets/sprites/temperate_sprite/wc24-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc24-0002.png b/assets/sprites/temperate_sprite/wc24-0002.png new file mode 100644 index 00000000..64f1ca52 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc24-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc24-0003.png b/assets/sprites/temperate_sprite/wc24-0003.png new file mode 100644 index 00000000..616bb3a1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc24-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc25-0000.png b/assets/sprites/temperate_sprite/wc25-0000.png new file mode 100644 index 00000000..209d959c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc25-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc25-0001.png b/assets/sprites/temperate_sprite/wc25-0001.png new file mode 100644 index 00000000..2a114290 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc25-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc25-0002.png b/assets/sprites/temperate_sprite/wc25-0002.png new file mode 100644 index 00000000..e7bc7092 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc25-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc25-0003.png b/assets/sprites/temperate_sprite/wc25-0003.png new file mode 100644 index 00000000..d34477b8 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc25-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc26-0000.png b/assets/sprites/temperate_sprite/wc26-0000.png new file mode 100644 index 00000000..2a56b88d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc26-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc26-0001.png b/assets/sprites/temperate_sprite/wc26-0001.png new file mode 100644 index 00000000..9f335f3c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc26-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc26-0002.png b/assets/sprites/temperate_sprite/wc26-0002.png new file mode 100644 index 00000000..75dde533 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc26-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc26-0003.png b/assets/sprites/temperate_sprite/wc26-0003.png new file mode 100644 index 00000000..ac8dedde Binary files /dev/null and b/assets/sprites/temperate_sprite/wc26-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0000.png b/assets/sprites/temperate_sprite/wc27-0000.png new file mode 100644 index 00000000..fb05ed92 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0001.png b/assets/sprites/temperate_sprite/wc27-0001.png new file mode 100644 index 00000000..e109bf72 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0002.png b/assets/sprites/temperate_sprite/wc27-0002.png new file mode 100644 index 00000000..44734291 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0003.png b/assets/sprites/temperate_sprite/wc27-0003.png new file mode 100644 index 00000000..3510166c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0004.png b/assets/sprites/temperate_sprite/wc27-0004.png new file mode 100644 index 00000000..62087914 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0004.png differ diff --git a/assets/sprites/temperate_sprite/wc27-0005.png b/assets/sprites/temperate_sprite/wc27-0005.png new file mode 100644 index 00000000..21a83dba Binary files /dev/null and b/assets/sprites/temperate_sprite/wc27-0005.png differ diff --git a/assets/sprites/temperate_sprite/wc28-0000.png b/assets/sprites/temperate_sprite/wc28-0000.png new file mode 100644 index 00000000..98495745 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc28-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc28-0001.png b/assets/sprites/temperate_sprite/wc28-0001.png new file mode 100644 index 00000000..2767c309 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc28-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc28-0002.png b/assets/sprites/temperate_sprite/wc28-0002.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc28-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc28-0003.png b/assets/sprites/temperate_sprite/wc28-0003.png new file mode 100644 index 00000000..c05aef89 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc28-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc29-0000.png b/assets/sprites/temperate_sprite/wc29-0000.png new file mode 100644 index 00000000..694e5c44 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc29-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc29-0001.png b/assets/sprites/temperate_sprite/wc29-0001.png new file mode 100644 index 00000000..07e5b45b Binary files /dev/null and b/assets/sprites/temperate_sprite/wc29-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc29-0002.png b/assets/sprites/temperate_sprite/wc29-0002.png new file mode 100644 index 00000000..7d59a5e5 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc29-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc29-0003.png b/assets/sprites/temperate_sprite/wc29-0003.png new file mode 100644 index 00000000..7f10aea0 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc29-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc30-0000.png b/assets/sprites/temperate_sprite/wc30-0000.png new file mode 100644 index 00000000..fd5eb418 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc30-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc30-0001.png b/assets/sprites/temperate_sprite/wc30-0001.png new file mode 100644 index 00000000..3ecf1643 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc30-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc30-0002.png b/assets/sprites/temperate_sprite/wc30-0002.png new file mode 100644 index 00000000..1ad360c2 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc30-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc30-0003.png b/assets/sprites/temperate_sprite/wc30-0003.png new file mode 100644 index 00000000..ac62b135 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc30-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc31-0000.png b/assets/sprites/temperate_sprite/wc31-0000.png new file mode 100644 index 00000000..4a93fb61 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc31-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc31-0001.png b/assets/sprites/temperate_sprite/wc31-0001.png new file mode 100644 index 00000000..12a4a898 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc31-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc31-0002.png b/assets/sprites/temperate_sprite/wc31-0002.png new file mode 100644 index 00000000..1ba79cc5 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc31-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc31-0003.png b/assets/sprites/temperate_sprite/wc31-0003.png new file mode 100644 index 00000000..ed71994b Binary files /dev/null and b/assets/sprites/temperate_sprite/wc31-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc32-0000.png b/assets/sprites/temperate_sprite/wc32-0000.png new file mode 100644 index 00000000..1943480d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc32-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc32-0001.png b/assets/sprites/temperate_sprite/wc32-0001.png new file mode 100644 index 00000000..fcd90401 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc32-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc32-0002.png b/assets/sprites/temperate_sprite/wc32-0002.png new file mode 100644 index 00000000..06c9f81e Binary files /dev/null and b/assets/sprites/temperate_sprite/wc32-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc32-0003.png b/assets/sprites/temperate_sprite/wc32-0003.png new file mode 100644 index 00000000..fd447def Binary files /dev/null and b/assets/sprites/temperate_sprite/wc32-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc33-0000.png b/assets/sprites/temperate_sprite/wc33-0000.png new file mode 100644 index 00000000..1eee88a9 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc33-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc33-0001.png b/assets/sprites/temperate_sprite/wc33-0001.png new file mode 100644 index 00000000..39317fe0 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc33-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc33-0002.png b/assets/sprites/temperate_sprite/wc33-0002.png new file mode 100644 index 00000000..f5ab9e6a Binary files /dev/null and b/assets/sprites/temperate_sprite/wc33-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc33-0003.png b/assets/sprites/temperate_sprite/wc33-0003.png new file mode 100644 index 00000000..7e761c47 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc33-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc34-0000.png b/assets/sprites/temperate_sprite/wc34-0000.png new file mode 100644 index 00000000..933ef89c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc34-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc34-0001.png b/assets/sprites/temperate_sprite/wc34-0001.png new file mode 100644 index 00000000..fd7efb7c Binary files /dev/null and b/assets/sprites/temperate_sprite/wc34-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc34-0002.png b/assets/sprites/temperate_sprite/wc34-0002.png new file mode 100644 index 00000000..ad54d3e3 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc34-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc34-0003.png b/assets/sprites/temperate_sprite/wc34-0003.png new file mode 100644 index 00000000..3931cda8 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc34-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc35-0000.png b/assets/sprites/temperate_sprite/wc35-0000.png new file mode 100644 index 00000000..93f2fdb3 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc35-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc35-0001.png b/assets/sprites/temperate_sprite/wc35-0001.png new file mode 100644 index 00000000..17b389ce Binary files /dev/null and b/assets/sprites/temperate_sprite/wc35-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc35-0002.png b/assets/sprites/temperate_sprite/wc35-0002.png new file mode 100644 index 00000000..b631ca84 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc35-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc35-0003.png b/assets/sprites/temperate_sprite/wc35-0003.png new file mode 100644 index 00000000..ebd647ea Binary files /dev/null and b/assets/sprites/temperate_sprite/wc35-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc36-0000.png b/assets/sprites/temperate_sprite/wc36-0000.png new file mode 100644 index 00000000..77ad4be1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc36-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc36-0001.png b/assets/sprites/temperate_sprite/wc36-0001.png new file mode 100644 index 00000000..b3e3196f Binary files /dev/null and b/assets/sprites/temperate_sprite/wc36-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc36-0002.png b/assets/sprites/temperate_sprite/wc36-0002.png new file mode 100644 index 00000000..b574db25 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc36-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc36-0003.png b/assets/sprites/temperate_sprite/wc36-0003.png new file mode 100644 index 00000000..3c7f8aa0 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc36-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc37-0000.png b/assets/sprites/temperate_sprite/wc37-0000.png new file mode 100644 index 00000000..4d46ea94 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc37-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc37-0001.png b/assets/sprites/temperate_sprite/wc37-0001.png new file mode 100644 index 00000000..dd5f760e Binary files /dev/null and b/assets/sprites/temperate_sprite/wc37-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc37-0002.png b/assets/sprites/temperate_sprite/wc37-0002.png new file mode 100644 index 00000000..39edef7d Binary files /dev/null and b/assets/sprites/temperate_sprite/wc37-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc37-0003.png b/assets/sprites/temperate_sprite/wc37-0003.png new file mode 100644 index 00000000..585f3fb1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc37-0003.png differ diff --git a/assets/sprites/temperate_sprite/wc38-0000.png b/assets/sprites/temperate_sprite/wc38-0000.png new file mode 100644 index 00000000..e8f72399 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc38-0000.png differ diff --git a/assets/sprites/temperate_sprite/wc38-0001.png b/assets/sprites/temperate_sprite/wc38-0001.png new file mode 100644 index 00000000..5c6afff3 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc38-0001.png differ diff --git a/assets/sprites/temperate_sprite/wc38-0002.png b/assets/sprites/temperate_sprite/wc38-0002.png new file mode 100644 index 00000000..701164fd Binary files /dev/null and b/assets/sprites/temperate_sprite/wc38-0002.png differ diff --git a/assets/sprites/temperate_sprite/wc38-0003.png b/assets/sprites/temperate_sprite/wc38-0003.png new file mode 100644 index 00000000..fe9a3bd1 Binary files /dev/null and b/assets/sprites/temperate_sprite/wc38-0003.png differ diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 00000000..d3f6ae89 Binary files /dev/null and b/docs/.DS_Store differ diff --git a/html/bc_s.png b/html/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/html/bc_s.png differ diff --git a/html/bc_sd.png b/html/bc_sd.png new file mode 100644 index 00000000..31ca888d Binary files /dev/null and b/html/bc_sd.png differ diff --git a/html/closed.png b/html/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/html/closed.png differ diff --git a/html/doc.svg b/html/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/html/docd.svg b/html/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/html/doxygen.css b/html/doxygen.css new file mode 100644 index 00000000..009a9b55 --- /dev/null +++ b/html/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/html/doxygen.svg b/html/doxygen.svg new file mode 100644 index 00000000..79a76354 --- /dev/null +++ b/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/dynsections.js b/html/dynsections.js new file mode 100644 index 00000000..b73c8288 --- /dev/null +++ b/html/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/html/folderclosed.svg b/html/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/html/folderclosedd.svg b/html/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/html/folderopen.svg b/html/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/html/folderopend.svg b/html/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/html/index.html b/html/index.html new file mode 100644 index 00000000..a6ec34d7 --- /dev/null +++ b/html/index.html @@ -0,0 +1,81 @@ + + + + + + + +My Project: Main Page + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
My Project Documentation
+
+
+
+ + + + diff --git a/html/jquery.js b/html/jquery.js new file mode 100644 index 00000000..1dffb65b --- /dev/null +++ b/html/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/html/md__r_e_a_d_m_e.html b/html/md__r_e_a_d_m_e.html new file mode 100644 index 00000000..717d8310 --- /dev/null +++ b/html/md__r_e_a_d_m_e.html @@ -0,0 +1,126 @@ + + + + + + + +My Project: Purpose + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Purpose
+
+
+

For too long, video games have been expressed, in Hideo Kojima's words, in the format of "sticks," as players confront and compete with each other online. The cultural meaning behind this ever-growing industry is something we, as players, must ask ourselves: Is this the meaning we are trying to express after all?

+

Now we live in a world that values separation, isolation, and disconnection more than togetherness and connection.

+

Inspired by the video game "Death Stranding," which was released in 2019, the vision for this project aims to revolutionize the RTS genre, transforming its competitive nature into collaboration.

+

+No man is an island by John Donne

+

No man is an island,
+ Entire of itself.
+

+

Each is a piece of the continent,
+ A part of the main.
+

+

If a clod be washed away by the sea,
+ Europe is the less.
+

+

As well as if a promontory were.
+ As well as if a manor of thine own
+ Or of thine friend's were.
+

+

Each man's death diminishes me,
+ For I am involved in mankind.
+ Therefore, send not to know
+

+

For whom the bell tolls,
+ It tolls for thee.

+

+translated to Chinese by 李敖

+

有人能自全, 沒有人是孤島,

+

每人都是大陸的一片, 要為本土應卯

+

一旦海水沖走, 歐洲就要變小。

+

那便是一塊土地, 那便是一方海角, 那便是一座莊園, 不論是你的、還是朋友的,

+

任何人的死亡,都是我的減少, 作為人類的一員,我與生靈共老。

+

喪鐘在為誰敲,我本茫然不曉, 不為幽明永隔,它正為你哀悼。

+

+Goal

+

+Methodology

+

+Packages used

+
    +
  1. openGL version 4.1
  2. +
  3. PTSD game Engine
  4. +
  5. SDL2
  6. +
  7. Imgui
  8. +
+
+
+ + + + diff --git a/html/menu.js b/html/menu.js new file mode 100644 index 00000000..b0b26936 --- /dev/null +++ b/html/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/html/menudata.js b/html/menudata.js new file mode 100644 index 00000000..752f4f40 --- /dev/null +++ b/html/menudata.js @@ -0,0 +1,27 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}]} diff --git a/html/minus.svg b/html/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/html/minusd.svg b/html/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/html/nav_f.png b/html/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/html/nav_f.png differ diff --git a/html/nav_fd.png b/html/nav_fd.png new file mode 100644 index 00000000..032fbdd4 Binary files /dev/null and b/html/nav_fd.png differ diff --git a/html/nav_g.png b/html/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/html/nav_g.png differ diff --git a/html/nav_h.png b/html/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/html/nav_h.png differ diff --git a/html/nav_hd.png b/html/nav_hd.png new file mode 100644 index 00000000..de80f18a Binary files /dev/null and b/html/nav_hd.png differ diff --git a/html/open.png b/html/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/html/open.png differ diff --git a/html/pages.html b/html/pages.html new file mode 100644 index 00000000..86c1c7b1 --- /dev/null +++ b/html/pages.html @@ -0,0 +1,86 @@ + + + + + + + +My Project: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    My Project +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Purpose
    +
    +
    + + + + diff --git a/html/plus.svg b/html/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/html/plusd.svg b/html/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/html/search/all_0.js b/html/search/all_0.js new file mode 100644 index 00000000..3e6a3ed1 --- /dev/null +++ b/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['an_20island_20by_20john_20donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_1.js b/html/search/all_1.js new file mode 100644 index 00000000..d4e94b36 --- /dev/null +++ b/html/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['by_20李敖_0',['translated to Chinese by 李敖',['../md__r_e_a_d_m_e.html#autotoc_md2',1,'']]], + ['by_20john_20donne_1',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_2.js b/html/search/all_2.js new file mode 100644 index 00000000..6d94232c --- /dev/null +++ b/html/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['chinese_20by_20李敖_0',['translated to Chinese by 李敖',['../md__r_e_a_d_m_e.html#autotoc_md2',1,'']]] +]; diff --git a/html/search/all_3.js b/html/search/all_3.js new file mode 100644 index 00000000..34b6d496 --- /dev/null +++ b/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_4.js b/html/search/all_4.js new file mode 100644 index 00000000..fd552b6c --- /dev/null +++ b/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['goal_0',['Goal',['../md__r_e_a_d_m_e.html#autotoc_md3',1,'']]] +]; diff --git a/html/search/all_5.js b/html/search/all_5.js new file mode 100644 index 00000000..59412266 --- /dev/null +++ b/html/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['is_20an_20island_20by_20john_20donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]], + ['island_20by_20john_20donne_1',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_6.js b/html/search/all_6.js new file mode 100644 index 00000000..03f6a0f7 --- /dev/null +++ b/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['john_20donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_7.js b/html/search/all_7.js new file mode 100644 index 00000000..8553fdb6 --- /dev/null +++ b/html/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['man_20is_20an_20island_20by_20john_20donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]], + ['methodology_1',['Methodology',['../md__r_e_a_d_m_e.html#autotoc_md4',1,'']]] +]; diff --git a/html/search/all_8.js b/html/search/all_8.js new file mode 100644 index 00000000..02691027 --- /dev/null +++ b/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['no_20man_20is_20an_20island_20by_20john_20donne_0',['No man is an island by John Donne',['../md__r_e_a_d_m_e.html#autotoc_md1',1,'']]] +]; diff --git a/html/search/all_9.js b/html/search/all_9.js new file mode 100644 index 00000000..639ccba5 --- /dev/null +++ b/html/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['packages_20used_0',['Packages used',['../md__r_e_a_d_m_e.html#autotoc_md5',1,'']]], + ['purpose_1',['Purpose',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/html/search/all_a.js b/html/search/all_a.js new file mode 100644 index 00000000..35c72ab4 --- /dev/null +++ b/html/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['to_20chinese_20by_20李敖_0',['translated to Chinese by 李敖',['../md__r_e_a_d_m_e.html#autotoc_md2',1,'']]], + ['translated_20to_20chinese_20by_20李敖_1',['translated to Chinese by 李敖',['../md__r_e_a_d_m_e.html#autotoc_md2',1,'']]] +]; diff --git a/html/search/all_b.js b/html/search/all_b.js new file mode 100644 index 00000000..3c13ec6f --- /dev/null +++ b/html/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['used_0',['Packages used',['../md__r_e_a_d_m_e.html#autotoc_md5',1,'']]] +]; diff --git a/html/search/all_c.js b/html/search/all_c.js new file mode 100644 index 00000000..6f54e4c2 --- /dev/null +++ b/html/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['李敖_0',['translated to Chinese by 李敖',['../md__r_e_a_d_m_e.html#autotoc_md2',1,'']]] +]; diff --git a/html/search/close.svg b/html/search/close.svg new file mode 100644 index 00000000..337d6cc1 --- /dev/null +++ b/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/html/search/mag.svg b/html/search/mag.svg new file mode 100644 index 00000000..ffb6cf0d --- /dev/null +++ b/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/html/search/mag_d.svg b/html/search/mag_d.svg new file mode 100644 index 00000000..4122773f --- /dev/null +++ b/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/html/search/mag_sel.svg b/html/search/mag_sel.svg new file mode 100644 index 00000000..553dba87 --- /dev/null +++ b/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/html/search/mag_seld.svg b/html/search/mag_seld.svg new file mode 100644 index 00000000..c906f84c --- /dev/null +++ b/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/html/search/pages_0.js b/html/search/pages_0.js new file mode 100644 index 00000000..342505c0 --- /dev/null +++ b/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['purpose_0',['Purpose',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/html/search/search.css b/html/search/search.css new file mode 100644 index 00000000..19f76f9d --- /dev/null +++ b/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/html/search/search.js b/html/search/search.js new file mode 100644 index 00000000..6fd40c67 --- /dev/null +++ b/html/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + 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. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/include/App.hpp b/include/App.hpp index d578ae22..33b82fb5 100644 --- a/include/App.hpp +++ b/include/App.hpp @@ -1,14 +1,12 @@ #ifndef APP_HPP #define APP_HPP +#include "Scene/DefaultScene.hpp" +#include "Scene/MenuScene.hpp" #include "pch.hpp" // IWYU pragma: export #include "Util/Renderer.hpp" -#include "Cat.hpp" -#include "Giraffe.hpp" -#include "GiraffeText.hpp" - class App { public: enum class State { @@ -16,24 +14,17 @@ class App { UPDATE, END, }; - State GetCurrentState() const { return m_CurrentState; } - void Start(); void Update(); void End(); // NOLINT(readability-convert-member-functions-to-static) private: State m_CurrentState = State::START; + bool showDemoWindow = true; - std::shared_ptr m_Giraffe = std::make_shared(); - // std::shared_ptr m_GiraffeText = - // std::make_shared(); - - std::shared_ptr m_Cat = std::make_shared(); - Util::Renderer m_Root; + MenuScene mapScene; - bool showDemoWindow = true; }; #endif diff --git a/include/Camera.hpp b/include/Camera.hpp new file mode 100644 index 00000000..0cd1d643 --- /dev/null +++ b/include/Camera.hpp @@ -0,0 +1,71 @@ +// +// Created by 盧威任 on 2/11/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_CAMERA_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_CAMERA_HPP +#include "Component/Component.hpp" +#include "Core/Context.hpp" +#include "Core/Drawable.hpp" +#include "config.hpp" +#include "glm/gtc/matrix_transform.hpp" +//164.F perfect for +constexpr float FOV_UPPER_LIMIT = 164.F; +constexpr float FOV_LOWER_LIMIT = 1.F; +class CameraClass : public Component { +public: + CameraClass() { setPosition(glm::vec2(0, 0)); } + CameraClass(glm::vec2 position) { setPosition(position); } + ~CameraClass() {} + + static float getCameraZoom() { return m_Zoom; } + void setCameraZoom(float zoom) { m_Zoom = zoom; } + + void addCameraZoom(float add); + + static glm::vec2 getPosition() { return m_Position; } + + void setPosition(glm::vec2 position) { m_Position = position; } + + static glm::mat4x4 getProjectionMatrix() { + /* + * return glm::perspective(glm::radians(m_Fov), +float(WINDOW_WIDTH) / (float(WINDOW_HEIGHT)), +0.1F, 100.F); + * adjust projection matrix when window size is changing + */ + + return glm::ortho(0.0F, float(WINDOW_WIDTH), 0.0F, + float(WINDOW_HEIGHT), 0.F, 100.F); + + } + + static glm::mat4x4 getViewMatrix() { + /* + * get camera position + */ + glm::vec3 cameraFront(0.F, 0.F, -1.F); + glm::vec3 cameraUp(0.F, 1.F, 0.F); + return glm::lookAt( + glm::vec3(m_Position.x, m_Position.y, 50.F), // position + cameraFront + glm::vec3(m_Position.x, m_Position.y, 0.F), cameraUp); + } + + float getMovingSpeed() { return m_MovingSpeed; } + float getZoomingSpeed() { return m_ZoomingSpeed; } + void changeFOV(float offset); + + void Start() override; + void Update() override; + void UpdateWhenCursorAtBoarder(); + void UpdateWhenCursorScroll(); + +private: + static float m_Zoom; + static glm::vec2 m_Position; + float m_MovingSpeed = 20.F; + float m_ZoomingSpeed = 0.1F; + static float m_Fov; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_CAMERA_HPP diff --git a/include/Cat.hpp b/include/Cat.hpp deleted file mode 100644 index 29338118..00000000 --- a/include/Cat.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef CAT_HPP -#define CAT_HPP - -#include "pch.hpp" - -#include "Util/Animation.hpp" -#include "Util/GameObject.hpp" - -class Cat : public Util::GameObject { -public: - Cat(); - - void Update(); - -private: - std::shared_ptr m_Animation; -}; - -#endif diff --git a/include/Core/Context.hpp b/include/Core/Context.hpp index 63cf974c..50daff36 100644 --- a/include/Core/Context.hpp +++ b/include/Core/Context.hpp @@ -1,10 +1,10 @@ #ifndef CORE_CONTEXT_HPP #define CORE_CONTEXT_HPP -#include "pch.hpp" // IWYU pragma: export - +#include "Util/Input.hpp" #include "config.hpp" - +#include "pch.hpp" // IWYU pragma: export +constexpr int CURSORATWINDOWBOARDERMARGIN = 3; namespace Core { class Context { public: @@ -31,6 +31,39 @@ class Context { void SetWindowHeight(unsigned int height) { m_WindowHeight = height; } void Setup(); + + static int IsCurosrAtBoarder() { + /* + * will check if the cursor at the window boarder + * Up:0 + * Right:1 + * Down:2 + * Left:3 + * None:4 + */ + + glm::vec2 CursorPostion = Util::Input::GetCursorPosition(); + float halfWindowHeight = s_Instance->m_WindowHeight / 2; + float halfWindowWidth = s_Instance->m_WindowWidth / 2; + if (halfWindowWidth - abs(CursorPostion.x) <= + CURSORATWINDOWBOARDERMARGIN) { + if (CursorPostion.x > 0) { + return 1; + } else { + return 3; + } + } + if (halfWindowHeight - abs(CursorPostion.y) <= + CURSORATWINDOWBOARDERMARGIN) { + if (CursorPostion.y > 0) { + return 0; + } else { + return 2; + } + } + return 4; + } + void Update(); private: diff --git a/include/Core/Drawable.hpp b/include/Core/Drawable.hpp index 0f4b19ea..7fc8ce8d 100644 --- a/include/Core/Drawable.hpp +++ b/include/Core/Drawable.hpp @@ -9,6 +9,7 @@ #include "Core/UniformBuffer.hpp" #include "Core/VertexArray.hpp" +#include "Camera.hpp" #include "Texture.hpp" #include "Util/Transform.hpp" @@ -22,7 +23,13 @@ class Drawable { public: virtual ~Drawable() = default; virtual void Draw(const Util::Transform &transform, const float zIndex) = 0; - virtual glm::vec2 GetSize() const = 0; + virtual void DrawUsingCamera(const Util::Transform &transform, + const float zIndex){}; + + + virtual glm::vec2 GetSize() const { return {0, 0}; }; + + }; } // namespace Core diff --git a/include/Core/VertexArray.hpp b/include/Core/VertexArray.hpp index bc514736..1737eb04 100644 --- a/include/Core/VertexArray.hpp +++ b/include/Core/VertexArray.hpp @@ -31,16 +31,30 @@ class VertexArray { void Unbind() const; void AddVertexBuffer(std::unique_ptr vertexBuffer); + void AddVertexBufferWithCustomizableAttribute() {} /** * Index buffer must be set or else there will be a segfault */ void SetIndexBuffer(std::unique_ptr indexBuffer); void DrawTriangles() const; + void DrawRectangles() const; + + /** + * @brief DrawArrays in line mode + * @params ?? + * */ + + void DrawLines(int count) const; + void DrawTest(int count)const; + void DrawLinesIndices() const; + template + void modifyVertexBuffersByIndex(int index, int size, std::vector data) { + m_VertexBuffers[index]->ModifyBufferData(size, data); + } private: GLuint m_ArrayId; - std::vector> m_VertexBuffers; std::unique_ptr m_IndexBuffer; }; diff --git a/include/Core/VertexBuffer.hpp b/include/Core/VertexBuffer.hpp index 744cc702..f759a0df 100644 --- a/include/Core/VertexBuffer.hpp +++ b/include/Core/VertexBuffer.hpp @@ -9,8 +9,9 @@ namespace Core { */ class VertexBuffer { public: + enum DrawingType { STATIC, DYNAMIC, STREAM }; VertexBuffer(const std::vector &vertices, - unsigned int componentCount); + unsigned int componentCount, DrawingType type = STATIC); VertexBuffer(const VertexBuffer &) = delete; VertexBuffer(VertexBuffer &&other); @@ -24,10 +25,12 @@ class VertexBuffer { void Bind() const; void Unbind() const; + + template + void ModifyBufferData(int size, std::vector data); private: GLuint m_BufferId; - unsigned int m_ComponentCount; GLenum m_Type = GL_FLOAT; }; diff --git a/include/DrawOverlays.hpp b/include/DrawOverlays.hpp new file mode 100644 index 00000000..bc2573a9 --- /dev/null +++ b/include/DrawOverlays.hpp @@ -0,0 +1,105 @@ +// +// Created by 盧威任 on 3/8/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_DRAWOVERLAYS_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_DRAWOVERLAYS_HPP +#include "Core/Drawable.hpp" +#include "Util/TransformUtils.hpp" +#include "pch.hpp" +class DrawOverlays : public Core::Drawable { + + /* boxes:draw box on cell + *cross:draw cross on cell + * selected: defines bottom left & top right, show selected "corner" on + *given cell range circle: defines only the center(cell coord) & the + *radius(cell) circle-dash: defines only the center(cell coord) & the + *radius(cell) + */ + +public: + enum class OverlayShapes { + B_BOXES, + R_BOXES, + R_CROSS, + B_SLATED, + R_SLATED, + B_CROSS, + CROSSWBOX, + SELECTED, + CIRCLE, + CIRCLE_DASHED + }; + DrawOverlays(){}; + ~DrawOverlays(){}; + void Start(std::vector cellcoords, OverlayShapes shapes) { + m_DrawShapes = shapes; + m_DrawCellLocation = cellcoords; + if (m_DrawShapes == OverlayShapes::B_BOXES) { + m_Image = std::make_shared( + std::string("../assets/sprites/Shapes/B_Box.png")); + } else if (m_DrawShapes == OverlayShapes::R_CROSS) { + m_Image = std::make_shared( + std::string("../assets/sprites/Shapes/R_Cross.png")); + } else if (m_DrawShapes == OverlayShapes::B_SLATED) { + m_Image = std::make_shared( + std::string("../assets/sprites/Shapes/B_Slated.png")); + } else if (m_DrawShapes == OverlayShapes::R_SLATED) { + m_Image = std::make_shared( + std::string("../assets/sprites/Shapes/R_Slated.png")); + } + } + void setDrawMode(OverlayShapes shapes) { + m_DrawShapes = shapes; + if (m_DrawShapes == OverlayShapes::B_BOXES) { + m_Image->SetImage( + std::string("../assets/sprites/Shapes/B_Box.png")); + } else if (m_DrawShapes == OverlayShapes::R_CROSS) { + m_Image->SetImage( + std::string("../assets/sprites/Shapes/R_Cross.png")); + } else if (m_DrawShapes == OverlayShapes::B_SLATED) { + m_Image->SetImage( + std::string("../assets/sprites/Shapes/B_Slated.png")); + } else if (m_DrawShapes == OverlayShapes::R_SLATED) { + m_Image->SetImage( + std::string("../assets/sprites/Shapes/R_Slated.png")); + } + } + void setDrawCellLocation(std::vector cellcoords) { + m_DrawCellLocation = cellcoords; + } + void Draw(const Util::Transform &trans, const float zindex) override {} + + void DrawUsingCamera(const Util::Transform &trans, + const float zindex) override { + + Util::Transform trans2 = trans; + if (m_DrawShapes == OverlayShapes::B_BOXES || + m_DrawShapes == OverlayShapes::R_CROSS) { + if (trans2.translation.x < 0) { + trans2.translation = + glm::vec2(trans.translation.x - m_Image->GetSize().x / 2, + trans.translation.y + m_Image->GetSize().y / 2); + } else { + trans2.translation = + glm::vec2(trans.translation.x + m_Image->GetSize().x / 2, + trans.translation.y + m_Image->GetSize().y / 2); + } + + m_Image->DrawUsingCamera(trans2, zindex); + } else if (m_DrawShapes == OverlayShapes::B_SLATED || + m_DrawShapes == OverlayShapes::R_SLATED) { + trans2.translation = {0, 0}; + for (auto i : m_DrawCellLocation) { + m_Image->DrawUsingCamera(trans2, zindex); + } + } + } + +private: + std::vector m_DrawCellLocation; + std::shared_ptr m_Image; + OverlayShapes m_DrawShapes; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_DRAWOVERLAYS_HPP diff --git a/include/GameObjectID.hpp b/include/GameObjectID.hpp new file mode 100644 index 00000000..01356098 --- /dev/null +++ b/include/GameObjectID.hpp @@ -0,0 +1,90 @@ +// +// Created by 盧威任 on 3/11/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTID_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTID_HPP +#include "House.hpp" +#include +#include + +enum class unitType { + // buildings + POWER_PLANT, + BARRACKS, + ORE_REF, + WAR_FACT, + ADV_POWER_PLANT, + + // defense + SANDBAGS, + PILLBOX, + TURRET, + // Troopers + INFANTRY, + + // Vehicles + TRUCK, + // null + null, + + // tile + TILE_BEACH, + TILE_BRIDGE, + TILE_CLEAR, + TILE_RIVER, + TILE_ROAD, + TILE_ROUGH, + TILE_WATER, + TILE_ROCK, + TILE_TREE, + + // overlays + OVERLAY_GEMS, + OVERLAY_ORE +}; + +class OccupiedID { +private: + static std::unordered_map m_OccupiedID; + +public: + static int getNewestID(unitType type); +}; + +class GameObjectID { +public: + GameObjectID() + : m_unitType(unitType::null), + number(0) {} + GameObjectID(unitType type, HouseType house) + : m_unitType(type), + number(OccupiedID::getNewestID(type)), + m_house(house) {} + ~GameObjectID() {} + + void generateID(unitType type) { m_unitType = type; } + int getNumber() const { return number; } + unitType getUnitType() const { return m_unitType; } + + bool operator==(const GameObjectID &id) const { + if (this->m_unitType == id.m_unitType && this->number == id.number) { + return true; + } else { + return false; + } + }; + + GameObjectID &operator=(const GameObjectID &id) { + this->number = id.number; + this->m_unitType = id.m_unitType; + return *this; + } + +private: + unitType m_unitType; + unsigned int number; + HouseType m_house; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTID_HPP diff --git a/include/GameObjectManager.hpp b/include/GameObjectManager.hpp new file mode 100644 index 00000000..48ad3ff4 --- /dev/null +++ b/include/GameObjectManager.hpp @@ -0,0 +1,125 @@ +// +// Created by 盧威任 on 3/11/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTMANAGER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTMANAGER_HPP +#include "GameObjectID.hpp" +#include "Player.hpp" +#include "Structure/AdvencePowerPlants.hpp" +#include "Structure/Barracks.hpp" +#include "Structure/OreRefinery.hpp" +#include "Structure/PowerPlants.hpp" +#include "Structure/Structure.hpp" +#include "Structure/WarFactory.hpp" +#include "Unit/Avatar.hpp" +#include "Unit/FindValidPathToDest.hpp" +#include +#include +#include + +class GameObjectManager { +public: + GameObjectManager() {} + ~GameObjectManager() {} + void Start() { + /* + for (auto pair : m_StrcutMap) { + pair.second->Start(); + */ + for (auto pair : m_BuiltStructure) { + pair->Start(); + } + m_StartTime = std::chrono::high_resolution_clock::now(); + // m_wayPointUnit.setCurrentCell(destination); + // m_wayPointUnit.setNextCell(destination); + } + glm::vec2 cursorstart; + glm::vec2 cursorend; + void Update() { + for (auto pair : m_BuiltStructure) { + pair->Update(); + } + for (auto unit : m_UnitArray) { + unit->Update(); + } + + CursorSelect(&cursorstart, &cursorend); + + // currency update + std::chrono::high_resolution_clock::time_point m_currentTime = + std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = m_currentTime - m_StartTime; + if (elapsed.count() - m_lastElapsed >= 1) { // update every second + m_lastElapsed = elapsed.count(); + updateTotalCurrency(); + } + } + + // Select Unit to take action + + void CursorSelect(glm::vec2 *start, glm::vec2 *end) { + if (Util::Input::IsKeyDown(Util::Keycode::MOUSE_LB)) { + *start = Util::Input::GetCursorPosition(); + } + if (Util::Input::IsKeyPressed(Util::Keycode::MOUSE_LB)) { + *end = Util::Input::GetCursorPosition(); + } + MapUtil::ScreenToGlobalCoord(*start); + } + + static bool ifObjectClicked(glm::vec2 objpos, glm::vec2 objsize, + glm::vec2 mousestart, glm::vec2 mouseend) { + mousestart = MapUtil::GlobalCoordToCellCoord(mousestart); + mouseend = MapUtil::GlobalCoordToCellCoord(mouseend); + objpos = MapUtil::GlobalCoordToCellCoord(objpos); + return (mousestart == objpos); + } + + void Append(std::shared_ptr newstruct) { + newstruct->Start(); +// newstruct->importMap(m_Map); + m_BuiltStructure.push_back(newstruct); + } + void Append(std::shared_ptr newUnit) { + m_UnitArray.push_back(newUnit); + printf("(GOM) push back success\n"); + } + + void RemoveStructByID(const GameObjectID id) {} + + int GetTotalPower() { + int totalPower = 0; + for (int i = 0; i < m_BuiltStructure.size(); i++) { + totalPower += m_BuiltStructure[i]->GetElectricPower(); + } + return totalPower; + } + int GetTotalCurrency() { return m_Player->getTotalCurrency(); } + void updateTotalCurrency() { + int totalCurrency = m_Player->getTotalCurrency(); + if (m_BuiltStructure.size() > 0) { + for (int i = 0; i < m_BuiltStructure.size(); i++) { + totalCurrency += m_BuiltStructure[i]->GetBuildingIncome(); + } + } + m_Player->setTotalCurrency(totalCurrency); + } + + std::vector> getStructureArray() { + return m_BuiltStructure; + } + + void importPlayer(std::shared_ptr player) { m_Player = player; } + +private: + std::vector> m_BuiltStructure; + std::vector> m_UnitArray; + FindValidPathToDest m_wayPointUnit; + std::shared_ptr m_Map; + std::shared_ptr m_Player; + std::chrono::high_resolution_clock::time_point m_StartTime; + double m_lastElapsed = 0.F; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_GAMEOBJECTMANAGER_HPP diff --git a/include/Giraffe.hpp b/include/Giraffe.hpp deleted file mode 100644 index 38d2d8ec..00000000 --- a/include/Giraffe.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef GIRAFFE_HPP -#define GIRAFFE_HPP - -#include - -#include "GiraffeText.hpp" -#include "Util/GameObject.hpp" -#include "Util/Text.hpp" - -class Giraffe : public Util::GameObject { - -public: - void Update(); - - void Start(); - -private: - std::shared_ptr m_GiraffeText; -}; - -#endif diff --git a/include/GiraffeText.hpp b/include/GiraffeText.hpp deleted file mode 100644 index 02c2f260..00000000 --- a/include/GiraffeText.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GIRAFFE_TEXT_HPP -#define GIRAFFE_TEXT_HPP - -#include "Util/GameObject.hpp" -#include "Util/Text.hpp" - -class GiraffeText : public Util::GameObject { -public: - GiraffeText() = default; - - GiraffeText(std::string font, const int size) - : m_Font(std::move(font)), - m_Size(size) {} - - ~GiraffeText() override = default; - - void Start(); - - void Update(); - -private: - std::string m_Font; - int m_Size; - std::shared_ptr m_Text; -}; - -#endif diff --git a/include/Grid.hpp b/include/Grid.hpp new file mode 100644 index 00000000..9133a600 --- /dev/null +++ b/include/Grid.hpp @@ -0,0 +1,51 @@ +// +// Created by 盧威任 on 2/16/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_GRID_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_GRID_HPP +#include "Core/Drawable.hpp" +#include "Core/Program.hpp" +#include "Core/UniformBuffer.hpp" +#include "Core/VertexArray.hpp" +#include "Line.hpp" +#include "Util/TransformUtils.hpp" +#include + +class Grid : public Core::Drawable { + +public: + Grid(){}; + ~Grid(){}; + void InitVertexAndColor(); + void Start(std::vector lineVector); + void queStart(std::deque lineVector); + void Draw(const Util::Transform &transform, const float zIndex) override; + void DrawUsingCamera(const Util::Transform &transform, + const float zIndex) override; + + void setLine(glm::vec2 from, glm::vec2 to, glm::vec3 color = {1, 1, 1}); + void SetActivate(bool active) { m_Activate = active; }; + + void setLineWidth(float linewidth) { m_lineWidth = linewidth; } + float getLineWidth() { return m_lineWidth; } + +private: + std::vector m_lineVector; + + Core::Program m_Program = Core::Program("../assets/shaders/DrawLines.vert", + "../assets/shaders/DrawLines.frag"); + + std::unique_ptr> m_Matrices = + std::make_unique>(m_Program, "Grid", + 0); + + float m_lineWidth = 1.0F; + + std::unique_ptr m_VertexArray = + std::make_unique(); + + bool m_Activate = false; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_GRID_HPP diff --git a/include/House.hpp b/include/House.hpp new file mode 100644 index 00000000..61330a40 --- /dev/null +++ b/include/House.hpp @@ -0,0 +1,24 @@ +// +// Created by 盧威任 on 3/23/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_HOUSE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_HOUSE_HPP + +enum class HouseType { ENEMY, NEUTRAL, FRIEND, MY, NONE }; + +class House { +public: + House() {} + House(HouseType house) + : m_house(house) {} + ~House() {} + + HouseType getHouse() { return m_house; } + void setHouse(HouseType house) { m_house = house; } + +private: + HouseType m_house; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_HOUSE_HPP diff --git a/include/Line.hpp b/include/Line.hpp new file mode 100644 index 00000000..dc0c5981 --- /dev/null +++ b/include/Line.hpp @@ -0,0 +1,37 @@ +// +// Created by 盧威任 on 2/16/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_LINE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_LINE_HPP +#include "glm/glm.hpp" +class Line { +public: + Line(){this->color = glm::vec3(1, 1, 1);}; + ~Line(){}; + Line(glm::vec2 lineFrom, glm::vec2 lineTo, glm::vec3 color) { + this->lineFrom = lineFrom; + this->lineTo = lineTo; + this->color = color; + } + + Line(glm::vec2 lineFrom, glm::vec2 lineTo) { + this->lineFrom = lineFrom; + this->lineTo = lineTo; + this->color = glm::vec3(1, 1, 1); + } + + glm::vec2 getlineFrom() { return lineFrom; }; + glm::vec2 getlineTo() { return lineTo; }; + glm::vec3 getColor() { return color; }; + + void setlineTo(glm::vec2 to){this->lineTo=to;}; + void setlineFrom(glm::vec2 from){this->lineFrom=from;}; + +private: + glm::vec2 lineFrom; + glm::vec2 lineTo; + glm::vec3 color; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_LINE_HPP diff --git a/include/Map/Map.hpp b/include/Map/Map.hpp new file mode 100644 index 00000000..fd4e29f8 --- /dev/null +++ b/include/Map/Map.hpp @@ -0,0 +1,46 @@ +// +// Created by 盧威任 on 2/29/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MAP_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MAP_HPP +#include "Grid.hpp" +#include "Map/Tile.hpp" +#include "Util/ImageArray.hpp" +#include "glm/vec2.hpp" +#include "pch.hpp" +#include + +class MapClass : public Core::Drawable { +public: + void Init(unsigned int width, unsigned int height); + void Init(std::vector>> map, + unsigned int width, unsigned int height); + void Draw(const Util::Transform &trans, const float zindex) override; + + std::shared_ptr getTileByCellPosition(glm::vec2 position); + bool getWalkable(glm::vec2 position) { + return getTileByCellPosition(position)->getWalkable(); + } + + void setTileByCellPosition(glm::vec2 position, + std::shared_ptr tile); + + void setGridActive(bool value) { m_Grid.SetActivate(value); } + +protected: + void InitGrid(); + +private: + std::vector> m_Images; + std::unordered_map> m_Tiles; + unsigned int m_MapWdith = 0; + unsigned int m_MapHeight = 0; + glm::vec2 m_MapPosition = {0, 0}; + std::vector>> m_Map; + int m_ZIndex = 0; + Grid m_Grid; + std::string m_spriteFolder = "../assets/sprites/temperate_sprite/"; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MAP_HPP diff --git a/include/Map/MapBinReader.hpp b/include/Map/MapBinReader.hpp new file mode 100644 index 00000000..df6a78f4 --- /dev/null +++ b/include/Map/MapBinReader.hpp @@ -0,0 +1,22 @@ +// +// Created by 盧威任 on 3/15/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MAPBINREADER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MAPBINREADER_HPP +#include "Tile.hpp" +#include "YAMLReader.hpp" +#include +#include +#include +#include + +//../assets/map/CIFSTE/map.bin +//"../assets/map/ore/map.bin" +class MapBinReader { +public: + static std::ifstream readBinFiles(const std::string filepath); + static std::vector>> + readBin(const std::string filepath, int width, int hieght); +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MAPBINREADER_HPP diff --git a/include/Map/MapUtility.hpp b/include/Map/MapUtility.hpp new file mode 100644 index 00000000..f6f256eb --- /dev/null +++ b/include/Map/MapUtility.hpp @@ -0,0 +1,44 @@ +// +// Created by 盧威任 on 3/30/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MAPUTILITY_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MAPUTILITY_HPP +#include "Tile.hpp" +#include +class MapUtil { +public: + static std::vector> + readMapAndTileSet(std::vector map, + std::unordered_map tileset) { + std::vector> maps; + for (int i = 0; i < map.size(); i++) { + maps.push_back(std::make_shared(tileset[map[i]])); + } + return maps; + } + + static glm::vec2 ScreenToGlobalCoord(glm::vec2 screenCoord) { + auto proj = CameraClass::getProjectionMatrix(); + auto view = CameraClass::getViewMatrix(); + glm::vec2 offset = {WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2}; + glm::vec4 vec4ScreenCoord( + {screenCoord[0] + CameraClass::getPosition().x + offset.x, + screenCoord[1] + CameraClass::getPosition().y + offset.y, 0.F, + 1.F}); + glm::vec4 global(vec4ScreenCoord); + + return glm::vec2(global[0], global[1]); + } + + static glm::vec2 GlobalCoordToCellCoord(glm::vec2 globalCoord) { + return glm::vec2(int(globalCoord[0] / CELL_SIZE.x), + int(globalCoord[1] / CELL_SIZE.y)); + } + + static glm::vec2 CellCoordToGlobal(const glm::vec2 cellCoord) { + return glm::vec2(int(cellCoord[0] * CELL_SIZE.x) + 0.5 * CELL_SIZE.x, + int(cellCoord[1] * CELL_SIZE.y) + 0.5 * CELL_SIZE.y); + } +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MAPUTILITY_HPP diff --git a/include/Map/TerrainConfig.hpp b/include/Map/TerrainConfig.hpp new file mode 100644 index 00000000..5c205265 --- /dev/null +++ b/include/Map/TerrainConfig.hpp @@ -0,0 +1,19 @@ +// +// Created by 盧威任 on 3/18/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_TERRAINCONFIG_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_TERRAINCONFIG_HPP +#include "Tile.hpp" +#include +class TerrainConfig { +private: + static std::unordered_map> m_config; + +public: + static std::shared_ptr GetConfig(std::string tilename) { + return TerrainConfig::m_config[tilename]; + }; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_TERRAINCONFIG_HPP diff --git a/include/Map/Tile.hpp b/include/Map/Tile.hpp new file mode 100644 index 00000000..4f8eceb3 --- /dev/null +++ b/include/Map/Tile.hpp @@ -0,0 +1,91 @@ +// +// Created by 盧威任 on 2/29/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_TILE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_TILE_HPP +#include "GameObjectID.hpp" +#include "SpriteSheet.hpp" + +#include "Structure/Structure.hpp" +#include +class TileClass { +public: + TileClass(const unitType unittype, bool buildable, bool walkable, + bool clickable, std::string tileimagepath) + : m_Id(GameObjectID(unittype, HouseType::NONE)), + m_Clickable(clickable), + m_Buildable(buildable), + m_Walkable(walkable), + m_TileImagePath(tileimagepath) {} + + TileClass(const unitType unittype, bool buildable, bool walkable, + bool clickable) + : m_Id(GameObjectID(unittype, HouseType::NONE)), + m_Buildable(buildable), + m_Walkable(walkable), + m_Clickable(clickable), + m_TileImagePath("") {} + TileClass() + : m_Id(GameObjectID(unitType::null, HouseType::NONE)), + m_Buildable(false), + m_Walkable(false), + m_Clickable(true), + m_TileImagePath(""){}; + ~TileClass() {} + + bool getWalkable() { return m_Walkable; }; + bool getBuildable() { return m_Buildable; }; + bool getClickable() { return m_Clickable; }; + std::string getTileImagePath() { return m_TileImagePath; }; + + void setWalkable(bool value) { m_Walkable = value; }; + void setBuildable(bool value) { m_Buildable = value; }; + void setClickable(bool value) { m_Clickable = value; }; + + void setTileImage(std::string tileimage) { m_TileImagePath = tileimage; }; + + /* + void drawTileImage(Util::Transform trans, int zindex) { + m_TileImagePath->DrawUsingCamera(trans, zindex); + } + */ + + /* + bool operator==(const TileClass &tile) const { + if (tile.m_Name == m_Name && m_Walkable == tile.m_Walkable && + m_Buildable == tile.m_Walkable) { + return true; + } else { + return false; + } + } + + bool operator<(const TileClass &tile) const { + if (tile.m_Name < m_Name || m_Walkable < tile.m_Walkable || + m_Buildable == tile.m_Walkable) { + return true; + } else { + return false; + } + } + */ + TileClass &operator=(const TileClass &tile) { + this->m_Walkable = tile.m_Walkable; + this->m_Clickable = tile.m_Clickable; + this->m_TileImagePath = tile.m_TileImagePath; + + this->m_Buildable = tile.m_Buildable; + this->m_Id = tile.m_Id; + return *this; + } + +private: + bool m_Walkable; + bool m_Buildable; + bool m_Clickable; + std::string m_TileImagePath; + GameObjectID m_Id; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_TILE_HPP diff --git a/include/Map/YAMLReader.hpp b/include/Map/YAMLReader.hpp new file mode 100644 index 00000000..d681ec9d --- /dev/null +++ b/include/Map/YAMLReader.hpp @@ -0,0 +1,24 @@ +// +// Created by 盧威任 on 3/17/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_YAMLREADER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_YAMLREADER_HPP +#include "TerrainConfig.hpp" +#include "Tile.hpp" +#include "Util/Image.hpp" +#include +#include +#include +class YAMLReader { +public: + static std::string convertYAMLTileToImagePath(int id, int index); + + static std::shared_ptr convertYAMLTileToTileClass(int id, + int index); + +private: + static std::shared_ptr m_mapTile; + TerrainConfig config; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_YAMLREADER_HPP diff --git a/include/Player.hpp b/include/Player.hpp new file mode 100644 index 00000000..0c0b4efc --- /dev/null +++ b/include/Player.hpp @@ -0,0 +1,27 @@ +// +// Created by 盧威任 on 2/16/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_PLAYER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_PLAYER_HPP +class Player { +public: + Player() {} + ~Player() {} + + void setTotalCurrency(int value) { m_totalCurrency = value; }; + void addCurrency(int value) { m_totalCurrency += value; }; + + void setTotalPower(int value){m_totalPower=value;} + void addPower(int value){m_totalPower+=value;} + + int getTotalPower() {return m_totalPower;} + int getTotalCurrency() { return m_totalCurrency; } + int getMaxTroopSize(){return m_maxTroopSize;} + +private: + int m_maxTroopSize = 200; + int m_totalPower = 0 ; + int m_totalCurrency = 0; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_PLAYER_HPP diff --git a/include/Scene/DefaultScene.hpp b/include/Scene/DefaultScene.hpp new file mode 100644 index 00000000..a840ee2b --- /dev/null +++ b/include/Scene/DefaultScene.hpp @@ -0,0 +1,29 @@ +// +// Created by 盧威任 on 2/15/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_DEFAULTSCENE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_DEFAULTSCENE_HPP +#include "Scene.hpp" +#include "Unit/Avatar.hpp" +#include "Unit/Hunter.hpp" +#include "Unit/Runner.hpp" +class DefaultScene : public Scene { + +public: + DefaultScene(){}; + ~DefaultScene(){}; + + void Start() override; + void Update() override; + +private: + SpriteSheet m_SpriteSheet; + DrawOverlays m_testdraw; + Grid testGrid; + + Avatar m_dummy; + std::shared_ptr m_hunter = std::make_shared(); + std::shared_ptr m_runner = std::make_shared(); +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_DEFAULTSCENE_HPP diff --git a/include/Scene/MapScene.hpp b/include/Scene/MapScene.hpp new file mode 100644 index 00000000..d3b5a6ad --- /dev/null +++ b/include/Scene/MapScene.hpp @@ -0,0 +1,24 @@ +// +// Created by 盧威任 on 2/15/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MAPSCENE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MAPSCENE_HPP +#include "Scene/Scene.hpp" +#include "Util/BGM.hpp" +class MapScene : public Scene { +public: + MapScene(){}; + ~MapScene(){}; + + void Start() override; + void Update() override; + void End(){}; + +private: + SpriteSheet m_SpriteSheet; + DrawOverlays m_testdraw; + Grid testGrid; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MAP_HPP diff --git a/include/Scene/MenuScene.hpp b/include/Scene/MenuScene.hpp new file mode 100644 index 00000000..72e728bd --- /dev/null +++ b/include/Scene/MenuScene.hpp @@ -0,0 +1,65 @@ +// +// Created by 盧威任 on 4/1/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MENUSCENE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MENUSCENE_HPP +#include "Scene/DefaultScene.hpp" +#include "Scene/MapScene.hpp" +#include "Scene/Scene.hpp" +class MenuScene : public Scene { + enum class SceneMode { DEFAULT, MAP, MENU }; + +public: + MenuScene() + : m_BGM("../assets/BGM/RA3-Soviet_March.mp3") {} + ~MenuScene() {} + + void Start() override { + + m_MapScene->Start(); + m_DefaultScene->Start(); + } + void Update() override { + + if (m_currentMode == SceneMode::MENU) { + if (Util::Input::IsKeyPressed(Util::Keycode::P)) { + m_BGM.Play(); + } + if (Util::Input::IsKeyPressed(Util::Keycode::M)) { + m_currentMode = SceneMode::MAP; + } + if (Util::Input::IsKeyPressed(Util::Keycode::D)) { + m_currentMode = SceneMode::DEFAULT; + } + } + + switch (m_currentMode) { + case (SceneMode::MAP): + m_MapScene->Update(); + break; + case (SceneMode::DEFAULT): + m_DefaultScene->Update(); + break; + case (SceneMode::MENU): + } + } + +private: + SceneMode m_currentMode = SceneMode::MENU; + std::shared_ptr m_MapScene = std::make_shared(); + std::shared_ptr m_DefaultScene = + std::make_shared(); + Util::BGM m_BGM; + std::shared_ptr m_ButtonSinglePlayer = + std::make_shared( + "../assets/Button/Button_SinglePlayer.png"); + std::shared_ptr m_ButtonSetting = + std::make_shared("../assets/Button/Button_Setting.png"); + std::shared_ptr m_ButtonExit = + std::make_shared("../assets/Button/Button_Exit.png"); + + std::shared_ptr m_ButtonExtra = + std::make_shared("../assets/Button/Button_Extras.png"); +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MENUSCENE_HPP diff --git a/include/Scene/Scene.hpp b/include/Scene/Scene.hpp new file mode 100644 index 00000000..69c721ca --- /dev/null +++ b/include/Scene/Scene.hpp @@ -0,0 +1,62 @@ +// +// Created by 盧威任 on 2/16/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_SCENE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_SCENE_HPP +#include "Camera.hpp" +#include "Core/Context.hpp" +#include "GameObjectManager.hpp" +#include "Map/MapBinReader.hpp" +#include "Map/YAMLReader.hpp" + +#include "Camera.hpp" +#include "Component/Object.hpp" +#include "DrawOverlays.hpp" +#include "Grid.hpp" +#include "Map/Map.hpp" +#include "SpriteSheet.hpp" +#include "Structure/AdvencePowerPlants.hpp" +#include "Structure/Barracks.hpp" +#include "Structure/IWayPointStructure.hpp" +#include "Structure/OreRefinery.hpp" +#include "Structure/PowerPlants.hpp" +#include "Structure/WarFactory.hpp" +#include "Structure/WayPoint.hpp" +#include "UI/UI.hpp" +#include "Util/Image.hpp" +#include "Util/Input.hpp" +#include "Util/Keycode.hpp" +#include "Util/Logger.hpp" +#include "Util/Renderer.hpp" +#include +class Scene { +public: + Scene() {} + virtual ~Scene() {} + void Init(); + virtual void Start() = 0; + /* + void addObjectToScene(std::shared_ptr object) { + m_ObjectList.push_back(object); + if (m_IsRunning) { + object->Start(); + } + } + */ + virtual void Update() = 0; + + CameraClass getCamera() { return m_SceneCamera; }; + +protected: + CameraClass m_SceneCamera; + std::shared_ptr m_Map = std::make_shared(); + + std::shared_ptr m_GameObjectManager = + std::make_shared(); + Util::Renderer m_Renderer; + UIClass m_UI; + std::shared_ptr m_Player = std::make_shared(); +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_SCENE_HPP diff --git a/include/Selectable.hpp b/include/Selectable.hpp new file mode 100644 index 00000000..4f4c1d7e --- /dev/null +++ b/include/Selectable.hpp @@ -0,0 +1,16 @@ +// +// Created by 盧威任 on 3/26/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_SELECTABLE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_SELECTABLE_HPP +class Selectable { +public: + virtual void onSelected() = 0; + bool getSelected() { return b_Selected; } + void setSelected(bool value) { b_Selected = value; } + +protected: + bool b_Selected; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_SELECTABLE_HPP diff --git a/include/Sprite.hpp b/include/Sprite.hpp new file mode 100644 index 00000000..fb412dc7 --- /dev/null +++ b/include/Sprite.hpp @@ -0,0 +1,52 @@ +// +// Created by 盧威任 on 2/15/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_SPRITE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_SPRITE_HPP +#include "Core/Drawable.hpp" +#include "Util/CustomizableImage.hpp" +#include "Util/Image.hpp" +#include "pch.hpp" // IWYU pragma: export + +class Sprite : public Core::Drawable { +public: + Sprite(const std::string &filepath, std::vector textcoord, + std::vector uvcoord, + std::vector index = {0, 1, 2, 2, 3, 0}) + : m_Index(index), + m_TextureCoord(textcoord), + m_UvCoord(uvcoord) { + m_Image = std::make_unique(filepath); + m_Image->Init(textcoord, uvcoord, index); + }; + + ~Sprite(){}; + + void Draw(const Util::Transform &transform, const float zIndex) override { + m_Image->Draw(transform, zIndex); + } + + void DrawUsingCamera(const Util::Transform &transform, + const float zIndex) override { + m_Image->DrawUsingCamera(transform, zIndex); + } + + void Init() { m_Image->Init(m_TextureCoord, m_UvCoord, m_Index); } + + void SetIndex(std::vector index) { m_Image->SetIndex(index); } + void DrawTest(int count, const Util::Transform &transform, + const float zIndex) { + // m_Image->Draw(count,transform,zIndex); + } + + GLuint getGLunit() { return m_Image->getTextureID(); } + +private: + std::unique_ptr m_Image; + std::vector m_TextureCoord; + std::vector m_UvCoord; + std::vector m_Index; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_SPRITE_HPP diff --git a/include/SpriteSheet.hpp b/include/SpriteSheet.hpp new file mode 100644 index 00000000..7f7938d9 --- /dev/null +++ b/include/SpriteSheet.hpp @@ -0,0 +1,58 @@ +// +// Created by 盧威任 on 2/15/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_SPRITESHEET_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_SPRITESHEET_HPP +#include "Sprite.hpp" +#include "Util/CustomizableImage.hpp" +class SpriteSheet { +public: + SpriteSheet(){}; + ~SpriteSheet() {} + + /** + * @brief SpriteSheet, use Start to define a spritesheet, reading sequence + * will be read in "row-first" order + * @param filepath like the defination of "Image" + * @param spriteWidth spriteWidth + * @param spriteHeight spriteHieght + * @param numSpirtes what's the total number of sprites in an image + * @param spacing spacing between sprites + * + */ + void Start(std::string filepath, int spriteWidth, int spriteHeight, + int numSpirtes, int spacing); + + void DrawSpriteByIndex(int index, Util::Transform trans, int zIndex) { + m_SpriteSheet[index]->Init(); + m_SpriteSheet[index]->DrawUsingCamera(trans, zIndex); + } + + glm::vec2 getSpriteSize() { + return glm::vec2(m_SpriteWidth, m_SpriteHeight); + }; + + GLuint getGlunitByIndex(int index) { + m_SpriteSheet[index]->Init(); + return m_SpriteSheet[index]->getGLunit(); + } + + std::vector getUVbyIndex(int index) { return m_Uv[index]; } + + static std::vector UVtoImGuiCoord(std::vector UV) { + // 0,3 & 4,1 + return std::vector{glm::vec2(UV[0], UV[1]), + glm::vec2(UV[4], UV[3])}; + } + +private: + std::vector> m_SpriteSheet; + std::vector m_TextCoord; + std::vector> m_Uv; + std::vector m_Index; + int m_SpriteWidth = 0; + int m_SpriteHeight = 0; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_SPRITESHEET_HPP diff --git a/include/Structure/AdvencePowerPlants.hpp b/include/Structure/AdvencePowerPlants.hpp new file mode 100644 index 00000000..822afd1c --- /dev/null +++ b/include/Structure/AdvencePowerPlants.hpp @@ -0,0 +1,17 @@ +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_ADVPowerPlants_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_ADVPowerPlants_HPP +#include "House.hpp" +#include "Structure.hpp" +class ADVPowerPlants : public Structure { +public: + ADVPowerPlants(float electricPower = 200.F, float buildingTime = 25.F*CHEAT, + float buildingCost = 500.F, float buildingHp = 700.F, + HouseType house = HouseType::NONE) + : Structure(electricPower, buildingTime, buildingCost, buildingHp, + GameObjectID(unitType::ADV_POWER_PLANT, house)) { + SetDrawable( + std::make_unique("../assets/sprites/PowerPlants.png")); + }; +}; + +#endif diff --git a/include/Structure/Barracks.hpp b/include/Structure/Barracks.hpp new file mode 100644 index 00000000..b58a299a --- /dev/null +++ b/include/Structure/Barracks.hpp @@ -0,0 +1,18 @@ +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_BARRACKS_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_BARRACKS_HPP + +#include "WayPointStructure.hpp" + + +class Barracks : public WayPointStructure { +public: + Barracks(float electricPower = -20.F, float buildingTime = 15.F*CHEAT, + float buildingCost = 300.F, float buildingHp = 800.F, + HouseType house = HouseType::NONE) + + : WayPointStructure(electricPower, buildingTime, buildingCost, + buildingHp, + GameObjectID(unitType::BARRACKS, house)){}; + void Start() override; +}; +#endif diff --git a/include/Structure/HighLight.h b/include/Structure/HighLight.h new file mode 100644 index 00000000..ecb888aa --- /dev/null +++ b/include/Structure/HighLight.h @@ -0,0 +1,14 @@ +// +// Created by nudle on 2024/3/6. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_HIGHLIGHT_H +#define PRACTICALTOOLSFORSIMPLEDESIGN_HIGHLIGHT_H +#include "Util/GameObject.hpp" +class HighLight:public Util::GameObject{ +public: + HighLight(){}; + void SetHLScale(glm::vec2 Scale){m_Transform.scale={Scale.x+0.1,Scale.y+0.1};}; + void SetObjectLocation(glm::vec2 location){m_Transform.translation=location;}; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_HIGHLIGHT_H diff --git a/include/Structure/IWayPointStructure.hpp b/include/Structure/IWayPointStructure.hpp new file mode 100644 index 00000000..dfbd9827 --- /dev/null +++ b/include/Structure/IWayPointStructure.hpp @@ -0,0 +1,25 @@ +// +// Created by nudle on 2024/3/3. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_IWAYPOINTSTRUCTURE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_IWAYPOINTSTRUCTURE_HPP +#include "Line.hpp" +#include "Structure.hpp" + +class IWayPointStructure { +private: + glm::vec2 waypointLocation = {0, 0}; + +public: + virtual glm::vec2 GetWayPointLocation() { return this->waypointLocation; }; + void SetWayPointLocation(glm::vec2 newLocation) { //=DrawLocation+Cell + int _x = newLocation.x / CELL_SIZE.x; + int _y = newLocation.y / CELL_SIZE.y; + newLocation = {_x * CELL_SIZE.x, _y * CELL_SIZE.y}; + this->waypointLocation = {newLocation.x + 0.5 * CELL_SIZE.x, + newLocation.y + 0.5 * CELL_SIZE.y}; + }; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_IWAYPOINTSTRUCTURE_HPP diff --git a/include/Structure/OreRefinery.hpp b/include/Structure/OreRefinery.hpp new file mode 100644 index 00000000..1e30e920 --- /dev/null +++ b/include/Structure/OreRefinery.hpp @@ -0,0 +1,15 @@ +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_OreRefinery_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_OreRefinery_HPP +#include "WayPointStructure.hpp" +class OreRefinery : public WayPointStructure { +public: + OreRefinery(float electricPower = -30.F, float buildingTime = 100.F*CHEAT, + float buildingCost = 2000.F, float buildingHp = 900.F, + HouseType house = HouseType::NONE) + : WayPointStructure(electricPower, buildingTime, buildingCost, + buildingHp, + GameObjectID(unitType::ORE_REF, house)){}; + void Start() override; + virtual float GetBuildingIncome()override{return 50.F;}//debug +}; +#endif diff --git a/include/Structure/PowerPlants.hpp b/include/Structure/PowerPlants.hpp new file mode 100644 index 00000000..6cfdb7d9 --- /dev/null +++ b/include/Structure/PowerPlants.hpp @@ -0,0 +1,18 @@ +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_PowerPlants_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_PowerPlants_HPP + +#include "Structure.hpp" + +class PowerPlants : public Structure { +public: + PowerPlants(float electricPower = 100.F, float buildingTime = 15.F*CHEAT, + float buildingCost = 300.F, float buildingHp = 400.F, + HouseType house = HouseType::NONE) + : Structure(electricPower, buildingTime, buildingCost, buildingHp, + GameObjectID(unitType::POWER_PLANT, house)) { + SetDrawable( + std::make_unique("../assets/sprites/PowerPlants.png")); + }; +}; + +#endif diff --git a/include/Structure/Structure.hpp b/include/Structure/Structure.hpp new file mode 100644 index 00000000..a39320bb --- /dev/null +++ b/include/Structure/Structure.hpp @@ -0,0 +1,112 @@ +// +// Created by 盧威任 on 1/30/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_HPP +#include "GameObjectID.hpp" +#include "HighLight.h" + +#include "Selectable.hpp" + +#include "Util/GameObject.hpp" +#include "Util/Image.hpp" +#include "Util/Input.hpp" +#include "Util/TransformUtils.hpp" +#include "glm/glm.hpp" +#define DEFAULT_ZINDEX 15 +#define CHEAT 0.1F + +class Structure : public Util::GameObject, public Selectable { + +public: + enum class updateMode { Invisidable, Moveable, Fixed }; + Structure() + : electricPower(100.F), + buildingTime(100.F), + buildingCost(100.F), + buildingHp(100.F), + m_ID(GameObjectID(unitType::null, HouseType::NONE)) { + m_CurrentState = updateMode::Invisidable; + }; + + Structure(float electricPower, float buildingTime, float buildingCost, + float buildingHp, GameObjectID id) + : electricPower(electricPower), + buildingTime(buildingTime), + buildingCost(buildingCost), + buildingHp(buildingHp), + m_ID(id) { + m_Transform.scale = {1, 1}; + // this->SetZIndex(DEFAULT_ZINDEX); + }; + + ~Structure(){}; + + void Update() override; + virtual void updateFixed(); + virtual void updateMoveable(); + virtual void updateInvinsible(); + + void Start() override; + updateMode GetCurrentUpdateMode() const { return m_CurrentState; }; + void SetCurrentUpdateMode(updateMode mode) { m_CurrentState = mode; }; + virtual void SetObjectLocation(glm::vec2 location); + glm::vec2 GetObjectLocation() { return this->ObjectLocation; } + glm::vec2 GetTranScale() { return m_Transform.scale; }; + virtual void SetAttachVisible(bool visible); + glm::vec2 GetDrawLocation() { return DrawLocation; }; + void SetID(GameObjectID id) { m_ID = id; }; + + static glm::vec2 ChangeToCell(glm::vec2 location); + void onSelected() override; + virtual void attachmentUpdate(); // this function now will update + // attachment's location and draw as + // well + bool getBuilt() { + if (m_CurrentState == updateMode::Fixed) { + return true; + } else { + return false; + } + } + /* + void SetElectricPower(float electricPower); + void SetBuildingTime(float buildingTime); + void SetBuildingCost(float buildingCost); + void SetBuildingHp(float buildingHp); + void DecreaseElectricPower(float Power); + void IncreaseBuildingTime(float Time); + void DecreaseBuildingCost(float Cost); + */ + + void DecreaseHp(float Hp); + + float GetElectricPower(); + float GetBuildingTime(); + float GetBuildingCost(); + virtual float GetBuildingIncome() { return buildingIncome; }; + void SetBuildingIncome(float income) { buildingIncome = income; } + float GetBuildingHp(); + GameObjectID GetID() { return m_ID; } + +// void importMap(std::shared_ptr map){m_Map=map;} +private: + updateMode m_CurrentState = updateMode::Invisidable; + glm::vec2 ObjectLocation = {100, 100}; + glm::vec2 DrawLocation = {ObjectLocation.x + CELL_SIZE.x, + ObjectLocation.y + CELL_SIZE.y}; + float electricPower; + float buildingTime; + float buildingCost; + float buildingHp; + float buildingIncome = 0.F; + HighLight m_HighLight; + GameObjectID m_ID; + +protected: +// std::shared_ptr m_Map; + bool b_selectingNewWayPoint = false; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_HPP diff --git a/include/Structure/WarFactory.hpp b/include/Structure/WarFactory.hpp new file mode 100644 index 00000000..0f883356 --- /dev/null +++ b/include/Structure/WarFactory.hpp @@ -0,0 +1,17 @@ +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_WarFactory_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_STRUCTURE_WarFactory_HPP + +#include "WayPointStructure.hpp" +class WarFactory : public WayPointStructure { + +public: + WarFactory(float electricPower = -30.F, float buildingTime = 100.F, + float buildingCost = 2000.F, float buildingHp = 1000.F, + HouseType house = HouseType::NONE) + : WayPointStructure(electricPower, buildingTime, buildingCost, + buildingHp, + GameObjectID(unitType::WAR_FACT, house)){}; + void Start() override; +}; + +#endif diff --git a/include/Structure/WayPoint.hpp b/include/Structure/WayPoint.hpp new file mode 100644 index 00000000..003172f4 --- /dev/null +++ b/include/Structure/WayPoint.hpp @@ -0,0 +1,26 @@ +// +// Created by nudle on 2024/3/3. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_WAYPOINT_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_WAYPOINT_HPP +#include "Util/GameObject.hpp" +#include "Util/Image.hpp" +#include "Util/TransformUtils.hpp" +class WayPoint : public Util::GameObject { +private: + glm::vec2 ObjectLocation; + +public: + WayPoint() + : Util::GameObject() { + m_Transform.scale = {1, 1}; + }; + void Update(const Util::Transform &transform = Util::Transform()) override; + + void Start() override{ + /*SetDrawable(std::make_unique("../assets/sprites/flag.png"));*/}; + void SetObjectLocation(glm::vec2 location); + glm::vec2 GetObjectLocation() { return this->ObjectLocation; } +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_WAYPOINT_HPP diff --git a/include/Structure/WayPointStructure.hpp b/include/Structure/WayPointStructure.hpp new file mode 100644 index 00000000..3ceb1d49 --- /dev/null +++ b/include/Structure/WayPointStructure.hpp @@ -0,0 +1,41 @@ +// +// Created by 盧威任 on 3/26/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_MOVEABLESTRUCTURE_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_MOVEABLESTRUCTURE_HPP +#include "Grid.hpp" +#include "HighLight.h" +#include "Line.hpp" +#include "Structure/IWayPointStructure.hpp" +#include "Structure/Structure.hpp" +#include "Util/Image.hpp" +#include "Util/Input.hpp" +#include "Util/Keycode.hpp" +#include "WayPoint.hpp" + +class WayPointStructure : public Structure, public IWayPointStructure { +protected: + std::shared_ptr m_wayPoint = std::make_shared(); + HighLight m_HighLight; + bool b_select = true; + Grid m_Grid; + Line m_Line; + std::vector m_lineVector; + +public: + WayPointStructure(float electricPower = -10.F, float buildingTime = 10.F, + float buildingCost = 20.F, float buildingHp = 90.F, + GameObjectID id = GameObjectID(unitType::null, + HouseType::NONE)) + : Structure(electricPower, buildingTime, buildingCost, buildingHp, + id){}; + virtual ~WayPointStructure(){}; + + virtual void onSelected() override; + virtual void SetAttachVisible(bool visible) override; + + virtual void updateMoveable() override; + virtual void attachmentUpdate() override; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_MOVEABLESTRUCTURE_HPP diff --git a/include/UI/UI.hpp b/include/UI/UI.hpp new file mode 100644 index 00000000..9fe9df2c --- /dev/null +++ b/include/UI/UI.hpp @@ -0,0 +1,122 @@ +// +// Created by 盧威任 on 3/3/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_UI_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_UI_HPP +#include "Camera.hpp" +#include "GameObjectID.hpp" +#include "GameObjectManager.hpp" +#include "Player.hpp" +#include "SpriteSheet.hpp" +#include "UI/UIScriptProcess.hpp" +#include "imgui/imgui.h" +#include "imgui/imgui_impl_opengl3.h" +#include "imgui/imgui_impl_sdl2.h" +#include "pch.hpp" +#include + +class UIClass { +public: + void Start(); + void Update(); + + static unsigned int getUnitConstructCount(unitType type) { + return s_unitConstructCount[type]; + } + static void setUnitConstructCount(unitType type, int value) { + s_unitConstructCount[type] += value; + } + static void resetUnitConstructCount(unitType type) { + s_unitConstructCount[type] = 0; + } + + std::unique_ptr getSelectedBuilding(); + bool + getIfAnyBuildingReadyToBuild(); // 避免Scene收到空的getSelectedBuilding + + std::shared_ptr getUnitFromUI(); + bool getIfUnitReadyToSpawn(){return ButtonScript.getIfReadytoSpawn();} + void setIfUnitReadyToSpawn(bool b){ButtonScript.setIfReadytoSpawn(b);} + + //import from scene + void importMap(std::shared_ptr m_Map){this->m_Map=m_Map;} + void importPlayer(std::shared_ptr m_Player){this->m_Player=m_Player; ButtonScript.importPlayer(m_Player);} + void importGameObjManager(std::shared_ptr gameObjectManager){ + m_gameObjectManager=gameObjectManager; + ButtonScript.importGameObjManager(gameObjectManager); + } + //check if building has built + void checkExistBuilding(std::vector> buildingList); +private: + UIScriptProcess ButtonScript; + void InitUnitQueue(); + void ShowCursorSelectionRegion(ImVec2 *start_pos, ImVec2 *end_pos, + ImGuiMouseButton mouse_button); + void ShowPlayerConstructionMenu(); + void ShowHeaderSection(); + void ShowBuildingTab(); + void ShowInfantryTab(); + void ShowDefTab(); + void ShowVehTab(); + + std::vector + getSpriteSheetCoordByIndex(std::shared_ptr spritesheet, + int index); + + std::shared_ptr m_image = + std::make_shared("../assets/sprites/p05.png"); + bool + getImageButtonBySpriteSheetIndex(std::shared_ptr spritesheet, + int index); + + std::shared_ptr m_StructureIconSpriteSheet = + std::make_shared(); + std::shared_ptr m_InfantryIconSpriteSheet = + std::make_shared(); + std::shared_ptr m_VehiclesIconSpriteSheet = + std::make_shared(); + + static std::unordered_map s_unitConstructCount; + Grid m_Grid; + glm::vec2 m_GridSize = {100, 100}; + + // 0318 + bool getIfSelectToBuild(unitType type); + void setSelectToBuild(unitType type); + bool selectLock(); + + ImGuiIO &io = ImGui::GetIO(); + + ImFont *sacker_med = io.Fonts->AddFontFromFileTTF( + "../assets/fonts/sackersgothicstd-medium.otf", 100); + ImFont *sacker_heav = io.Fonts->AddFontFromFileTTF( + "../assets/fonts/sackersgothicstd-heavy.otf", 100); + ImFont *sacker_light = io.Fonts->AddFontFromFileTTF( + "../assets/fonts/sackersgothicstd-light.otf", 100); + + bool b_Baracks = false; + bool b_OreRefinery = false; + bool b_PowerPlants = false; + bool b_WarFactory = false; + bool b_ADVPowerPlant = false; + bool b_SelectToBuild = false; + + bool b_barackBuilt = false; + bool b_warfactoryBuilt = false; + bool b_orerefineryBuilt = false; + + glm::vec2 m_barrackCell; + glm::vec2 m_barrackTargetCell; + glm::vec2 m_warfactoryCell; + glm::vec2 m_warfactoryTargetCell; + glm::vec2 m_orerefineryCell; + glm::vec2 m_orerefineryTargetCell; + + //ptr import from scene + std::shared_ptr m_Map; + std::shared_ptr m_Player; + std::shared_ptr m_gameObjectManager; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_UI_HPP diff --git a/include/UI/UIScriptProcess.hpp b/include/UI/UIScriptProcess.hpp new file mode 100644 index 00000000..80b62e53 --- /dev/null +++ b/include/UI/UIScriptProcess.hpp @@ -0,0 +1,115 @@ +// +// Created by nudle on 2024/3/8. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_UISCRIPTPROCESS_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_UISCRIPTPROCESS_HPP +#include "GameObjectID.hpp" +#include "GameObjectManager.hpp" +#include "Player.hpp" +#include "Structure/AdvencePowerPlants.hpp" +#include "Structure/Barracks.hpp" +#include "Structure/OreRefinery.hpp" +#include "Structure/PowerPlants.hpp" +#include "Structure/Structure.hpp" +#include "Structure/WarFactory.hpp" +#include "Unit/Avatar.hpp" +#include "Unit/Infantry.hpp" +#include "Util/GameObject.hpp" +#include +#include +#include + +class UIScriptProcess { +private: + std::shared_ptr m_player; + std::shared_ptr m_gameObjectManager; + + // building + bool b_Baracks = false; + bool b_OreRefinery = false; + bool b_PowerPlants = false; + bool b_WarFactory = false; + bool b_ADVPowerPlant = false; + + float m_buildCoolDownTime = 0.F; + float m_offPowerBuildCoolDownTime = 0.F; + unitType m_currentStructureType; + bool b_isBuildingInCoolDown = false; + std::deque m_buildQueue; + std::chrono::time_point m_buildStartTime; + std::chrono::time_point m_buildTempTime; + std::chrono::time_pointm_currentCountDownTime; + float m_lastBuildElapsed=0.F; + int m_currentBuildRemainingCost=0; + // building end + + // avatar + bool b_isReadyToSpawn = false; + float m_spawnCoolDownTime = 0.F; + float m_offPowerSpawnCoolDownTime = 0.F; + unitType m_currentAvatarType; + bool b_isSpawningInCooldown= false; + std::deque m_spawnQueue; + std::chrono::time_point m_SpawnStartTime; + std::chrono::time_point m_SpawnTempTime; + float m_lastSpawnElapsed=0.F; + int m_currentSpawnRemainingCost=0; + // avatar end + +public: + UIScriptProcess(){}; + ~UIScriptProcess(){}; + + //Getter/Setter + bool GetIfFinished(unitType type); + int GetObjCost(unitType type); + // if b_isBuildingInCoolDown==false not currently building + // true currently is building + void SetSTALL(bool value) { b_isBuildingInCoolDown = value; }; + /* + * false for used, true for finished + */ + void SetIfFinished(unitType type, bool value); + float GetCDLeft(); + std::string GetFormattedCD(); + + // Event + void AddToBuildQueue(unitType type); + void AddToSpawnQueue(unitType type); + void Update(bool queueContinue); + + // CountDown + void SetBuildCountDown(float time); + void SetSpawnCountDown(float time); + float GetBuildCountDownTime(); + float GetSpawnCountDownTime(); + void CountDown(); + + // transform to ptr + float GetStructureTime(unitType type); + float GetSpawnTime(unitType type); + + unitType GetCurrentStructure() { return m_currentStructureType; }; + + // spawn unit + std::shared_ptr spawnAvatar(); + bool getIfReadytoSpawn(){return b_isReadyToSpawn;} + void setIfReadytoSpawn(bool b){b_isReadyToSpawn=b;} + + //import from scene + void importPlayer(std::shared_ptr player){m_player=player;} + void importGameObjManager(std::shared_ptr gameObjectManager){m_gameObjectManager=gameObjectManager;} + +private: + std::shared_ptr barracks = std::make_shared(); + std::shared_ptr oreRefinery = std::make_shared(); + std::shared_ptr powerPlant = std::make_shared(); + std::shared_ptr warFactory = std::make_shared(); + std::shared_ptr advPowerPlant = + std::make_shared(); + std::vector> StructureArray = { + barracks, oreRefinery, powerPlant, warFactory, advPowerPlant, + }; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_UISCRIPTPROCESS_HPP diff --git a/include/Unit/AttackAndDamageUnit.hpp b/include/Unit/AttackAndDamageUnit.hpp new file mode 100644 index 00000000..acd654e3 --- /dev/null +++ b/include/Unit/AttackAndDamageUnit.hpp @@ -0,0 +1,36 @@ +// +// Created by 盧威任 on 3/22/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_ATTACKANDDAMAGEUNIT_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_ATTACKANDDAMAGEUNIT_HPP +#include "Weapon.hpp" + +class AttackAndDamageUnit { +public: + AttackAndDamageUnit() {} + virtual ~AttackAndDamageUnit() {} + + int getHP() { return m_HP; } + + void setHP(int hp) { m_HP = hp; } + + void takeDamage(int softattack, int hardattack) { + + m_HP -= (100 - m_ArmorRate) * (1 / 100) * softattack + + m_ArmorRate * (1 / 100) * hardattack; + } + + void ForceAttackUnit(std::shared_ptr target) { + // cd time + target->takeDamage(m_Weapon.getSoftAttack(), m_Weapon.getHardAttack()); + return; + } + +private: + int m_HP; + Weapon m_Weapon; + float m_ArmorRate; +}; + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_ATTACKANDDAMAGEUNIT_HPP diff --git a/include/Unit/Avatar.hpp b/include/Unit/Avatar.hpp new file mode 100644 index 00000000..7eeadceb --- /dev/null +++ b/include/Unit/Avatar.hpp @@ -0,0 +1,131 @@ +// +// Created by nudle on 2024/3/15. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_DUMMY_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_DUMMY_HPP +#include "Map/MapUtility.hpp" +#include "Unit/AttackAndDamageUnit.hpp" +#include "Unit/PathfindingUnit.hpp" +enum class UnitMode { DEAD, MOVE, IDLE, MOVE_ATTACK, ALIVE }; +class Avatar : public PathfindingUnit, public AttackAndDamageUnit { + +protected: + std::shared_ptr m_Image; + +private: + bool b_SelectedByCursor = true; + bool b_justStarted = true; + UnitMode m_currentMode; + +public: + Avatar(){}; + ~Avatar() override{}; + + virtual void Start(glm::vec2 destination) { // destination = Barrack's + // waypointLocation + // setCurrentCell() //CurrentCell = Structure's Location + this->SetDrawable(customizeImage()); + SetVisible(true); + m_grid.SetActivate(true); + setCurrentCell(destination); + setNextCell(destination); + setNewDestination(getCurrentCell()); + + setMovementSpeed(4); + } + virtual void aliveUpdate() { + if (walkTowardNextCell() || b_justStarted) { + b_justStarted = false; + setCurrentCell( + MapUtil::GlobalCoordToCellCoord(getCurrentLocation())); + // setCurrentDir(m_wayPointUnit.getFirstCellDir()); + setNextCell(getNextCellByCurrent(getCurrentDir(), getNextCell())); + printf("(aliveUpdate) getting new dir\n"); + } + // m_wayPointUnit.Update(); + m_Transform.translation = getCurrentLocation(); + Draw(); + cursorSetNewDest(); + printf("-----------------------------\n"); + } + virtual void customizeUpdate() {} + virtual std::shared_ptr customizeImage() { + return std::make_unique("../assets/sprites/capybara.png"); + } + virtual void Update() override { + switch (m_currentMode) { + case (UnitMode::DEAD): { + SetVisible(false); + } + case (UnitMode::MOVE): { + aliveUpdate(); + } + case (UnitMode::MOVE_ATTACK): { + aliveUpdate(); + customizeUpdate(); + } + // attack + } + } + void setNewDestination(glm::vec2 destination) { + setDestinationCell(destination.x, destination.y); + } + void cursorSetNewDest() { + if (b_SelectedByCursor && + Util::Input::IsKeyPressed(Util::Keycode::MOUSE_RB)) { + this->setNewDestination( + MapUtil::GlobalCoordToCellCoord(MapUtil::ScreenToGlobalCoord( + Util::Input::GetCursorPosition()))); + } + } + float getDistance(glm::vec2 cell) { + return sqrt(pow(cell.x - getCurrentCell().x, 2) + + pow(cell.y - getCurrentCell().y, 2)); + } + + UnitMode getUnitMode() { return m_currentMode; } + void setUnitMode(UnitMode mode) { m_currentMode = mode; } + + void DEBUG_printCurrentMoveDirection(MoveDirection Dir) { + switch (Dir) { + case MoveDirection::RIGHT: { + printf("(DEBUG)Avatar DIR:Right\n"); + break; + } + case MoveDirection::LEFT: { + printf("(DEBUG)Avatar DIR:Left\n"); + break; + } + case MoveDirection::UP: { + printf("(DEBUG)Avatar DIR:Up\n"); + break; + } + case MoveDirection::DOWN: { + printf("(DEBUG)Avatar DIR:Down\n"); + break; + } + case MoveDirection::UP_RIGHT: { + printf("(DEBUG)Avatar DIR:Up_Right\n"); + break; + } + case MoveDirection::DOWN_LEFT: { + printf("(DEBUG)Avatar DIR:Down_Left\n"); + break; + } + case MoveDirection::DOWN_RIGHT: { + printf("(DEBUG)Avatar DIR:Down_Right\n"); + break; + } + case MoveDirection::UP_LEFT: { + printf("(DEBUG)Avatar DIR:Up_Left\n"); + break; + } + case MoveDirection::IDLE: { + printf("(DEBUG)Avatar DIR:IDLE\n"); + break; + } + } + } +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_DUMMY_HPP diff --git a/include/Unit/FindValidPathToDest.hpp b/include/Unit/FindValidPathToDest.hpp new file mode 100644 index 00000000..1e86b998 --- /dev/null +++ b/include/Unit/FindValidPathToDest.hpp @@ -0,0 +1,231 @@ +// +// Created by nudle on 2024/3/15. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_FINDVALIDPATHTODEST_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_FINDVALIDPATHTODEST_HPP +#include "Map/Map.hpp" +#include "Map/MapUtility.hpp" +#include "Unit/PathfindingUnit.hpp" +#include +class FindValidPathToDest : public PathfindingUnit { +private: + std::shared_ptr m_Map = std::make_shared(); + std::deque m_dirQue; + bool b_InitNewLine = false; + +public: + enum class Side { R, L }; + FindValidPathToDest() + : PathfindingUnit() { + setMovementSpeed(48); + }; + virtual ~FindValidPathToDest() override{}; + void Start(std::shared_ptr map) { m_Map = map; } + MoveDirection getFirstCellDir() { + if (!m_dirQue.empty()) { + MoveDirection front = m_dirQue.front(); + m_dirQue.pop_front(); + return front; + } + + return MoveDirection::IDLE; + } + + void resetQueue() { + b_InitNewLine = true; + this->m_dirQue.clear(); + this->m_lineVector.clear(); + } + Side randomlyChooseSide() { + // Create a random number generator engine + std::random_device rd; // Obtain a random seed from the hardware + std::mt19937 gen(rd()); // Initialize the Mersenne Twister + // pseudo-random number generator + + // Define a distribution (uniform distribution in this case) + std::uniform_int_distribution distribution( + 0, 1); // Uniform distribution between 1 and 6 (inclusive) + + // Generate a random number + int random_number = distribution(gen); // Generate a random number using + // the generator and distribution + + switch (random_number) { + case 0: + return Side::R; + case 1: + return Side ::L; + } + } + + MoveDirection getDirIfObstacle(MoveDirection ogDir, Side side) { + + // please be notice that the "Side's" R or L represent its facing + // direction + MoveDirection newdir; + switch (ogDir) { + case MoveDirection::RIGHT: { + if (side == Side::R) { + newdir = MoveDirection::DOWN_RIGHT; + } else if (side == Side::L) { + newdir = MoveDirection::UP_RIGHT; + } + } break; + + case MoveDirection::LEFT: { + if (side == Side::R) { + newdir = MoveDirection::UP_LEFT; + } else if (side == Side::L) { + newdir = MoveDirection::DOWN_LEFT; + } + break; + } + case MoveDirection::UP: { + if (side == Side::R) { + newdir = MoveDirection::UP_RIGHT; + } else if (side == Side::L) { + newdir = MoveDirection::UP_LEFT; + } + break; + } + case MoveDirection::DOWN: { + if (side == Side::R) { + newdir = MoveDirection::DOWN_LEFT; + } else if (side == Side::L) { + newdir = MoveDirection::DOWN_RIGHT; + } + break; + } + case MoveDirection::UP_RIGHT: { + if (side == Side::R) { + newdir = MoveDirection::RIGHT; + } else if (side == Side::L) { + newdir = MoveDirection::UP; + } + break; + } + case MoveDirection::DOWN_LEFT: { + if (side == Side::R) { + newdir = MoveDirection::LEFT; + } else if (side == Side::L) { + newdir = MoveDirection::DOWN; + } + break; + } + case MoveDirection::DOWN_RIGHT: { + if (side == Side::R) { + newdir = MoveDirection::DOWN; + } else if (side == Side::L) { + newdir = MoveDirection::RIGHT; + } + break; + } + case MoveDirection::UP_LEFT: { + if (side == Side::R) { + newdir = MoveDirection::UP; + } else if (side == Side::L) { + newdir = MoveDirection::LEFT; + } + break; + } + case MoveDirection::IDLE: { + printf("Direction debug didn't move\n"); + break; + } + + return newdir; + } + } + + void findPath(glm::vec2 destination) { + // what if desintation is not walkable + setDestinationCell(destination); + Side whichSideToTouch = randomlyChooseSide(); + std::shared_ptr dirToTouch = nullptr; + while (getCurrentCell() != getDestinationCell()) { + + if (m_Map + ->getTileByCellPosition( + glm::vec2(getNextCell().x, getNextCell().y)) + ->getWalkable()) { + // move current to next cell + setCurrentCell(getNextCell()); + m_dirQue.push_back(getCurrentDir()); + setCurrentDir(getDirByRelativeCells(getCurrentCell(), + getDestinationCell())); + + // set next + setNextCell( + getNextCellByCurrent(getCurrentDir(), getNextCell())); + + m_lineVector.push_back( + Line(MapUtil::CellCoordToGlobal(getCurrentCell()), + MapUtil::CellCoordToGlobal(getNextCell()))); + whichSideToTouch = randomlyChooseSide(); + // dirToTouch = nullptr; + } else { + if (dirToTouch == nullptr) { + dirToTouch = std::make_shared( + getDirIfObstacle(getDirByRelativeCells(getCurrentCell(), + getNextCell()), + whichSideToTouch)); + } else { + dirToTouch = std::make_shared( + getDirIfObstacle(*dirToTouch, whichSideToTouch)); + } + + setCurrentDir(*dirToTouch); + setNextCell( + getNextCellByCurrent(*dirToTouch, getCurrentCell())); + // setCurrentCell(getNextCell()); + // not walkable + // select one direction (left or right) using one of + // several heuristics advance in the said direction + // keeping your left/right hand touching the obstacle's + // wall when you can advance in a straight line towards + // the target again, do so + + // getNextCellObstacle(randomlyChooseSide(), + // nextCellClear); + } + } + /* + while (getCurrentCell().x != getDestinationCell().x && + getCurrentCell().y != getDestinationCell().y) { + // printf("(FindValidPathToDest)destination : + {%.0f,%.0f}\n", getDestinationCell().x, getDestinationCell().y); + // printf( + "(FindValidPathToDest)finding : %d\n " + "(FindValidPathToDest)Cell " + "now " + ":{%.0f,%.0f}\n(FindValidPathToDest)Cell next : " + "{%.0f,%.0f}\n", + // count++, getCurrentCell().x, + getCurrentCell().y, + // getNextCell().x, getNextCell().y); + setCurrentCell(getNextCell()); + m_dirQue.push_back(getCurrentDir()); + findNextCellDir(); + UpdateNextCell(); + m_lineVector.push_back( + Line(MapClass::CellCoordToGlobal(getCurrentCell()), + MapClass::CellCoordToGlobal(getNextCell()))); + + } +*/ + // draw lines + if (b_InitNewLine && getCurrentCell().x == getDestinationCell().x && + getCurrentCell().y == getDestinationCell().y) { + b_InitNewLine = false; + if (!m_lineVector.empty()) { + m_grid.Start(m_lineVector); + } + } + m_grid.SetActivate(true); + } + virtual void Update() override { + m_grid.DrawUsingCamera(m_emptyTrans, defaultZIndex); + } +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_FINDVALIDPATHTODEST_HPP diff --git a/include/Unit/Hunter.hpp b/include/Unit/Hunter.hpp new file mode 100644 index 00000000..a5eb938d --- /dev/null +++ b/include/Unit/Hunter.hpp @@ -0,0 +1,23 @@ +// +// Created by nudle on 2024/3/28. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_HUNTER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_HUNTER_HPP +#include "Avatar.hpp" +#include "Runner.hpp" + +#define ATTACK_RANGE 7 + +class Hunter:public Avatar{ +private: + std::shared_ptr m_target; + glm::vec2 lastTargetCell; + +public: + void setTarget(std::shared_ptr m_target){this->m_target=m_target;} + std::shared_ptr customizeImage()override{ return std::make_unique("../assets/sprites/Hunter.png");} + void customizeUpdate() override; + void attack(std::shared_ptr attackTarget){}; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_HUNTER_HPP diff --git a/include/Unit/Infantry.hpp b/include/Unit/Infantry.hpp new file mode 100644 index 00000000..22cf0d1b --- /dev/null +++ b/include/Unit/Infantry.hpp @@ -0,0 +1,18 @@ +// +// Created by nudle on 2024/3/22. +// +#include "Unit/Avatar.hpp" +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_INFANTRY_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_INFANTRY_HPP + +class Infantry : public Avatar { +public: + Infantry() + : Avatar() { + // setHp(50); + setMovementSpeed(4); + } + +private: +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_INFANTRY_HPP diff --git a/include/Unit/PathfindingUnit.hpp b/include/Unit/PathfindingUnit.hpp new file mode 100644 index 00000000..5ad87f8e --- /dev/null +++ b/include/Unit/PathfindingUnit.hpp @@ -0,0 +1,96 @@ +// +// Created by nudle on 2024/3/15. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_PATHFINDINGUNIT_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_PATHFINDINGUNIT_HPP +#include "Grid.hpp" +#include "Line.hpp" +#include "Map/Tile.hpp" +#include "Util/GameObject.hpp" +#include "Util/Transform.hpp" +#include "glm/glm.hpp" + +#define SPEED 1 + +class PathfindingUnit : public Util::GameObject { +protected: + enum class MoveDirection { + UP, + UP_RIGHT, + UP_LEFT, + RIGHT, + LEFT, + DOWN_RIGHT, + DOWN_LEFT, + DOWN, + IDLE + }; + + Util::Transform m_emptyTrans; + Line m_line; + Grid m_grid; + std::vector m_lineVector; + float defaultZIndex = 15; + // debug :DEAD +private: + glm::vec2 m_destinationCell; + glm::vec2 m_nextCell; + glm::vec2 m_currentCell; + glm::vec2 m_currentLocation; + + MoveDirection m_currentDir = MoveDirection::IDLE; + + float m_MovementSpeed = 1.F; + + int moveDistance = 0; + +public: + PathfindingUnit() { + m_Transform.scale = {0.1, 0.1}; + m_ZIndex = defaultZIndex; + }; + virtual ~PathfindingUnit(){}; + + void setDestinationCell(int x, int y) { + this->m_destinationCell = {glm::vec2(x, y)}; + } + void setDestinationCell(glm::vec2 cell) { this->m_destinationCell = cell; } + glm::vec2 getDestinationCell() { return m_destinationCell; } + + void setCurrentCell(glm::vec2 cell) { + this->m_currentCell = glm::vec2(cell); + // MapClass::CellCoordToGlobal(m_currentCell); + glm::vec2 temp( + int(this->m_currentCell.x * CELL_SIZE.x) + 0.5 * CELL_SIZE.x, + int(this->m_currentCell.y * CELL_SIZE.y) + 0.5 * CELL_SIZE.y); + // m_currentLocation={temp.x+CELL_SIZE.x/2,temp.y+CELL_SIZE.y/2}; + m_currentLocation = {temp.x, temp.y}; + } + glm::vec2 getCurrentCell() { return m_currentCell; } + + void setNextCell(glm::vec2 cell) { this->m_nextCell = glm::vec2(cell); } + glm::vec2 getNextCell() { return m_nextCell; } + + glm::vec2 getCurrentLocation() { return m_currentLocation; } + + void setMovementSpeed(int speed) { this->m_MovementSpeed = speed; } + + MoveDirection getCurrentDir() { return m_currentDir; } + void setCurrentDir(MoveDirection direction) { m_currentDir = direction; } + + MoveDirection getDirByRelativeCells(glm::vec2 currentcell, + glm::vec2 destinationcell); + // void findNextCellDir(MoveDirection lastDir, int times); + glm::vec2 getNextCellByCurrent(MoveDirection currentdir, + glm::vec2 currentcell); + // bool UpdateNextCell(int *times); + bool walkTowardNextCell(); + + virtual void Start() {} + virtual void Update() { + m_Transform.translation = getCurrentLocation(); + Draw(); + } +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_PATHFINDINGUNIT_HPP diff --git a/include/Unit/Runner.hpp b/include/Unit/Runner.hpp new file mode 100644 index 00000000..784cab8e --- /dev/null +++ b/include/Unit/Runner.hpp @@ -0,0 +1,31 @@ +// +// Created by nudle on 2024/3/28. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_RUNNER_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_RUNNER_HPP +#include "Avatar.hpp" +#define ATTACK_RANGE 7 + +class Runner : public Avatar{ +private: + bool b_beingChase= false; + + std::shared_ptr m_hunter; + glm::vec2 lastTargetCell; + std::vector dictionary = { + MoveDirection::UP, MoveDirection::UP_RIGHT, + MoveDirection::RIGHT, MoveDirection::DOWN_RIGHT, + MoveDirection::DOWN, MoveDirection::DOWN_LEFT, + MoveDirection::LEFT, MoveDirection::UP_LEFT}; + enum class runMode{REASONABLE,LIDL_RANDOM,FULL_RANDOM}; + int edgeCount=0; +public: + void setBeingChase(std::shared_ptr hunter); + std::shared_ptr customizeImage()override{ return std::make_unique("../assets/sprites/Runner.png");} + void customizeUpdate()override; + MoveDirection findNewDir(MoveDirection Dir,int edgeCount); + MoveDirection oppositeDir(MoveDirection Dir,runMode mode); + glm::vec2 getNextCellByCurrentPlus3(MoveDirection currentdir,glm::vec2 currentcell,int n,int m) ; +}; +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_RUNNER_HPP diff --git a/include/Unit/Weapon.hpp b/include/Unit/Weapon.hpp new file mode 100644 index 00000000..4a669c7f --- /dev/null +++ b/include/Unit/Weapon.hpp @@ -0,0 +1,61 @@ +// +// Created by 盧威任 on 3/23/24. +// + +#ifndef PRACTICALTOOLSFORSIMPLEDESIGN_WEAPON_HPP +#define PRACTICALTOOLSFORSIMPLEDESIGN_WEAPON_HPP +#include +enum class WeaponType { + COLT_45, + M16, + Fireball, + Art_75mm, + Art_90mm, + Art_105mm, + Art_120mm, + Nuke, + Grenade +}; + +class Weapon { +public: + Weapon() {} + Weapon(float firerate, float firerange, float softattack, float hardattack, + WeaponType weapon) {} + ~Weapon() {} + // Getter and setter methods for m_fireRate + static float getFireRate() { return m_FireRate; } + + static void setFireRate(float fireRate) { m_FireRate = fireRate; } + + // Getter and setter methods for m_fireRange + static float getFireRange() { return m_FireRange; } + + static void setFireRange(float fireRange) { m_FireRange = fireRange; } + + // Getter and setter methods for m_SoftAttack + static float getSoftAttack() { return m_SoftAttack; } + + static void setSoftAttack(float softAttack) { m_SoftAttack = softAttack; } + + // Getter and setter methods for m_HardAttack + static float getHardAttack() { return m_HardAttack; } + + static void setHardAttack(float hardAttack) { m_HardAttack = hardAttack; } + + // Getter and setter methods for m_Type + WeaponType getType() const { return m_Type; } + + void setType(WeaponType type) { m_Type = type; } + +private: + static float m_FireRate; + static float m_FireRange; + static float m_SoftAttack; + static float m_HardAttack; + WeaponType m_Type; +}; + +const Weapon COLT_45(180, 5.75, 100, 100, WeaponType::COLT_45); + +#endif // PRACTICALTOOLSFORSIMPLEDESIGN_WEAPON_HPP diff --git a/include/Util/AssetStore.inl b/include/Util/AssetStore.inl index 1562e6a4..7991b236 100644 --- a/include/Util/AssetStore.inl +++ b/include/Util/AssetStore.inl @@ -8,9 +8,11 @@ void AssetStore::Load(const std::string &filepath) { template T AssetStore::Get(const std::string &filepath) { + auto result = m_Map.find(filepath); if (result != m_Map.end()) { return result->second; + } Load(filepath); diff --git a/include/Util/BGM.hpp b/include/Util/BGM.hpp index b9691d6c..0490e748 100644 --- a/include/Util/BGM.hpp +++ b/include/Util/BGM.hpp @@ -1,10 +1,13 @@ #ifndef UTIL_BGM_HPP #define UTIL_BGM_HPP +#include "Util/AssetStore.hpp" #include "pch.hpp" // IWYU pragma: export + #include "Util/AssetStore.hpp" + namespace Util { /** * @class BGM @@ -110,8 +113,6 @@ class BGM { private: static Util::AssetStore> s_Store; -private: - std::shared_ptr m_BGM; }; } // namespace Util diff --git a/include/Util/CustomizableImage.hpp b/include/Util/CustomizableImage.hpp new file mode 100644 index 00000000..f6fe890e --- /dev/null +++ b/include/Util/CustomizableImage.hpp @@ -0,0 +1,126 @@ +#ifndef UTIL_CUSTOMIZABLEIMAGE_HPP +#define UTIL_CUSTOMIZABLEIMAGE_HPP + +#include "pch.hpp" // IWYU pragma: export + +#include +#include + +#include "Core/Drawable.hpp" +#include "Core/Texture.hpp" + +#include "Camera.hpp" +#include "Util/Logger.hpp" +#include "Util/Transform.hpp" +#include "Util/TransformUtils.hpp" + +namespace Util { +/** + * @class CustomizableImage + * @brief A class representing an image. + * + * This class encapsulates the properties and behaviors of an image. + * It includes properties such as texture and surface. + * It also includes behaviors such as drawing the image. + */ +class CustomizableImage : public Core::Drawable { +public: + /** + * @brief Constructor that takes a file path to the image. + * + * @param filepath The file path to the image. + + */ + explicit CustomizableImage(const std::string &filepath); + + /** + * @brief extra requried step to run Customizable Image, please run this! + * @param positionvertex defines the position of the image (default: {-0.5F, + 0.5F, // -0.5F, -0.5F, // 0.5F, -0.5F, // 0.5F, 0.5F,}) + * @param uv defines the inner coordinates of the image (default:{0.0F, + 0.0F, // 0.0F, 1.F, // 1.F, 1.F, // 1.F, 0.0F, //}) + * @param indexbuffer defines drawing sequences of the vertex (default:{0, + 1, 2, // 0, 2, 3, // + }) + */ + void Init(std::vector positionvertex, std::vector uv, + std::vector indexbuffer); + + /** + * @brief Retrieves the size of the image. + * + * This function returns the size of the image. + * comment: wierd.... + * @return The size of the image as a vec2(x, y). + */ + glm::vec2 GetSize() const override { return m_Size; }; + + /** + * @brief Sets the image to the specified file path. + * + * This function sets the image to the specified file path. + * + * @param filepath The file path to the image. + */ + void SetImage(const std::string &filepath); + + /** + * @brief Draws the image with a given transform and z-index. + * + * This function draws the image at the specified z-index and applies the + * given transform. + * + * @param transform The transform to apply to the image. + * @param zIndex The z-index at which to draw the image. + */ + + unsigned int getTextureID() { return m_Texture->GetTextureId(); } + + void Draw(const Util::Transform &transform, const float zIndex) override { + auto data = Util::ConvertToUniformBufferData(transform, m_Size, zIndex); + s_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + s_VertexArray->Bind(); + s_VertexArray->DrawTriangles(); + }; + + void SetIndex(std::vector index) { + s_VertexArray->SetIndexBuffer( + std::make_unique(index)); + } + + void DrawTest(int count, const Util::Transform &transform, + const float zIndex); + void DrawUsingCamera(const Util::Transform &transform, + const float zIndex) override; + + GLuint getGLuint() { return m_Texture->GetTextureId(); } + +private: + void InitProgram(); + void InitVertexArray(); + void InitUniformBuffer(); + + static constexpr int UNIFORM_SURFACE_LOCATION = 0; + + static std::unique_ptr s_Program; + static std::unique_ptr s_VertexArray; + static std::unique_ptr> s_UniformBuffer; + +private: + std::unique_ptr m_Texture = nullptr; + + std::string m_Path; + glm::vec2 m_Size; + + std::vector m_Uv; + std::vector m_PositionVertex; + std::vector m_IndexBuffer; +}; +} // namespace Util + +#endif // namespace Util diff --git a/include/Util/GameObject.hpp b/include/Util/GameObject.hpp index 2f7f1ddc..1a3b1aed 100644 --- a/include/Util/GameObject.hpp +++ b/include/Util/GameObject.hpp @@ -4,6 +4,7 @@ #include #include +#include "Camera.hpp" #include "Core/Drawable.hpp" #include "Util/Transform.hpp" @@ -34,15 +35,19 @@ class GameObject { * @param zIndex The z-index of the game object. * @param visible The visibility of the game object. * @param children The children of the game object. + * @param movingRelativeToCamera Whether the object can move relative to + * camera position */ GameObject(const std::shared_ptr &drawable, const float zIndex, const bool visible = true, const std::vector> &children = - std::vector>()) - : m_Drawable(drawable), + std::vector>(), + const bool movingRelativeToCamera = true) + : m_Drawable(std::move(drawable)), m_Children(children), m_ZIndex(zIndex), - m_Visible(visible) {} + m_Visible(visible), + m_MovingRelativeToCamera(movingRelativeToCamera) {} /** * @brief Copy constructor. @@ -123,6 +128,15 @@ class GameObject { */ void SetVisible(const bool visible) { m_Visible = visible; } + /** + * @brief Set the object can move relative to camera position + * + * @param movingRelativeToCamera The new status of moving + */ + void setMovingRelativeToCamera(const bool movingRelativeToCamera) { + m_MovingRelativeToCamera = movingRelativeToCamera; + }; + /** * @brief Add a child to the game object. * @@ -143,7 +157,12 @@ class GameObject { m_Children.end()); } - void Draw(); + virtual void Draw(); + + // should be removed + virtual void Start(){}; + virtual void Update(){}; + virtual void Update(const Util::Transform &transform){}; protected: std::shared_ptr m_Drawable = nullptr; @@ -151,6 +170,7 @@ class GameObject { float m_ZIndex = 0; bool m_Visible = true; + bool m_MovingRelativeToCamera = true; }; } // namespace Util #endif diff --git a/include/Util/Image.hpp b/include/Util/Image.hpp index 3a5bc2dd..6b4c0445 100644 --- a/include/Util/Image.hpp +++ b/include/Util/Image.hpp @@ -8,6 +8,9 @@ #include "Core/Drawable.hpp" #include "Core/Texture.hpp" + +#include "Camera.hpp" + #include "Util/AssetStore.hpp" #include "Util/Transform.hpp" @@ -33,7 +36,7 @@ class Image : public Core::Drawable { * @brief Retrieves the size of the image. * * This function returns the size of the image. - * + * comment: wierd.... * @return The size of the image as a vec2(x, y). */ glm::vec2 GetSize() const override { return m_Size; }; @@ -56,7 +59,12 @@ class Image : public Core::Drawable { * @param transform The transform to apply to the image. * @param zIndex The z-index at which to draw the image. */ + + unsigned int getTextureID() { return m_Texture->GetTextureId(); } + void Draw(const Util::Transform &transform, const float zIndex) override; + void DrawUsingCamera(const Util::Transform &transform, + const float zIndex) override; private: void InitProgram(); @@ -67,7 +75,9 @@ class Image : public Core::Drawable { static std::unique_ptr s_Program; static std::unique_ptr s_VertexArray; - static std::unique_ptr> s_UniformBuffer; + std::unique_ptr> m_UniformBuffer; + + static Util::AssetStore> s_Store; static Util::AssetStore> s_Store; diff --git a/include/Util/ImageArray.hpp b/include/Util/ImageArray.hpp new file mode 100644 index 00000000..30fdcbbb --- /dev/null +++ b/include/Util/ImageArray.hpp @@ -0,0 +1,92 @@ +#ifndef UTIL_IMAGEARRAY_HPP +#define UTIL_IMAGEARRAY_HPP + +#include "pch.hpp" // IWYU pragma: export +#include +#include +#include + +#include "Core/Drawable.hpp" +#include "Core/Texture.hpp" + +#include "Camera.hpp" +#include "Util/Logger.hpp" +#include "Util/Transform.hpp" + +namespace Util { +/** + * @class ImageArray + * @brief A class representing an image. + * + * This class encapsulates the properties and behaviors of an image. + * It includes properties such as texture and surface. + * It also includes behaviors such as drawing the image. + */ +class ImageArray : public Core::Drawable { +public: + /** + * @brief Constructor that takes a file path to the image. + * + * @param filepath The file path to the image. + */ + explicit ImageArray(const std::string &filepath, + const std::vector offset); + + /** + * @brief Retrieves the size of the image. + * + * This function returns the size of the image. + * comment: wierd.... + * @return The size of the image as a vec2(x, y). + */ + glm::vec2 GetSize() const override { return m_Size; }; + + /** + * @brief Sets the image to the specified file path. + * + * This function sets the image to the specified file path. + * + * @param filepath The file path to the image. + */ + void SetImage(const std::string &filepath); + + /** + * @brief Draws the image with a given transform and z-index. + * + * This function draws the image at the specified z-index and applies the + * given transform. + * + * @param transform The transform to apply to the image. + * @param zIndex The z-index at which to draw the image. + */ + + unsigned int getTextureID() { return m_Texture->GetTextureId(); } + + void Draw(const Util::Transform &transform, const float zIndex) override; + void DrawUsingCamera(const Util::Transform &transform, + const float zIndex) override; + + // should be deleted + int getHeight() { return 0; }; + int getWidth() { return 0; }; + +private: + void InitProgram(); + void InitVertexArray(std::vector offset); + void InitUniformBuffer(); + + static constexpr int UNIFORM_SURFACE_LOCATION = 0; + + static std::unique_ptr s_Program; + std::unique_ptr m_VertexArray; + std::unique_ptr> m_UniformBuffer; + +private: + std::unique_ptr m_Texture = nullptr; + std::vector m_Offset; + std::string m_Path; + glm::vec2 m_Size; +}; +} // namespace Util + +#endif diff --git a/include/Util/Input.hpp b/include/Util/Input.hpp index e26363f9..ffec96df 100644 --- a/include/Util/Input.hpp +++ b/include/Util/Input.hpp @@ -28,7 +28,9 @@ class Input { /** * @brief Retrieves the scroll distance of an element.\n * + * @details The scroll distance is the distance that the mouse wheel has + * been scrolled. The distance is expressed in multiples or fractions of * lines; for example, if the mouse wheel is rotated three lines downward, * the scroll distance is {-1.0F, 0.0F}. If the mouse wheel is rotated three @@ -66,29 +68,11 @@ class Input { static bool IsKeyPressed(const Keycode &key); /** - * @brief Check if a specific key is being pressed. - * - * This function checks whether the given key is currently being pressed. - * - * @param key The keycode of the key to check. - * - * @return true if `key` is currently pressed, false otherwise. - * - * @see Util::Keycode + * @brief Checks if the middle mouse Structure is currently pressed. + * @return true if the middle mouse Structure is currently pressed, false + * otherwise. */ static bool IsKeyDown(const Keycode &key); - - /** - * @brief Check if a specific key is being un-pressed. - * - * This function checks whether the given key is currently being un-pressed. - * - * @param key The keycode of the key to check. - * - * @return true if `key` is currently pressed, false otherwise. - * - * @see Util::Keycode - */ static bool IsKeyUp(const Keycode &key); /** @@ -142,7 +126,9 @@ class Input { static bool s_MouseMoving; static bool s_Exit; + static ImGuiIO s_Io; + }; } // namespace Util diff --git a/include/Util/SFX.hpp b/include/Util/SFX.hpp index 6659228a..51c847a3 100644 --- a/include/Util/SFX.hpp +++ b/include/Util/SFX.hpp @@ -1,10 +1,12 @@ #ifndef UTIL_SFX_HPP #define UTIL_SFX_HPP +#include "Util/AssetStore.hpp" #include "pch.hpp" // IWYU pragma: export #include "Util/AssetStore.hpp" + namespace Util { /** @@ -93,9 +95,8 @@ class SFX { private: static Util::AssetStore> s_Store; - -private: std::shared_ptr m_Chunk; + }; } // namespace Util diff --git a/include/Util/Text.hpp b/include/Util/Text.hpp index 965175fa..24a5d3c7 100644 --- a/include/Util/Text.hpp +++ b/include/Util/Text.hpp @@ -1,8 +1,8 @@ #ifndef UTIL_TEXT_HPP #define UTIL_TEXT_HPP +#include "Util/AssetStore.hpp" #include "pch.hpp" // IWYU pragma: export - #include #include "Core/Drawable.hpp" @@ -72,7 +72,8 @@ class Text : public Core::Drawable { static std::unique_ptr s_Program; static std::unique_ptr s_VertexArray; - static std::unique_ptr> s_UniformBuffer; + std::unique_ptr> m_UniformBuffer; + static Util::AssetStore> s_Store; // loads resources using `TTF_OpenFontRW` static Util::AssetStore> s_Store; diff --git a/include/Util/TransformUtils.hpp b/include/Util/TransformUtils.hpp index 543a6c43..4047fc95 100644 --- a/include/Util/TransformUtils.hpp +++ b/include/Util/TransformUtils.hpp @@ -22,6 +22,8 @@ namespace Util { */ Core::Matrices ConvertToUniformBufferData(const Util::Transform &transform, const glm::vec2 &size, float zIndex); +Core::Matrices ConvertToUniformBufferDataUsingCameraMatrix(const Util::Transform &transform, + const glm::vec2 &size, float zIndex); } // namespace Util diff --git a/include/config.hpp b/include/config.hpp index c9d68304..a9718642 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -22,4 +22,17 @@ constexpr Util::Logger::Level DEFAULT_LOG_LEVEL = Util::Logger::Level::DEBUG; */ constexpr unsigned int FPS_CAP = 60; +/** + * @brief Unit limit for player + */ + +constexpr unsigned int CAP_LIMIT = 200; + +/** + * @brief CELL_SIZE + */ +constexpr glm::vec2 CELL_SIZE = {48.F, 48.F}; + +const std::string PATH_TO_TEMPERAT_TILESET_YAML = "../assets/map/temperat.yaml"; + #endif diff --git a/include/imgui/imconfig.h b/include/imgui/imconfig.h new file mode 100644 index 00000000..d556cbaf --- /dev/null +++ b/include/imgui/imconfig.h @@ -0,0 +1,131 @@ +//----------------------------------------------------------------------------- +// DEAR IMGUI COMPILE-TIME OPTIONS +// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure. +// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions. +//----------------------------------------------------------------------------- +// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/rebased branch with your modifications to it) +// B) or '#define IMGUI_USER_CONFIG "my_imgui_config.h"' in your project and then add directives in your own file without touching this template. +//----------------------------------------------------------------------------- +// You need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include the imgui*.cpp +// files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures. +// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts. +// Call IMGUI_CHECKVERSION() from your .cpp file to verify that the data structures your files are using are matching the ones imgui.cpp is using. +//----------------------------------------------------------------------------- + +#pragma once + +//---- Define assertion handler. Defaults to calling assert(). +// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement. +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows +// Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility. +// DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() +// for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to clean your code of obsolete function/names. +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87+ disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This is automatically done by IMGUI_DISABLE_OBSOLETE_FUNCTIONS. + +//---- Disable all of Dear ImGui or don't implement standard windows/tools. +// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp. +//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty. +//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. +//#define IMGUI_DISABLE_DEBUG_TOOLS // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowIDStackToolWindow() will be empty. + +//---- Don't implement some functions to reduce linkage requirements. +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a) +//#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with Visual Studio] Implement default IME handler (require imm32.lib/.a, auto-link for Visual Studio, -limm32 on command-line for MinGW) +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a) +//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, IME). +//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default). +//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf) +//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself. +//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies) +//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function. +//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). +//#define IMGUI_DISABLE_SSE // Disable use of SSE intrinsics even if available + +//---- Include imgui_user.h at the end of imgui.h as a convenience +// May be convenient for some users to only explicitly include vanilla imgui.h and have extra stuff included. +//#define IMGUI_INCLUDE_IMGUI_USER_H +//#define IMGUI_USER_H_FILENAME "my_folder/my_imgui_user.h" + +//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another) +//#define IMGUI_USE_BGRA_PACKED_COLOR + +//---- Use 32-bit for ImWchar (default is 16-bit) to support Unicode planes 1-16. (e.g. point beyond 0xFFFF like emoticons, dingbats, symbols, shapes, ancient languages, etc...) +//#define IMGUI_USE_WCHAR32 + +//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version +// By default the embedded implementations are declared static and not available outside of Dear ImGui sources files. +//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h" +//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h" +//#define IMGUI_STB_SPRINTF_FILENAME "my_folder/stb_sprintf.h" // only used if IMGUI_USE_STB_SPRINTF is defined. +//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION +//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION +//#define IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION // only disabled if IMGUI_USE_STB_SPRINTF is defined. + +//---- Use stb_sprintf.h for a faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined) +// Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by stb_sprintf.h. +//#define IMGUI_USE_STB_SPRINTF + +//---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui) +// Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided). +// On Windows you may use vcpkg with 'vcpkg install freetype --triplet=x64-windows' + 'vcpkg integrate install'. +//#define IMGUI_ENABLE_FREETYPE + +//---- Use FreeType+lunasvg library to render OpenType SVG fonts (SVGinOT) +// Requires lunasvg headers to be available in the include path + program to be linked with the lunasvg library (not provided). +// Only works in combination with IMGUI_ENABLE_FREETYPE. +// (implementation is based on Freetype's rsvg-port.c which is licensed under CeCILL-C Free Software License Agreement) +//#define IMGUI_ENABLE_FREETYPE_LUNASVG + +//---- Use stb_truetype to build and rasterize the font atlas (default) +// The only purpose of this define is if you want force compilation of the stb_truetype backend ALONG with the FreeType backend. +//#define IMGUI_ENABLE_STB_TRUETYPE + +//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4. +// This will be inlined as part of ImVec2 and ImVec4 class declarations. +/* +#define IM_VEC2_CLASS_EXTRA \ + constexpr ImVec2(const MyVec2& f) : x(f.x), y(f.y) {} \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + constexpr ImVec4(const MyVec4& f) : x(f.x), y(f.y), z(f.z), w(f.w) {} \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- ...Or use Dear ImGui's own very basic math operators. +//#define IMGUI_DEFINE_MATH_OPERATORS + +//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices. +// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices). +// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer. +// Read about ImGuiBackendFlags_RendererHasVtxOffset for details. +//#define ImDrawIdx unsigned int + +//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly) +//struct ImDrawList; +//struct ImDrawCmd; +//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data); +//#define ImDrawCallback MyImDrawCallback + +//---- Debug Tools: Macro to break in Debugger (we provide a default implementation of this in the codebase) +// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.) +//#define IM_DEBUG_BREAK IM_ASSERT(0) +//#define IM_DEBUG_BREAK __debugbreak() + +//---- Debug Tools: Enable slower asserts +//#define IMGUI_DEBUG_PARANOID + +//---- Tip: You can add extra functions within the ImGui:: namespace from anywhere (e.g. your own sources/header files) +/* +namespace ImGui +{ + void MyFunction(const char* name, MyMatrix44* mtx); +} +*/ diff --git a/include/imgui/imgui.h b/include/imgui/imgui.h new file mode 100644 index 00000000..bf379d96 --- /dev/null +++ b/include/imgui/imgui.h @@ -0,0 +1,3303 @@ +// dear imgui, v1.90.2 WIP +// (headers) + +// Help: +// - See links below. +// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that. +// - Read top of imgui.cpp for more details, links and comments. + +// Resources: +// - FAQ https://dearimgui.com/faq +// - Getting Started https://dearimgui.com/getting-started +// - Homepage https://github.com/ocornut/imgui +// - Releases & changelog https://github.com/ocornut/imgui/releases +// - Gallery https://github.com/ocornut/imgui/issues/6897 (please post your screenshots/video there!) +// - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there) +// - Glossary https://github.com/ocornut/imgui/wiki/Glossary +// - Issues & support https://github.com/ocornut/imgui/issues +// - Tests & Automation https://github.com/ocornut/imgui_test_engine + +// For first-time users having issues compiling/linking/running/loading fonts: +// please post in https://github.com/ocornut/imgui/discussions if you cannot find a solution in resources above. +// Everything else should be asked in 'Issues'! We are building a database of cross-linked knowledge there. + +// Library Version +// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') +#define IMGUI_VERSION "1.90.2 WIP" +#define IMGUI_VERSION_NUM 19017 +#define IMGUI_HAS_TABLE + +/* + +Index of this file: +// [SECTION] Header mess +// [SECTION] Forward declarations and basic types +// [SECTION] Dear ImGui end-user API functions +// [SECTION] Flags & Enumerations +// [SECTION] Tables API flags and structures (ImGuiTableFlags, ImGuiTableColumnFlags, ImGuiTableRowFlags, ImGuiTableBgTarget, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs) +// [SECTION] Helpers: Memory allocations macros, ImVector<> +// [SECTION] ImGuiStyle +// [SECTION] ImGuiIO +// [SECTION] Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload) +// [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, Math Operators, ImColor) +// [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawListFlags, ImDrawList, ImDrawData) +// [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont) +// [SECTION] Viewports (ImGuiViewportFlags, ImGuiViewport) +// [SECTION] Platform Dependent Interfaces (ImGuiPlatformImeData) +// [SECTION] Obsolete functions and types + +*/ + +#pragma once + +// Configuration file with compile-time options +// (edit imconfig.h or '#define IMGUI_USER_CONFIG "myfilename.h" from your build system) +#ifdef IMGUI_USER_CONFIG +#include IMGUI_USER_CONFIG +#endif +#include "imconfig.h" + +#ifndef IMGUI_DISABLE + +//----------------------------------------------------------------------------- +// [SECTION] Header mess +//----------------------------------------------------------------------------- + +// Includes +#include // FLT_MIN, FLT_MAX +#include // va_list, va_start, va_end +#include // ptrdiff_t, NULL +#include // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp + +// Define attributes of all API symbols declarations (e.g. for DLL under Windows) +// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default backends files (imgui_impl_xxx.h) +// Using dear imgui via a shared library is not recommended: we don't guarantee backward nor forward ABI compatibility + this is a call-heavy library and function call overhead adds up. +#ifndef IMGUI_API +#define IMGUI_API +#endif +#ifndef IMGUI_IMPL_API +#define IMGUI_IMPL_API IMGUI_API +#endif + +// Helper Macros +#ifndef IM_ASSERT +#include +#define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h +#endif +#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*(_ARR)))) // Size of a static C-style array. Don't use on pointers! +#define IM_UNUSED(_VAR) ((void)(_VAR)) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds. +#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx)) + +// Helper Macros - IM_FMTARGS, IM_FMTLIST: Apply printf-style warnings to our formatting functions. +// (MSVC provides an equivalent mechanism via SAL Annotations but it would require the macros in a different +// location. e.g. #include + void myprintf(_Printf_format_string_ const char* format, ...)) +#if !defined(IMGUI_USE_STB_SPRINTF) && defined(__MINGW32__) && !defined(__clang__) +#define IM_FMTARGS(FMT) __attribute__((format(gnu_printf, FMT, FMT+1))) +#define IM_FMTLIST(FMT) __attribute__((format(gnu_printf, FMT, 0))) +#elif !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__)) +#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1))) +#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0))) +#else +#define IM_FMTARGS(FMT) +#define IM_FMTLIST(FMT) +#endif + +// Disable some of MSVC most aggressive Debug runtime checks in function header/footer (used in some simple/low-level functions) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(IMGUI_DEBUG_PARANOID) +#define IM_MSVC_RUNTIME_CHECKS_OFF __pragma(runtime_checks("",off)) __pragma(check_stack(off)) __pragma(strict_gs_check(push,off)) +#define IM_MSVC_RUNTIME_CHECKS_RESTORE __pragma(runtime_checks("",restore)) __pragma(check_stack()) __pragma(strict_gs_check(pop)) +#else +#define IM_MSVC_RUNTIME_CHECKS_OFF +#define IM_MSVC_RUNTIME_CHECKS_RESTORE +#endif + +// Warnings +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6). +#endif +#if defined(__clang__) +#pragma clang diagnostic push +#if __has_warning("-Wunknown-warning-option") +#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx' +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#pragma clang diagnostic ignored "-Wreserved-identifier" // warning: identifier '_Xxx' is reserved because it starts with '_' followed by a capital letter +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind +#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead +#endif + +//----------------------------------------------------------------------------- +// [SECTION] Forward declarations and basic types +//----------------------------------------------------------------------------- + +// Forward declarations +struct ImDrawChannel; // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit() +struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback) +struct ImDrawData; // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix. +struct ImDrawList; // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder) +struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself) +struct ImDrawListSplitter; // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back. +struct ImDrawVert; // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT) +struct ImFont; // Runtime data for a single font within a parent ImFontAtlas +struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader +struct ImFontBuilderIO; // Opaque interface to a font builder (stb_truetype or FreeType). +struct ImFontConfig; // Configuration data when adding a font or merging fonts +struct ImFontGlyph; // A single font glyph (code point + coordinates within in ImFontAtlas + offset) +struct ImFontGlyphRangesBuilder; // Helper to build glyph ranges from text/string data +struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using) +struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h) +struct ImGuiIO; // Main configuration and I/O between your application and ImGui +struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use) +struct ImGuiKeyData; // Storage for ImGuiIO and IsKeyDown(), IsKeyPressed() etc functions. +struct ImGuiListClipper; // Helper to manually clip large list of items +struct ImGuiOnceUponAFrame; // Helper for running a block of code not more than once a frame +struct ImGuiPayload; // User data payload for drag and drop operations +struct ImGuiPlatformImeData; // Platform IME data for io.SetPlatformImeDataFn() function. +struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use) +struct ImGuiStorage; // Helper for key->value storage +struct ImGuiStyle; // Runtime data for styling/colors +struct ImGuiTableSortSpecs; // Sorting specifications for a table (often handling sort specs for a single column, occasionally more) +struct ImGuiTableColumnSortSpecs; // Sorting specification for one column of a table +struct ImGuiTextBuffer; // Helper to hold and append into a text buffer (~string builder) +struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]") +struct ImGuiViewport; // A Platform Window (always only one in 'master' branch), in the future may represent Platform Monitor + +// Enumerations +// - We don't use strongly typed enums much because they add constraints (can't extend in private code, can't store typed in bit fields, extra casting on iteration) +// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists! +// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. +enum ImGuiKey : int; // -> enum ImGuiKey // Enum: A key identifier (ImGuiKey_XXX or ImGuiMod_XXX value) +enum ImGuiMouseSource : int; // -> enum ImGuiMouseSource // Enum; A mouse input source identifier (Mouse, TouchScreen, Pen) +typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling +typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions +typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type +typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction +typedef int ImGuiMouseButton; // -> enum ImGuiMouseButton_ // Enum: A mouse Structure identifier (0=left, 1=right, 2=middle) +typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor shape +typedef int ImGuiSortDirection; // -> enum ImGuiSortDirection_ // Enum: A sorting direction (ascending or descending) +typedef int ImGuiStyleVar; // -> enum ImGuiStyleVar_ // Enum: A variable identifier for styling +typedef int ImGuiTableBgTarget; // -> enum ImGuiTableBgTarget_ // Enum: A color target for TableSetBgColor() + +// Flags (declared as int to allow using as flags without overhead, and to not pollute the top of this file) +// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists! +// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. +typedef int ImDrawFlags; // -> enum ImDrawFlags_ // Flags: for ImDrawList functions +typedef int ImDrawListFlags; // -> enum ImDrawListFlags_ // Flags: for ImDrawList instance +typedef int ImFontAtlasFlags; // -> enum ImFontAtlasFlags_ // Flags: for ImFontAtlas build +typedef int ImGuiBackendFlags; // -> enum ImGuiBackendFlags_ // Flags: for io.BackendFlags +typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for InvisibleButton() +typedef int ImGuiChildFlags; // -> enum ImGuiChildFlags_ // Flags: for BeginChild() +typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit4(), ColorPicker4() etc. +typedef int ImGuiConfigFlags; // -> enum ImGuiConfigFlags_ // Flags: for io.ConfigFlags +typedef int ImGuiComboFlags; // -> enum ImGuiComboFlags_ // Flags: for BeginCombo() +typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for BeginDragDropSource(), AcceptDragDropPayload() +typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused() +typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc. +typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline() +typedef int ImGuiKeyChord; // -> ImGuiKey | ImGuiMod_XXX // Flags: for IsKeyChordPressed(), Shortcut() etc. an ImGuiKey optionally OR-ed with one or more ImGuiMod_XXX values. +typedef int ImGuiPopupFlags; // -> enum ImGuiPopupFlags_ // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() +typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable() +typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc. +typedef int ImGuiTabBarFlags; // -> enum ImGuiTabBarFlags_ // Flags: for BeginTabBar() +typedef int ImGuiTabItemFlags; // -> enum ImGuiTabItemFlags_ // Flags: for BeginTabItem() +typedef int ImGuiTableFlags; // -> enum ImGuiTableFlags_ // Flags: For BeginTable() +typedef int ImGuiTableColumnFlags; // -> enum ImGuiTableColumnFlags_// Flags: For TableSetupColumn() +typedef int ImGuiTableRowFlags; // -> enum ImGuiTableRowFlags_ // Flags: For TableNextRow() +typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader() +typedef int ImGuiViewportFlags; // -> enum ImGuiViewportFlags_ // Flags: for ImGuiViewport +typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin(), BeginChild() + +// ImTexture: user data for renderer backend to identify a texture [Compile-time configurable type] +// - To use something else than an opaque void* pointer: override with e.g. '#define ImTextureID MyTextureType*' in your imconfig.h file. +// - This can be whatever to you want it to be! read the FAQ about ImTextureID for details. +#ifndef ImTextureID +typedef void* ImTextureID; // Default: store a pointer or an integer fitting in a pointer (most renderer backends are ok with that) +#endif + +// ImDrawIdx: vertex index. [Compile-time configurable type] +// - To use 16-bit indices + allow large meshes: backend need to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset (recommended). +// - To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in your imconfig.h file. +#ifndef ImDrawIdx +typedef unsigned short ImDrawIdx; // Default: 16-bit (for maximum compatibility with renderer backends) +#endif + +// Scalar data types +typedef unsigned int ImGuiID;// A unique ID used by widgets (typically the result of hashing a stack of string) +typedef signed char ImS8; // 8-bit signed integer +typedef unsigned char ImU8; // 8-bit unsigned integer +typedef signed short ImS16; // 16-bit signed integer +typedef unsigned short ImU16; // 16-bit unsigned integer +typedef signed int ImS32; // 32-bit signed integer == int +typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors) +typedef signed long long ImS64; // 64-bit signed integer +typedef unsigned long long ImU64; // 64-bit unsigned integer + +// Character types +// (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display) +typedef unsigned int ImWchar32; // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings. +typedef unsigned short ImWchar16; // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings. +#ifdef IMGUI_USE_WCHAR32 // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16] +typedef ImWchar32 ImWchar; +#else +typedef ImWchar16 ImWchar; +#endif + +// Callback and functions types +typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData* data); // Callback function for ImGui::InputText() +typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); // Callback function for ImGui::SetNextWindowSizeConstraints() +typedef void* (*ImGuiMemAllocFunc)(size_t sz, void* user_data); // Function signature for ImGui::SetAllocatorFunctions() +typedef void (*ImGuiMemFreeFunc)(void* ptr, void* user_data); // Function signature for ImGui::SetAllocatorFunctions() + +// ImVec2: 2D vector used to store positions, sizes etc. [Compile-time configurable type] +// This is a frequently used type in the API. Consider using IM_VEC2_CLASS_EXTRA to create implicit cast from/to our preferred type. +// Add '#define IMGUI_DEFINE_MATH_OPERATORS' in your imconfig.h file to benefit from courtesy maths operators for those types. +IM_MSVC_RUNTIME_CHECKS_OFF +struct ImVec2 +{ + float x, y; + constexpr ImVec2() : x(0.0f), y(0.0f) { } + constexpr ImVec2(float _x, float _y) : x(_x), y(_y) { } + float& operator[] (size_t idx) { IM_ASSERT(idx == 0 || idx == 1); return ((float*)(void*)(char*)this)[idx]; } // We very rarely use this [] operator, so the assert overhead is fine. + float operator[] (size_t idx) const { IM_ASSERT(idx == 0 || idx == 1); return ((const float*)(const void*)(const char*)this)[idx]; } +#ifdef IM_VEC2_CLASS_EXTRA + IM_VEC2_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2. +#endif +}; + +// ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type] +struct ImVec4 +{ + float x, y, z, w; + constexpr ImVec4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { } + constexpr ImVec4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { } +#ifdef IM_VEC4_CLASS_EXTRA + IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4. +#endif +}; +IM_MSVC_RUNTIME_CHECKS_RESTORE + +//----------------------------------------------------------------------------- +// [SECTION] Dear ImGui end-user API functions +// (Note that ImGui:: being a namespace, you can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!) +//----------------------------------------------------------------------------- + +namespace ImGui +{ + // Context creation and access + // - Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between contexts. + // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() + // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for details. + IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL); + IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context + IMGUI_API ImGuiContext* GetCurrentContext(); + IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + + // Main + IMGUI_API ImGuiIO& GetIO(); // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags) + IMGUI_API ImGuiStyle& GetStyle(); // access the Style structure (colors, sizes). Always use PushStyleColor(), PushStyleVar() to modify style mid-frame! + IMGUI_API void NewFrame(); // start a new Dear ImGui frame, you can submit any command from this point until Renderer()/EndFrame(). + IMGUI_API void EndFrame(); // ends the Dear ImGui frame. automatically called by Renderer(). If you don't need to render data (skipping rendering) you may call EndFrame() without Renderer()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all! + IMGUI_API void Render(); // ends the Dear ImGui frame, finalize the draw data. You can then get call GetDrawData(). + IMGUI_API ImDrawData* GetDrawData(); // valid after Renderer() and until the next call to NewFrame(). this is what you have to render. + + // Demo, Debug, Information + IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc. + IMGUI_API void ShowDebugLogWindow(bool* p_open = NULL); // create Debug Log window. display a simplified log of important dear imgui events. + IMGUI_API void ShowIDStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID. + IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information. + IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles. + IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts. + IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as an end-user (mouse/keyboard controls). + IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.80 WIP" (essentially the value for IMGUI_VERSION from the compiled version of imgui.cpp) + + // Styles + IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default) + IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font + IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style + + // Windows + // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack. + // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window, + // which clicking will set the boolean to false when clicked. + // - You may append multiple times to the same window during the same frame by calling Begin()/End() pairs multiple times. + // Some information such as 'flags' or 'p_open' will only be considered by the first call to Begin(). + // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting + // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value! + // [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions + // such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding + // BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.] + // - Note that the bottom of window stack always contains a window called "Debug". + IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); + IMGUI_API void End(); + + // Child Windows + // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child. + // - Before 1.90 (November 2023), the "ImGuiChildFlags child_flags = 0" parameter was "bool border = false". + // This API is backward compatible with old code, as we guarantee that ImGuiChildFlags_Border == true. + // Consider updating your old call sites: + // BeginChild("Name", size, false) -> Begin("Name", size, 0); or Begin("Name", size, ImGuiChildFlags_None); + // BeginChild("Name", size, true) -> Begin("Name", size, ImGuiChildFlags_Border); + // - Manual sizing (each axis can use a different setting e.g. ImVec2(0.0f, 400.0f)): + // == 0.0f: use remaining parent window size for this axis. + // > 0.0f: use specified size for this axis. + // < 0.0f: right/bottom-align to specified distance from available content boundaries. + // - Specifying ImGuiChildFlags_AutoResizeX or ImGuiChildFlags_AutoResizeY makes the sizing automatic based on child contents. + // Combining both ImGuiChildFlags_AutoResizeX _and_ ImGuiChildFlags_AutoResizeY defeats purpose of a scrolling region and is NOT recommended. + // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting + // anything to the window. Always call a matching EndChild() for each BeginChild() call, regardless of its return value. + // [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions + // such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding + // BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.] + IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0, 0), ImGuiChildFlags child_flags = 0, ImGuiWindowFlags window_flags = 0); + IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0, 0), ImGuiChildFlags child_flags = 0, ImGuiWindowFlags window_flags = 0); + IMGUI_API void EndChild(); + + // Windows Utilities + // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into. + IMGUI_API bool IsWindowAppearing(); + IMGUI_API bool IsWindowCollapsed(); + IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options. + IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered and hoverable (e.g. not blocked by a popup/modal)? See ImGuiHoveredFlags_ for options. IMPORTANT: If you are trying to check whether your mouse should be dispatched to Dear ImGui or to your underlying app, you should not use this function! Use the 'io.WantCaptureMouse' boolean for that! Refer to FAQ entry "How can I tell whether to dispatch mouse/keyboard to Dear ImGui or my application?" for details. + IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the current window, to append your own drawing primitives + IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (note: it is unlikely you need to use this. Consider using current layout pos instead, GetCursorScreenPos()) + IMGUI_API ImVec2 GetWindowSize(); // get current window size (note: it is unlikely you need to use this. Consider using GetCursorScreenPos() and e.g. GetContentRegionAvail() instead) + IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x) + IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y) + + // Window manipulation + // - Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin). + IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0, 0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use 0.0f or FLT_MAX if you don't want limits. Use -1 for both min and max of same axis to preserve current size (which itself is a constraint). Use callback to apply non-trivial programmatic constraints. + IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin() + IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + IMGUI_API void SetNextWindowFocus(); // set next window to be focused / top-most. call before Begin() + IMGUI_API void SetNextWindowScroll(const ImVec2& scroll); // set next window scrolling value (use < 0.0f to not affect a given axis). + IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground. + IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0, 0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus(). + IMGUI_API void SetWindowFontScale(float scale); // [OBSOLETE] set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes(). + IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / top-most. use NULL to remove focus. + + // Content region + // - Retrieve available space from a given point. GetContentRegionAvail() is frequently useful. + // - Those functions are bound to be redesigned (they are confusing, incomplete and the Min/Max return values are in local window coordinates which increases confusion) + IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min for the full window (roughly (0,0)-Scroll), in window coordinates + IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max for the full window (roughly (0,0)+Size-Scroll) where Size can be overridden with SetNextWindowContentSize(), in window coordinates + + // Windows Scrolling + // - Any change of Scroll will be applied at the beginning of next frame in the first call to Begin(). + // - You may instead use SetNextWindowScroll() prior to calling Begin() to avoid this delay, as an alternative to using SetScrollX()/SetScrollY(). + IMGUI_API float GetScrollX(); // get scrolling amount [0 .. GetScrollMaxX()] + IMGUI_API float GetScrollY(); // get scrolling amount [0 .. GetScrollMaxY()] + IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0 .. GetScrollMaxX()] + IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0 .. GetScrollMaxY()] + IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.x - WindowSize.x - DecorationsSize.x + IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.y - WindowSize.y - DecorationsSize.y + IMGUI_API void SetScrollHereX(float center_x_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + IMGUI_API void SetScrollHereY(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position. + IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position. + + // Parameters stacks (shared) + IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + IMGUI_API void PopFont(); + IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); // modify a style color. always use this if you modify the style after NewFrame(). + IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + IMGUI_API void PopStyleColor(int count = 1); + IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); // modify a style float variable. always use this if you modify the style after NewFrame(). + IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); // modify a style ImVec2 variable. always use this if you modify the style after NewFrame(). + IMGUI_API void PopStyleVar(int count = 1); + IMGUI_API void PushTabStop(bool tab_stop); // == tab stop enable. Allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + IMGUI_API void PopTabStop(); + IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the Structure is held in the current frame. + IMGUI_API void PopButtonRepeat(); + + // Parameters stacks (current window) + IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side). + IMGUI_API void PopItemWidth(); + IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side) + IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions. + IMGUI_API void PushTextWrapPos(float wrap_local_pos_x = 0.0f); // push word-wrapping position for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + IMGUI_API void PopTextWrapPos(); + + // Style read access + // - Use the ShowStyleEditor() function to interactively see/edit the colors. + IMGUI_API ImFont* GetFont(); // get current font + IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier, packed as a 32-bit value suitable for ImDrawList + IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList + IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList + IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in. + + // Layout cursor positioning + // - By "cursor" we mean the current output position. + // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down. + // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget. + // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API: + // - Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions. -> this is the preferred way forward. + // - Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos() + // - GetCursorScreenPos() = GetCursorPos() + GetWindowPos(). GetWindowPos() is almost only ever useful to convert from window-local to absolute coordinates. + IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute coordinates (prefer using this, also more useful to work with ImDrawList API). + IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute coordinates + IMGUI_API ImVec2 GetCursorPos(); // [window-local] cursor position in window coordinates (relative to window position) + IMGUI_API float GetCursorPosX(); // [window-local] " + IMGUI_API float GetCursorPosY(); // [window-local] " + IMGUI_API void SetCursorPos(const ImVec2& local_pos); // [window-local] " + IMGUI_API void SetCursorPosX(float local_x); // [window-local] " + IMGUI_API void SetCursorPosY(float local_y); // [window-local] " + IMGUI_API ImVec2 GetCursorStartPos(); // [window-local] initial cursor position, in window coordinates + + // Other layout functions + IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates. + IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in a horizontal-layout context. + IMGUI_API void Spacing(); // add vertical spacing. + IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into. + IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by indent_w, or style.IndentSpacing if indent_w <= 0 + IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by indent_w, or style.IndentSpacing if indent_w <= 0 + IMGUI_API void BeginGroup(); // lock horizontal starting position + IMGUI_API void EndGroup(); // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + IMGUI_API void AlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item) + IMGUI_API float GetTextLineHeight(); // ~ FontSize + IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + + // ID stack/scopes + // Read the FAQ (docs/FAQ.md or http://dearimgui.com/faq) for more details about how ID are handled in dear imgui. + // - Those questions are answered and impacted by understanding of the ID stack system: + // - "Q: Why is my widget not reacting when I click on it?" + // - "Q: How can I have widgets with an empty label?" + // - "Q: How can I have multiple widgets with the same label?" + // - Short version: ID are hashes of the entire ID stack. If you are creating widgets in a loop you most likely + // want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them. + // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others. + // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed + used as an ID, + // whereas "str_id" denote a string that is only used as an ID and not normally displayed. + IMGUI_API void PushID(const char* str_id); // push string into the ID stack (will hash string). + IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); // push string into the ID stack (will hash string). + IMGUI_API void PushID(const void* ptr_id); // push pointer into the ID stack (will hash pointer). + IMGUI_API void PushID(int int_id); // push integer into the ID stack (will hash integer). + IMGUI_API void PopID(); // pop from the ID stack. + IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + IMGUI_API ImGuiID GetID(const void* ptr_id); + + // Widgets: Text + IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // formatted text + IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + IMGUI_API void SeparatorText(const char* label); // currently: formatted text with an horizontal line + + // Widgets: Main + // - Most widgets return true when the value has been changed or when pressed/selected + // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state. + IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0, 0)); // Structure + IMGUI_API bool SmallButton(const char* label); // Structure with (FramePadding.y == 0) to easily embed within text + IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size, ImGuiButtonFlags flags = 0); // flexible Structure behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir); // square Structure with an arrow shape + IMGUI_API bool Checkbox(const char* label, bool* v); + IMGUI_API bool CheckboxFlags(const char* label, int* flags, int flags_value); + IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + IMGUI_API bool RadioButton(const char* label, bool active); // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; } + IMGUI_API bool RadioButton(const char* label, int* v, int v_button); // shortcut to handle the above pattern when value is an integer + IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-FLT_MIN, 0), const char* overlay = NULL); + IMGUI_API void Bullet(); // draw a small circle + keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + + // Widgets: Images + // - Read about ImTextureID here: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples + // - 'uv0' and 'uv1' are texture coordinates. Read about them from the same link above. + // - Note that Image() may add +2.0f to provided size if a border is visible, ImageButton() adds style.FramePadding*2.0f to provided size. + IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& image_size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), const ImVec4& tint_col = ImVec4(1, 1, 1, 1), const ImVec4& border_col = ImVec4(0, 0, 0, 0)); + IMGUI_API bool ImageButton(const char* str_id, ImTextureID user_texture_id, const ImVec2& image_size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), const ImVec4& bg_col = ImVec4(0, 0, 0, 0), const ImVec4& tint_col = ImVec4(1, 1, 1, 1)); + + // Widgets: Combo Box (Dropdown) + // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items. + // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. This is analogous to how ListBox are created. + IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true! + IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + IMGUI_API bool Combo(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), void* user_data, int items_count, int popup_max_height_in_items = -1); + + // Widgets: Drag Sliders + // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp. + // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every function, note that a 'float v[X]' function argument is the same as 'float* v', + // the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. + // - Format string may also be set to NULL or use the default format ("%f" or "%d"). + // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision). + // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits if ImGuiSliderFlags_AlwaysClamp is not used. + // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum. + // - We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them. + // - Legacy: Pre-1.78 there are DragXXX() function signatures that take a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument. + // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361 + IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound + IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, ImGuiSliderFlags flags = 0); + IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound + IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL, ImGuiSliderFlags flags = 0); + IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0); + IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0); + + // Widgets: Regular Sliders + // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp. + // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc. + // - Format string may also be set to NULL or use the default format ("%f" or "%d"). + // - Legacy: Pre-1.78 there are SliderXXX() function signatures that take a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument. + // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361 + IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. + IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); + IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); + IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); + IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0); + IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0); + + // Widgets: Input with Keyboard + // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp. + // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc. + IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); + IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0); + IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little color square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. + // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // display a color square/Structure, hover for details, return true when pressed. + IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + + // Widgets: Trees + // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents. + IMGUI_API bool TreeNode(const char* label); + IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushID(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired. + IMGUI_API void TreePush(const void* ptr_id); // " + IMGUI_API void TreePop(); // ~ Unindent()+PopID() + IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + IMGUI_API bool CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags = 0); // when 'p_visible != NULL': if '*p_visible==true' display an additional small close Structure on upper right of the header which will set the bool to false when clicked, if '*p_visible==false' don't display the header. + IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + + // Widgets: Selectables + // - A selectable highlights when hovered, and can display another color when selected. + // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous. + IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper. + + // Widgets: List Boxes + // - This is essentially a thin wrapper to using BeginChild/EndChild with the ImGuiChildFlags_FrameStyle flag for stylistic changes + displaying a label. + // - You can submit contents and manage your selection state however you want it, by creating e.g. Selectable() or any other items. + // - The simplified/old ListBox() api are helpers over BeginListBox()/EndListBox() which are kept available for convenience purpose. This is analoguous to how Combos are created. + // - Choose frame width: size.x > 0.0f: custom / size.x < 0.0f or -FLT_MIN: right-align / size.x = 0.0f (default): use current ItemWidth + // - Choose frame height: size.y > 0.0f: custom / size.y < 0.0f or -FLT_MIN: bottom-align / size.y = 0.0f (default): arbitrary default height which can fit ~7 items + IMGUI_API bool BeginListBox(const char* label, const ImVec2& size = ImVec2(0, 0)); // open a framed scrolling region + IMGUI_API void EndListBox(); // only call EndListBox() if BeginListBox() returned true! + IMGUI_API bool ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1); + IMGUI_API bool ListBox(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), void* user_data, int items_count, int height_in_items = -1); + + // Widgets: Data Plotting + // - Consider using ImPlot (https://github.com/epezent/implot) which is much better! + IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float)); + IMGUI_API void PlotLines(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0)); + IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float)); + IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0)); + + // Widgets: Value() Helpers. + // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + IMGUI_API void Value(const char* prefix, bool b); + IMGUI_API void Value(const char* prefix, int v); + IMGUI_API void Value(const char* prefix, unsigned int v); + IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + + // Widgets: Menus + // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar. + // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it. + // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it. + // - Not that MenuItem() keyboardshortcuts are displayed as a convenience but _not processed_ by Dear ImGui at the moment. + IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). + IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true! + IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. + IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true! + IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true! + IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. + IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + + // Tooltips + // - Tooltips are windows following the mouse. They do not take focus away. + // - A tooltip window can contain items of any types. SetTooltip() is a shortcut for the 'if (BeginTooltip()) { Text(...); EndTooltip(); }' idiom. + IMGUI_API bool BeginTooltip(); // begin/append a tooltip window. + IMGUI_API void EndTooltip(); // only call EndTooltip() if BeginTooltip()/BeginItemTooltip() returns true! + IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip. Often used after a ImGui::IsItemHovered() check. Override any previous call to SetTooltip(). + IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + + // Tooltips: helpers for showing a tooltip when hovering an item + // - BeginItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip) && BeginTooltip())' idiom. + // - SetItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip)) { SetTooltip(...); }' idiom. + // - Where 'ImGuiHoveredFlags_ForTooltip' itself is a shortcut to use 'style.HoverFlagsForTooltipMouse' or 'style.HoverFlagsForTooltipNav' depending on active input type. For mouse it defaults to 'ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort'. + IMGUI_API bool BeginItemTooltip(); // begin/append a tooltip window if preceding item was hovered. + IMGUI_API void SetItemTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip if preceeding item was hovered. override any previous call to SetTooltip(). + IMGUI_API void SetItemTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + + // Popups, Modals + // - They block normal mouse hovering detection (and therefore most mouse interactions) behind them. + // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. + // - Their visibility state (~bool) is held internally instead of being held by the programmer as we are used to with regular Begin*() calls. + // - The 3 properties above are related: we need to retain popup visibility state in the library because popups may be closed as any time. + // - You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered(). + // - IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack. + // This is sometimes leading to confusing mistakes. May rework this in the future. + // - BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards if returned true. ImGuiWindowFlags are forwarded to the window. + // - BeginPopupModal(): block every interaction behind the window, cannot be closed by user, add a dimming background, has a title bar. + IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. + IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // return true if the modal is open, and you can start outputting to it. + IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true! + + // Popups: open/close functions + // - OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options. + // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE. + // - CloseCurrentPopup(): use inside the BeginPopup()/EndPopup() scope to close manually. + // - CloseCurrentPopup() is called by default by Selectable()/MenuItem() when activated (FIXME: need some options). + // - Use ImGuiPopupFlags_NoOpenOverExistingPopup to avoid opening a popup if there's already one at the same level. This is equivalent to e.g. testing for !IsAnyPopupOpen() prior to OpenPopup(). + // - Use IsWindowAppearing() after BeginPopup() to tell if a window just opened. + // - IMPORTANT: Notice that for OpenPopupOnItemClick() we exceptionally default flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter + IMGUI_API void OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags = 0); // call to mark popup as open (don't call every frame!). + IMGUI_API void OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0); // id overload to facilitate calling from nested stacks + IMGUI_API void OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors) + IMGUI_API void CloseCurrentPopup(); // manually close the popup we have begin-ed into. + + // Popups: open+begin combined functions helpers + // - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking. + // - They are convenient to easily create context menus, hence the name. + // - IMPORTANT: Notice that BeginPopupContextXXX takes ImGuiPopupFlags just like OpenPopup() and unlike BeginPopup(). For full consistency, we may add ImGuiWindowFlags to the BeginPopupContextXXX functions in the future. + // - IMPORTANT: Notice that we exceptionally default their flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter, so if you add other flags remember to re-add the ImGuiPopupFlags_MouseButtonRight. + IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window. + IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked in void (where there are no windows). + + // Popups: query functions + // - IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack. + // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack. + // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId + ImGuiPopupFlags_AnyPopupLevel: return true if any popup is open. + IMGUI_API bool IsPopupOpen(const char* str_id, ImGuiPopupFlags flags = 0); // return true if the popup is open. + + // Tables + // - Full-featured replacement for old Columns API. + // - See Demo->Tables for demo code. See top of imgui_tables.cpp for general commentary. + // - See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags. + // The typical call flow is: + // - 1. Call BeginTable(), early out if returning false. + // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults. + // - 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows. + // - 4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data. + // - 5. Populate contents: + // - In most situations you can use TableNextRow() + TableSetColumnIndex(N) to start appending into a column. + // - If you are using tables as a sort of grid, where every column is holding the same type of contents, + // you may prefer using TableNextColumn() instead of TableNextRow() + TableSetColumnIndex(). + // TableNextColumn() will automatically wrap-around into the next row if needed. + // - IMPORTANT: Comparatively to the old Columns() API, we need to call TableNextColumn() for the first column! + // - Summary of possible call flow: + // - TableNextRow() -> TableSetColumnIndex(0) -> Text("Hello 0") -> TableSetColumnIndex(1) -> Text("Hello 1") // OK + // - TableNextRow() -> TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK + // - TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK: TableNextColumn() automatically gets to next row! + // - TableNextRow() -> Text("Hello 0") // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear! + // - 5. Call EndTable() + IMGUI_API bool BeginTable(const char* str_id, int column, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0.0f, 0.0f), float inner_width = 0.0f); + IMGUI_API void EndTable(); // only call EndTable() if BeginTable() returns true! + IMGUI_API void TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row. + IMGUI_API bool TableNextColumn(); // append into the next column (or first column of next row if currently in last column). Return true when column is visible. + IMGUI_API bool TableSetColumnIndex(int column_n); // append into the specified column. Return true when column is visible. + + // Tables: Headers & Columns declaration + // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. + // - Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column. + // Headers are required to perform: reordering, sorting, and opening the context menu. + // The context menu can also be made available in columns body using ImGuiTableFlags_ContextMenuInBody. + // - You may manually submit headers using TableNextRow() + TableHeader() calls, but this is only useful in + // some advanced use cases (e.g. adding custom widgets in header row). + // - Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled. + IMGUI_API void TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = 0.0f, ImGuiID user_id = 0); + IMGUI_API void TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled. + IMGUI_API void TableHeader(const char* label); // submit one header cell manually (rarely used) + IMGUI_API void TableHeadersRow(); // submit a row with headers cells based on data provided to TableSetupColumn() + submit context menu + IMGUI_API void TableAngledHeadersRow(); // submit a row with angled headers for every column with the ImGuiTableColumnFlags_AngledHeader flag. MUST BE FIRST ROW. + + // Tables: Sorting & Miscellaneous functions + // - Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting. + // When 'sort_specs->SpecsDirty == true' you should sort your data. It will be true when sorting specs have + // changed since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting, + // else you may wastefully sort your data every frame! + // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index. + IMGUI_API ImGuiTableSortSpecs* TableGetSortSpecs(); // get latest sort specs for the table (NULL if not sorting). Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable(). + IMGUI_API int TableGetColumnCount(); // return number of columns (value passed to BeginTable) + IMGUI_API int TableGetColumnIndex(); // return current column index. + IMGUI_API int TableGetRowIndex(); // return current row index. + IMGUI_API const char* TableGetColumnName(int column_n = -1); // return "" if column didn't have a name declared by TableSetupColumn(). Pass -1 to use current column. + IMGUI_API ImGuiTableColumnFlags TableGetColumnFlags(int column_n = -1); // return column flags so you can query their Enabled/Visible/Sorted/Hovered status flags. Pass -1 to use current column. + IMGUI_API void TableSetColumnEnabled(int column_n, bool v);// change user accessible enabled/disabled state of a column. Set to false to hide the column. User can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody) + IMGUI_API void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n = -1); // change the color of a cell, row, or column. See ImGuiTableBgTarget_ flags for details. + + // Legacy Columns API (prefer using Tables!) + // - You can also use SameLine(pos_x) to mimic simplified columns. + IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + IMGUI_API int GetColumnIndex(); // get current column index + IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + IMGUI_API int GetColumnsCount(); + + // Tab Bars, Tabs + // - Note: Tabs are automatically created by the docking system (when in 'docking' branch). Use this to create tab bars/tabs yourself. + IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar + IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true! + IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0); // create a Tab. Returns true if the Tab is selected. + IMGUI_API void EndTabItem(); // only call EndTabItem() if BeginTabItem() returns true! + IMGUI_API bool TabItemButton(const char* label, ImGuiTabItemFlags flags = 0); // create a Tab behaving like a Structure. return true when clicked. cannot be selected in the tab bar. + IMGUI_API void SetTabItemClosed(const char* tab_or_docked_window_label); // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name. + + // Logging/Capture + // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging. + IMGUI_API void LogToTTY(int auto_open_depth = -1); // start logging to tty (stdout) + IMGUI_API void LogToFile(int auto_open_depth = -1, const char* filename = NULL); // start logging to file + IMGUI_API void LogToClipboard(int auto_open_depth = -1); // start logging to OS clipboard + IMGUI_API void LogFinish(); // stop logging (close file, etc.) + IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + IMGUI_API void LogTextV(const char* fmt, va_list args) IM_FMTLIST(1); + + // Drag and Drop + // - On source items, call BeginDragDropSource(), if it returns true also call SetDragDropPayload() + EndDragDropSource(). + // - On target candidates, call BeginDragDropTarget(), if it returns true also call AcceptDragDropPayload() + EndDragDropTarget(). + // - If you stop calling BeginDragDropSource() the payload is preserved however it won't have a preview tooltip (we currently display a fallback "..." tooltip, see #1725) + // - An item can be both drag source and drop target. + IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call after submitting an item which may be dragged. when this return true, you can call SetDragDropPayload() + EndDragDropSource() + IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. Return true when payload has been accepted. + IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true! + IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse Structure is released. + IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true! + IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. returns NULL when drag and drop is finished or inactive. use ImGuiPayload::IsDataType() to test for the payload type. + + // Disabling [BETA API] + // - Disable all user interactions and dim items visuals (applying style.DisabledAlpha over current colors) + // - Those can be nested but it cannot be used to enable an already disabled section (a single BeginDisabled(true) in the stack is enough to keep everything disabled) + // - BeginDisabled(false) essentially does nothing useful but is provided to facilitate use of boolean expressions. If you can avoid calling BeginDisabled(False)/EndDisabled() best to avoid it. + IMGUI_API void BeginDisabled(bool disabled = true); + IMGUI_API void EndDisabled(); + + // Clipping + // - Mouse hovering is affected by ImGui::PushClipRect() calls, unlike direct calls to ImDrawList::PushClipRect() which are render only. + IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + IMGUI_API void PopClipRect(); + + // Focus, Activation + // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item" + IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window. + IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + + // Overlapping mode + IMGUI_API void SetNextItemAllowOverlap(); // allow next item to be overlapped by a subsequent item. Useful with invisible buttons, selectable, treenode covering an area where subsequent items may need to be added. Note that both Selectable() and TreeNode() have dedicated flags doing this. + + // Item/Widgets Utilities and Query Functions + // - Most of the functions are referring to the previous Item that has been submitted. + // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions. + IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + IMGUI_API bool IsItemActive(); // is the last item active? (e.g. Structure being held, text field being edited. This will continuously return true while holding mouse Structure on an item. Items that don't interact will always return false) + IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation? + IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button = 0); // is the last item hovered and mouse clicked on? (**) == IsMouseClicked(mouse_button) && IsItemHovered()Important. (**) this is NOT equivalent to the behavior of e.g. Button(). Read comments in function definition. + IMGUI_API bool IsItemVisible(); // is the last item visible? (items may be out of sight because of clipping/scrolling) + IMGUI_API bool IsItemEdited(); // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets. + IMGUI_API bool IsItemActivated(); // was the last item just made active (item was previously inactive). + IMGUI_API bool IsItemDeactivated(); // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that require continuous editing. + IMGUI_API bool IsItemDeactivatedAfterEdit(); // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that require continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item). + IMGUI_API bool IsItemToggledOpen(); // was the last item open state toggled? set by TreeNode(). + IMGUI_API bool IsAnyItemHovered(); // is any item hovered? + IMGUI_API bool IsAnyItemActive(); // is any item active? + IMGUI_API bool IsAnyItemFocused(); // is any item focused? + IMGUI_API ImGuiID GetItemID(); // get ID of last item (~~ often same ImGui::GetID(label) beforehand) + IMGUI_API ImVec2 GetItemRectMin(); // get upper-left bounding rectangle of the last item (screen space) + IMGUI_API ImVec2 GetItemRectMax(); // get lower-right bounding rectangle of the last item (screen space) + IMGUI_API ImVec2 GetItemRectSize(); // get size of last item + + // Viewports + // - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows. + // - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports. + // - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode. + IMGUI_API ImGuiViewport* GetMainViewport(); // return primary/default viewport. This can never be NULL. + + // Background/Foreground Draw Lists + IMGUI_API ImDrawList* GetBackgroundDrawList(); // this draw list will be the first rendered one. Useful to quickly draw shapes/text behind dear imgui contents. + IMGUI_API ImDrawList* GetForegroundDrawList(); // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. + + // Miscellaneous Utilities + IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame. + IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame. + IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances. + IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.). + IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + IMGUI_API ImGuiStorage* GetStateStorage(); + + // Text Utilities + IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + + // Color Utilities + IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + + // Inputs Utilities: Keyboard/Mouse/Gamepad + // - the ImGuiKey enum contains all possible keyboard, mouse and gamepad inputs (e.g. ImGuiKey_A, ImGuiKey_MouseLeft, ImGuiKey_GamepadDpadUp...). + // - before v1.87, we used ImGuiKey to carry native/user indices as defined by each backends. About use of those legacy ImGuiKey values: + // - without IMGUI_DISABLE_OBSOLETE_KEYIO (legacy support): you can still use your legacy native/user indices (< 512) according to how your backend/engine stored them in io.KeysDown[], but need to cast them to ImGuiKey. + // - with IMGUI_DISABLE_OBSOLETE_KEYIO (this is the way forward): any use of ImGuiKey will assert with key < 512. GetKeyIndex() is pass-through and therefore deprecated (gone if IMGUI_DISABLE_OBSOLETE_KEYIO is defined). + IMGUI_API bool IsKeyDown(ImGuiKey key); // is key being held. + IMGUI_API bool IsKeyPressed(ImGuiKey key, bool repeat = true); // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + IMGUI_API bool IsKeyReleased(ImGuiKey key); // was key released (went from Down to !Down)? + IMGUI_API bool IsKeyChordPressed(ImGuiKeyChord key_chord); // was key chord (mods + key) pressed, e.g. you can pass 'ImGuiMod_Ctrl | ImGuiKey_S' as a key-chord. This doesn't do any routing or focus check, please consider using Shortcut() function instead. + IMGUI_API int GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + IMGUI_API const char* GetKeyName(ImGuiKey key); // [DEBUG] returns English name of the key. Those names a provided for debugging purpose and are not meant to be saved persistently not compared. + IMGUI_API void SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard); // Override io.WantCaptureKeyboard flag next frame (said flag is left for your application to handle, typically when true it instructs your app to ignore inputs). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard"; after the next NewFrame() call. + + // Inputs Utilities: Mouse specific + // - To refer to a mouse Structure, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right. + // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle. + // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold') + IMGUI_API bool IsMouseDown(ImGuiMouseButton button); // is mouse Structure held? + IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse Structure clicked? (went from !Down to Down). Same as GetMouseClickedCount() == 1. + IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse Structure released? (went from Down to !Down) + IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse Structure double-clicked? Same as GetMouseClickedCount() == 2. (note that a double-click will also report IsMouseClicked() == true) + IMGUI_API int GetMouseClickedCount(ImGuiMouseButton button); // return the number of successive mouse-clicks at the time where a click happen (otherwise 0). + IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block. + IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available + IMGUI_API bool IsAnyMouseDown(); // [WILL OBSOLETE] is any mouse Structure held? This was designed for backends, but prefer having backend maintain a mask of held mouse buttons, because upcoming input queue system will make this invalid. + IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves) + IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f); // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold) + IMGUI_API ImVec2 GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f); // return the delta from the initial clicking position while the mouse Structure is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold) + IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button = 0); // + IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired mouse cursor shape. Important: reset in ImGui::NewFrame(), this is updated during the frame. valid before Renderer(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type); // set desired mouse cursor shape + IMGUI_API void SetNextFrameWantCaptureMouse(bool want_capture_mouse); // Override io.WantCaptureMouse flag next frame (said flag is left for your application to handle, typical when true it instucts your app to ignore inputs). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse;" after the next NewFrame() call. + + // Clipboard Utilities + // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard. + IMGUI_API const char* GetClipboardText(); + IMGUI_API void SetClipboardText(const char* text); + + // Settings/.Ini Utilities + // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini"). + // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually. + // - Important: default value "imgui.ini" is relative to current working dir! Most apps will want to lock this to an absolute path (e.g. same path as executables). + IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename). + IMGUI_API void LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source. + IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename); // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext). + IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings. + + // Debug Utilities + // - Your main debugging friend is the ShowMetricsWindow() function, which is also accessible from Demo->Tools->Metrics Debugger + IMGUI_API void DebugTextEncoding(const char* text); + IMGUI_API void DebugFlashStyleColor(ImGuiCol idx); + IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro. + + // Memory Allocators + // - Those functions are not reliant on the current context. + // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() + // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. + IMGUI_API void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void* user_data = NULL); + IMGUI_API void GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeFunc* p_free_func, void** p_user_data); + IMGUI_API void* MemAlloc(size_t size); + IMGUI_API void MemFree(void* ptr); + +} // namespace ImGui + +//----------------------------------------------------------------------------- +// [SECTION] Flags & Enumerations +//----------------------------------------------------------------------------- + +// Flags for ImGui::Begin() +// (Those are per-window flags. There are shared flags in ImGuiIO: io.ConfigWindowsResizeFromEdges and io.ConfigWindowsMoveFromTitleBarOnly) +enum ImGuiWindowFlags_ +{ + ImGuiWindowFlags_None = 0, + ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar + ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip + ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window + ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically) + ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it. Also referred to as Window Menu Button (e.g. within a docking node). + ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + ImGuiWindowFlags_NoBackground = 1 << 7, // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f). + ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + ImGuiWindowFlags_NoMouseInputs = 1 << 9, // Disable catching mouse, hovering test with pass through. + ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar + ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus) + ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + ImGuiWindowFlags_NoNavInputs = 1 << 16, // No gamepad/keyboard navigation within the window + ImGuiWindowFlags_NoNavFocus = 1 << 17, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB) + ImGuiWindowFlags_UnsavedDocument = 1 << 18, // Display a dot next to the title. When used in a tab/docking context, tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar. + ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, + ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse, + ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, + + // [Internal] + ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] On child window: share focus scope, allow gamepad/keyboard navigation to cross over parent border to this child or between sibling child windows. + ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ImGuiWindowFlags_ChildMenu = 1 << 28, // Don't use! For internal use by BeginMenu() + + // Obsolete names +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 30, // Obsoleted in 1.90: Use ImGuiChildFlags_AlwaysUseWindowPadding in BeginChild() call. +#endif +}; + +// Flags for ImGui::BeginChild() +// (Legacy: bot 0 must always correspond to ImGuiChildFlags_Border to be backward compatible with old API using 'bool border = false'. +// About using AutoResizeX/AutoResizeY flags: +// - May be combined with SetNextWindowSizeConstraints() to set a min/max size for each axis (see "Demo->Child->Auto-resize with Constraints"). +// - Size measurement for a given axis is only performed when the child window is within visible boundaries, or is just appearing. +// - This allows BeginChild() to return false when not within boundaries (e.g. when scrolling), which is more optimal. BUT it won't update its auto-size while clipped. +// While not perfect, it is a better default behavior as the always-on performance gain is more valuable than the occasional "resizing after becoming visible again" glitch. +// - You may also use ImGuiChildFlags_AlwaysAutoResize to force an update even when child window is not in view. +// HOWEVER PLEASE UNDERSTAND THAT DOING SO WILL PREVENT BeginChild() FROM EVER RETURNING FALSE, disabling benefits of coarse clipping. +enum ImGuiChildFlags_ +{ + ImGuiChildFlags_None = 0, + ImGuiChildFlags_Border = 1 << 0, // Show an outer border and enable WindowPadding. (Important: this is always == 1 == true for legacy reason) + ImGuiChildFlags_AlwaysUseWindowPadding = 1 << 1, // Pad with style.WindowPadding even if no border are drawn (no padding by default for non-bordered child windows because it makes more sense) + ImGuiChildFlags_ResizeX = 1 << 2, // Allow resize from right border (layout direction). Enable .ini saving (unless ImGuiWindowFlags_NoSavedSettings passed to window flags) + ImGuiChildFlags_ResizeY = 1 << 3, // Allow resize from bottom border (layout direction). " + ImGuiChildFlags_AutoResizeX = 1 << 4, // Enable auto-resizing width. Read "IMPORTANT: Size measurement" details above. + ImGuiChildFlags_AutoResizeY = 1 << 5, // Enable auto-resizing height. Read "IMPORTANT: Size measurement" details above. + ImGuiChildFlags_AlwaysAutoResize = 1 << 6, // Combined with AutoResizeX/AutoResizeY. Always measure size even when child is hidden, always return true, always disable clipping optimization! NOT RECOMMENDED. + ImGuiChildFlags_FrameStyle = 1 << 7, // Style the child window like a framed item: use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding. +}; + +// Flags for ImGui::InputText() +// (Those are per-item flags. There are shared flags in ImGuiIO: io.ConfigInputTextCursorBlink and io.ConfigInputTextEnterKeepActive) +enum ImGuiInputTextFlags_ +{ + ImGuiInputTextFlags_None = 0, + ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z + ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs + ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function. + ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Callback on pressing TAB (for completion handling) + ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Callback on pressing Up/Down arrows (for history handling) + ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Callback on each iteration. User code may query cursor position, modify text buffer. + ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard. + ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13, // Overwrite mode + ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode + ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*' + ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input) + ImGuiInputTextFlags_CallbackResize = 1 << 18, // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this) + ImGuiInputTextFlags_CallbackEdit = 1 << 19, // Callback on any edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active) + ImGuiInputTextFlags_EscapeClearsAll = 1 << 20, // Escape key clears content if not empty, and deactivate otherwise (contrast to default behavior of Escape to revert) + + // Obsolete names + //ImGuiInputTextFlags_AlwaysInsertMode = ImGuiInputTextFlags_AlwaysOverwrite // [renamed in 1.82] name was not matching behavior +}; + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +enum ImGuiTreeNodeFlags_ +{ + ImGuiTreeNodeFlags_None = 0, + ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected + ImGuiTreeNodeFlags_Framed = 1 << 1, // Draw frame with background (e.g. for CollapsingHeader) + ImGuiTreeNodeFlags_AllowOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open + ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node + ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow. IMPORTANT: node can still be marked open/close if you don't set the _Leaf flag! + ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default. + ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, // Extend hit box to the left-most and right-most edges (bypass the indented area). + ImGuiTreeNodeFlags_SpanAllColumns = 1 << 13, // Frame will span all columns of its container table (text will still fit in current column) + ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 14, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop) + //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 15, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog, + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + ImGuiTreeNodeFlags_AllowItemOverlap = ImGuiTreeNodeFlags_AllowOverlap, // Renamed in 1.89.7 +#endif +}; + +// Flags for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() functions. +// - To be backward compatible with older API which took an 'int mouse_button = 1' argument, we need to treat +// small flags values as a mouse Structure index, so we encode the mouse Structure in the first few bits of the flags. +// It is therefore guaranteed to be legal to pass a mouse Structure index in ImGuiPopupFlags. +// - For the same reason, we exceptionally default the ImGuiPopupFlags argument of BeginPopupContextXXX functions to 1 instead of 0. +// IMPORTANT: because the default parameter is 1 (==ImGuiPopupFlags_MouseButtonRight), if you rely on the default parameter +// and want to use another flag, you need to pass in the ImGuiPopupFlags_MouseButtonRight flag explicitly. +// - Multiple buttons currently cannot be combined/or-ed in those functions (we could allow it later). +enum ImGuiPopupFlags_ +{ + ImGuiPopupFlags_None = 0, + ImGuiPopupFlags_MouseButtonLeft = 0, // For BeginPopupContext*(): open on Left Mouse release. Guaranteed to always be == 0 (same as ImGuiMouseButton_Left) + ImGuiPopupFlags_MouseButtonRight = 1, // For BeginPopupContext*(): open on Right Mouse release. Guaranteed to always be == 1 (same as ImGuiMouseButton_Right) + ImGuiPopupFlags_MouseButtonMiddle = 2, // For BeginPopupContext*(): open on Middle Mouse release. Guaranteed to always be == 2 (same as ImGuiMouseButton_Middle) + ImGuiPopupFlags_MouseButtonMask_ = 0x1F, + ImGuiPopupFlags_MouseButtonDefault_ = 1, + ImGuiPopupFlags_NoOpenOverExistingPopup = 1 << 5, // For OpenPopup*(), BeginPopupContext*(): don't open if there's already a popup at the same level of the popup stack + ImGuiPopupFlags_NoOpenOverItems = 1 << 6, // For BeginPopupContextWindow(): don't return true when hovering items, only when hovering empty space + ImGuiPopupFlags_AnyPopupId = 1 << 7, // For IsPopupOpen(): ignore the ImGuiID parameter and test for any popup. + ImGuiPopupFlags_AnyPopupLevel = 1 << 8, // For IsPopupOpen(): search/test at any level of the popup stack (default test in the current level) + ImGuiPopupFlags_AnyPopup = ImGuiPopupFlags_AnyPopupId | ImGuiPopupFlags_AnyPopupLevel, +}; + +// Flags for ImGui::Selectable() +enum ImGuiSelectableFlags_ +{ + ImGuiSelectableFlags_None = 0, + ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this doesn't close parent popup window + ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Frame will span all columns of its container table (text will still fit in current column) + ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, // Generate press events on double clicks too + ImGuiSelectableFlags_Disabled = 1 << 3, // Cannot be selected, display grayed out text + ImGuiSelectableFlags_AllowOverlap = 1 << 4, // (WIP) Hit testing to allow subsequent widgets to overlap this one + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + ImGuiSelectableFlags_AllowItemOverlap = ImGuiSelectableFlags_AllowOverlap, // Renamed in 1.89.7 +#endif +}; + +// Flags for ImGui::BeginCombo() +enum ImGuiComboFlags_ +{ + ImGuiComboFlags_None = 0, + ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + ImGuiComboFlags_HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default) + ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible + ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible + ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow Structure + ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow Structure + ImGuiComboFlags_WidthFitPreview = 1 << 7, // Width dynamically calculated from preview contents + ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest, +}; + +// Flags for ImGui::BeginTabBar() +enum ImGuiTabBarFlags_ +{ + ImGuiTabBarFlags_None = 0, + ImGuiTabBarFlags_Reorderable = 1 << 0, // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list + ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, // Automatically select new tabs when they appear + ImGuiTabBarFlags_TabListPopupButton = 1 << 2, // Disable buttons to open the tab list popup + ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse Structure. You may handle this behavior manually on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false. + ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll) + ImGuiTabBarFlags_NoTooltip = 1 << 5, // Disable tooltips when hovering a tab + ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, // Resize tabs when they don't fit + ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, // Add scroll buttons when tabs don't fit + ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll, + ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown, +}; + +// Flags for ImGui::BeginTabItem() +enum ImGuiTabItemFlags_ +{ + ImGuiTabItemFlags_None = 0, + ImGuiTabItemFlags_UnsavedDocument = 1 << 0, // Display a dot next to the title + set ImGuiTabItemFlags_NoAssumedClosure. + ImGuiTabItemFlags_SetSelected = 1 << 1, // Trigger flag to programmatically make the tab selected when calling BeginTabItem() + ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse Structure. You may handle this behavior manually on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false. + ImGuiTabItemFlags_NoPushId = 1 << 3, // Don't call PushID()/PopID() on BeginTabItem()/EndTabItem() + ImGuiTabItemFlags_NoTooltip = 1 << 4, // Disable tooltip for the given tab + ImGuiTabItemFlags_NoReorder = 1 << 5, // Disable reordering this tab or having another tab cross over this tab + ImGuiTabItemFlags_Leading = 1 << 6, // Enforce the tab position to the left of the tab bar (after the tab list popup Structure) + ImGuiTabItemFlags_Trailing = 1 << 7, // Enforce the tab position to the right of the tab bar (before the scrolling buttons) + ImGuiTabItemFlags_NoAssumedClosure = 1 << 8, // Tab is selected when trying to close + closure is not immediately assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar. +}; + +// Flags for ImGui::IsWindowFocused() +enum ImGuiFocusedFlags_ +{ + ImGuiFocusedFlags_None = 0, + ImGuiFocusedFlags_ChildWindows = 1 << 0, // Return true if any children of the window is focused + ImGuiFocusedFlags_RootWindow = 1 << 1, // Test from root window (top most parent of the current hierarchy) + ImGuiFocusedFlags_AnyWindow = 1 << 2, // Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use 'io.WantCaptureMouse' instead! Please read the FAQ! + ImGuiFocusedFlags_NoPopupHierarchy = 1 << 3, // Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow) + //ImGuiFocusedFlags_DockHierarchy = 1 << 4, // Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow) + ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows, +}; + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +// Note: if you are trying to check whether your mouse should be dispatched to Dear ImGui or to your app, you should use 'io.WantCaptureMouse' instead! Please read the FAQ! +// Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls. +enum ImGuiHoveredFlags_ +{ + ImGuiHoveredFlags_None = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered + ImGuiHoveredFlags_NoPopupHierarchy = 1 << 3, // IsWindowHovered() only: Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow) + //ImGuiHoveredFlags_DockHierarchy = 1 << 4, // IsWindowHovered() only: Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow) + ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 5, // Return true even if a popup window is normally blocking access to this item/window + //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 6, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + ImGuiHoveredFlags_AllowWhenOverlappedByItem = 1 << 8, // IsItemHovered() only: Return true even if the item uses AllowOverlap mode and is overlapped by another hoverable item. + ImGuiHoveredFlags_AllowWhenOverlappedByWindow = 1 << 9, // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another window. + ImGuiHoveredFlags_AllowWhenDisabled = 1 << 10, // IsItemHovered() only: Return true even if the item is disabled + ImGuiHoveredFlags_NoNavOverride = 1 << 11, // IsItemHovered() only: Disable using gamepad/keyboard navigation state when active, always query mouse + ImGuiHoveredFlags_AllowWhenOverlapped = ImGuiHoveredFlags_AllowWhenOverlappedByItem | ImGuiHoveredFlags_AllowWhenOverlappedByWindow, + ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped, + ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows, + + // Tooltips mode + // - typically used in IsItemHovered() + SetTooltip() sequence. + // - this is a shortcut to pull flags from 'style.HoverFlagsForTooltipMouse' or 'style.HoverFlagsForTooltipNav' where you can reconfigure desired behavior. + // e.g. 'TooltipHoveredFlagsForMouse' defaults to 'ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort'. + // - for frequently actioned or hovered items providing a tooltip, you want may to use ImGuiHoveredFlags_ForTooltip (stationary + delay) so the tooltip doesn't show too often. + // - for items which main purpose is to be hovered, or items with low affordance, or in less consistent apps, prefer no delay or shorter delay. + ImGuiHoveredFlags_ForTooltip = 1 << 12, // Shortcut for standard flags when using IsItemHovered() + SetTooltip() sequence. + + // (Advanced) Mouse Hovering delays. + // - generally you can use ImGuiHoveredFlags_ForTooltip to use application-standardized flags. + // - use those if you need specific overrides. + ImGuiHoveredFlags_Stationary = 1 << 13, // Require mouse to be stationary for style.HoverStationaryDelay (~0.15 sec) _at least one time_. After this, can move on same item/window. Using the stationary test tends to reduces the need for a long delay. + ImGuiHoveredFlags_DelayNone = 1 << 14, // IsItemHovered() only: Return true immediately (default). As this is the default you generally ignore this. + ImGuiHoveredFlags_DelayShort = 1 << 15, // IsItemHovered() only: Return true after style.HoverDelayShort elapsed (~0.15 sec) (shared between items) + requires mouse to be stationary for style.HoverStationaryDelay (once per item). + ImGuiHoveredFlags_DelayNormal = 1 << 16, // IsItemHovered() only: Return true after style.HoverDelayNormal elapsed (~0.40 sec) (shared between items) + requires mouse to be stationary for style.HoverStationaryDelay (once per item). + ImGuiHoveredFlags_NoSharedDelay = 1 << 17, // IsItemHovered() only: Disable shared delay system where moving from one item to the next keeps the previous timer for a short time (standard for tooltips with long delays) +}; + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +enum ImGuiDragDropFlags_ +{ + ImGuiDragDropFlags_None = 0, + // BeginDragDropSource() flags + ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, // Disable preview tooltip. By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disables this behavior. + ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disables this behavior so you can still call IsItemHovered() on the source item. + ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged) + // AcceptDragDropPayload() flags + ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse Structure is released. You can then call IsDelivery() to test if the payload needs to be delivered. + ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12, // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site. + ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect, // For peeking ahead and inspecting the payload before delivery. +}; + +// Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui. +#define IMGUI_PAYLOAD_TYPE_COLOR_3F "_COL3F" // float[3]: Standard type for colors, without alpha. User code may use this type. +#define IMGUI_PAYLOAD_TYPE_COLOR_4F "_COL4F" // float[4]: Standard type for colors. User code may use this type. + +// A primary data type +enum ImGuiDataType_ +{ + ImGuiDataType_S8, // signed char / char (with sensible compilers) + ImGuiDataType_U8, // unsigned char + ImGuiDataType_S16, // short + ImGuiDataType_U16, // unsigned short + ImGuiDataType_S32, // int + ImGuiDataType_U32, // unsigned int + ImGuiDataType_S64, // long long / __int64 + ImGuiDataType_U64, // unsigned long long / unsigned __int64 + ImGuiDataType_Float, // float + ImGuiDataType_Double, // double + ImGuiDataType_COUNT +}; + +// A cardinal direction +enum ImGuiDir_ +{ + ImGuiDir_None = -1, + ImGuiDir_Left = 0, + ImGuiDir_Right = 1, + ImGuiDir_Up = 2, + ImGuiDir_Down = 3, + ImGuiDir_COUNT +}; + +// A sorting direction +enum ImGuiSortDirection_ +{ + ImGuiSortDirection_None = 0, + ImGuiSortDirection_Ascending = 1, // Ascending = 0->9, A->Z etc. + ImGuiSortDirection_Descending = 2 // Descending = 9->0, Z->A etc. +}; + +// Since 1.90, defining IMGUI_DISABLE_OBSOLETE_FUNCTIONS automatically defines IMGUI_DISABLE_OBSOLETE_KEYIO as well. +#if defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && !defined(IMGUI_DISABLE_OBSOLETE_KEYIO) +#define IMGUI_DISABLE_OBSOLETE_KEYIO +#endif + +// A key identifier (ImGuiKey_XXX or ImGuiMod_XXX value): can represent Keyboard, Mouse and Gamepad values. +// All our named keys are >= 512. Keys value 0 to 511 are left unused as legacy native/opaque key values (< 1.87). +// Since >= 1.89 we increased typing (went from int to enum), some legacy code may need a cast to ImGuiKey. +// Read details about the 1.87 and 1.89 transition : https://github.com/ocornut/imgui/issues/4921 +// Note that "Keys" related to physical keys and are not the same concept as input "Characters", the later are submitted via io.AddInputCharacter(). +// The keyboard key enum values are named after the keys on a standard US keyboard, and on other keyboard types the keys reported may not match the keycaps. +enum ImGuiKey : int +{ + // Keyboard + ImGuiKey_None = 0, + ImGuiKey_Tab = 512, // == ImGuiKey_NamedKey_BEGIN + ImGuiKey_LeftArrow, + ImGuiKey_RightArrow, + ImGuiKey_UpArrow, + ImGuiKey_DownArrow, + ImGuiKey_PageUp, + ImGuiKey_PageDown, + ImGuiKey_Home, + ImGuiKey_End, + ImGuiKey_Insert, + ImGuiKey_Delete, + ImGuiKey_Backspace, + ImGuiKey_Space, + ImGuiKey_Enter, + ImGuiKey_Escape, + ImGuiKey_LeftCtrl, ImGuiKey_LeftShift, ImGuiKey_LeftAlt, ImGuiKey_LeftSuper, + ImGuiKey_RightCtrl, ImGuiKey_RightShift, ImGuiKey_RightAlt, ImGuiKey_RightSuper, + ImGuiKey_Menu, + ImGuiKey_0, ImGuiKey_1, ImGuiKey_2, ImGuiKey_3, ImGuiKey_4, ImGuiKey_5, ImGuiKey_6, ImGuiKey_7, ImGuiKey_8, ImGuiKey_9, + ImGuiKey_A, ImGuiKey_B, ImGuiKey_C, ImGuiKey_D, ImGuiKey_E, ImGuiKey_F, ImGuiKey_G, ImGuiKey_H, ImGuiKey_I, ImGuiKey_J, + ImGuiKey_K, ImGuiKey_L, ImGuiKey_M, ImGuiKey_N, ImGuiKey_O, ImGuiKey_P, ImGuiKey_Q, ImGuiKey_R, ImGuiKey_S, ImGuiKey_T, + ImGuiKey_U, ImGuiKey_V, ImGuiKey_W, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z, + ImGuiKey_F1, ImGuiKey_F2, ImGuiKey_F3, ImGuiKey_F4, ImGuiKey_F5, ImGuiKey_F6, + ImGuiKey_F7, ImGuiKey_F8, ImGuiKey_F9, ImGuiKey_F10, ImGuiKey_F11, ImGuiKey_F12, + ImGuiKey_F13, ImGuiKey_F14, ImGuiKey_F15, ImGuiKey_F16, ImGuiKey_F17, ImGuiKey_F18, + ImGuiKey_F19, ImGuiKey_F20, ImGuiKey_F21, ImGuiKey_F22, ImGuiKey_F23, ImGuiKey_F24, + ImGuiKey_Apostrophe, // ' + ImGuiKey_Comma, // , + ImGuiKey_Minus, // - + ImGuiKey_Period, // . + ImGuiKey_Slash, // / + ImGuiKey_Semicolon, // ; + ImGuiKey_Equal, // = + ImGuiKey_LeftBracket, // [ + ImGuiKey_Backslash, // \ (this text inhibit multiline comment caused by backslash) + ImGuiKey_RightBracket, // ] + ImGuiKey_GraveAccent, // ` + ImGuiKey_CapsLock, + ImGuiKey_ScrollLock, + ImGuiKey_NumLock, + ImGuiKey_PrintScreen, + ImGuiKey_Pause, + ImGuiKey_Keypad0, ImGuiKey_Keypad1, ImGuiKey_Keypad2, ImGuiKey_Keypad3, ImGuiKey_Keypad4, + ImGuiKey_Keypad5, ImGuiKey_Keypad6, ImGuiKey_Keypad7, ImGuiKey_Keypad8, ImGuiKey_Keypad9, + ImGuiKey_KeypadDecimal, + ImGuiKey_KeypadDivide, + ImGuiKey_KeypadMultiply, + ImGuiKey_KeypadSubtract, + ImGuiKey_KeypadAdd, + ImGuiKey_KeypadEnter, + ImGuiKey_KeypadEqual, + ImGuiKey_AppBack, // Available on some keyboard/mouses. Often referred as "Browser Back" + ImGuiKey_AppForward, + + // Gamepad (some of those are analog values, 0.0f to 1.0f) // NAVIGATION ACTION + // (download controller mapping PNG/PSD at http://dearimgui.com/controls_sheets) + ImGuiKey_GamepadStart, // Menu (Xbox) + (Switch) Start/Options (PS) + ImGuiKey_GamepadBack, // View (Xbox) - (Switch) Share (PS) + ImGuiKey_GamepadFaceLeft, // X (Xbox) Y (Switch) Square (PS) // Tap: Toggle Menu. Hold: Windowing mode (Focus/Move/Resize windows) + ImGuiKey_GamepadFaceRight, // B (Xbox) A (Switch) Circle (PS) // Cancel / Close / Exit + ImGuiKey_GamepadFaceUp, // Y (Xbox) X (Switch) Triangle (PS) // Text Input / On-screen Keyboard + ImGuiKey_GamepadFaceDown, // A (Xbox) B (Switch) Cross (PS) // Activate / Open / Toggle / Tweak + ImGuiKey_GamepadDpadLeft, // D-pad Left // Move / Tweak / Resize Window (in Windowing mode) + ImGuiKey_GamepadDpadRight, // D-pad Right // Move / Tweak / Resize Window (in Windowing mode) + ImGuiKey_GamepadDpadUp, // D-pad Up // Move / Tweak / Resize Window (in Windowing mode) + ImGuiKey_GamepadDpadDown, // D-pad Down // Move / Tweak / Resize Window (in Windowing mode) + ImGuiKey_GamepadL1, // L Bumper (Xbox) L (Switch) L1 (PS) // Tweak Slower / Focus Previous (in Windowing mode) + ImGuiKey_GamepadR1, // R Bumper (Xbox) R (Switch) R1 (PS) // Tweak Faster / Focus Next (in Windowing mode) + ImGuiKey_GamepadL2, // L Trig. (Xbox) ZL (Switch) L2 (PS) [Analog] + ImGuiKey_GamepadR2, // R Trig. (Xbox) ZR (Switch) R2 (PS) [Analog] + ImGuiKey_GamepadL3, // L Stick (Xbox) L3 (Switch) L3 (PS) + ImGuiKey_GamepadR3, // R Stick (Xbox) R3 (Switch) R3 (PS) + ImGuiKey_GamepadLStickLeft, // [Analog] // Move Window (in Windowing mode) + ImGuiKey_GamepadLStickRight, // [Analog] // Move Window (in Windowing mode) + ImGuiKey_GamepadLStickUp, // [Analog] // Move Window (in Windowing mode) + ImGuiKey_GamepadLStickDown, // [Analog] // Move Window (in Windowing mode) + ImGuiKey_GamepadRStickLeft, // [Analog] + ImGuiKey_GamepadRStickRight, // [Analog] + ImGuiKey_GamepadRStickUp, // [Analog] + ImGuiKey_GamepadRStickDown, // [Analog] + + // Aliases: Mouse Buttons (auto-submitted from AddMouseButtonEvent() calls) + // - This is mirroring the data also written to io.MouseDown[], io.MouseWheel, in a format allowing them to be accessed via standard key API. + ImGuiKey_MouseLeft, ImGuiKey_MouseRight, ImGuiKey_MouseMiddle, ImGuiKey_MouseX1, ImGuiKey_MouseX2, ImGuiKey_MouseWheelX, ImGuiKey_MouseWheelY, + + // [Internal] Reserved for mod storage + ImGuiKey_ReservedForModCtrl, ImGuiKey_ReservedForModShift, ImGuiKey_ReservedForModAlt, ImGuiKey_ReservedForModSuper, + ImGuiKey_COUNT, + + // Keyboard Modifiers (explicitly submitted by backend via AddKeyEvent() calls) + // - This is mirroring the data also written to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper, in a format allowing + // them to be accessed via standard key API, allowing calls such as IsKeyPressed(), IsKeyReleased(), querying duration etc. + // - Code polling every key (e.g. an interface to detect a key press for input mapping) might want to ignore those + // and prefer using the real keys (e.g. ImGuiKey_LeftCtrl, ImGuiKey_RightCtrl instead of ImGuiMod_Ctrl). + // - In theory the value of keyboard modifiers should be roughly equivalent to a logical or of the equivalent left/right keys. + // In practice: it's complicated; mods are often provided from different sources. Keyboard layout, IME, sticky keys and + // backends tend to interfere and break that equivalence. The safer decision is to relay that ambiguity down to the end-user... + ImGuiMod_None = 0, + ImGuiMod_Ctrl = 1 << 12, // Ctrl + ImGuiMod_Shift = 1 << 13, // Shift + ImGuiMod_Alt = 1 << 14, // Option/Menu + ImGuiMod_Super = 1 << 15, // Cmd/Super/Windows + ImGuiMod_Shortcut = 1 << 11, // Alias for Ctrl (non-macOS) _or_ Super (macOS). + ImGuiMod_Mask_ = 0xF800, // 5-bits + + // [Internal] Prior to 1.87 we required user to fill io.KeysDown[512] using their own native index + the io.KeyMap[] array. + // We are ditching this method but keeping a legacy path for user code doing e.g. IsKeyPressed(MY_NATIVE_KEY_CODE) + // If you need to iterate all keys (for e.g. an input mapper) you may use ImGuiKey_NamedKey_BEGIN..ImGuiKey_NamedKey_END. + ImGuiKey_NamedKey_BEGIN = 512, + ImGuiKey_NamedKey_END = ImGuiKey_COUNT, + ImGuiKey_NamedKey_COUNT = ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN, +#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO + ImGuiKey_KeysData_SIZE = ImGuiKey_NamedKey_COUNT, // Size of KeysData[]: only hold named keys + ImGuiKey_KeysData_OFFSET = ImGuiKey_NamedKey_BEGIN, // Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET) index. +#else + ImGuiKey_KeysData_SIZE = ImGuiKey_COUNT, // Size of KeysData[]: hold legacy 0..512 keycodes + named keys + ImGuiKey_KeysData_OFFSET = 0, // Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET) index. +#endif + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + ImGuiKey_ModCtrl = ImGuiMod_Ctrl, ImGuiKey_ModShift = ImGuiMod_Shift, ImGuiKey_ModAlt = ImGuiMod_Alt, ImGuiKey_ModSuper = ImGuiMod_Super, // Renamed in 1.89 + //ImGuiKey_KeyPadEnter = ImGuiKey_KeypadEnter, // Renamed in 1.87 +#endif +}; + +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO +// OBSOLETED in 1.88 (from July 2022): ImGuiNavInput and io.NavInputs[]. +// Official backends between 1.60 and 1.86: will keep working and feed gamepad inputs as long as IMGUI_DISABLE_OBSOLETE_KEYIO is not set. +// Custom backends: feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums. +enum ImGuiNavInput +{ + ImGuiNavInput_Activate, ImGuiNavInput_Cancel, ImGuiNavInput_Input, ImGuiNavInput_Menu, ImGuiNavInput_DpadLeft, ImGuiNavInput_DpadRight, ImGuiNavInput_DpadUp, ImGuiNavInput_DpadDown, + ImGuiNavInput_LStickLeft, ImGuiNavInput_LStickRight, ImGuiNavInput_LStickUp, ImGuiNavInput_LStickDown, ImGuiNavInput_FocusPrev, ImGuiNavInput_FocusNext, ImGuiNavInput_TweakSlow, ImGuiNavInput_TweakFast, + ImGuiNavInput_COUNT, +}; +#endif + +// Configuration flags stored in io.ConfigFlags. Set by user/application. +enum ImGuiConfigFlags_ +{ + ImGuiConfigFlags_None = 0, + ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. Enable full Tabbing + directional arrows + space/enter to activate. + ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. Backend also needs to set ImGuiBackendFlags_HasGamepad. + ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your backend, otherwise ImGui will react as if the mouse is jumping around back and forth. + ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set. + ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the backend. + ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct backend to not alter mouse cursor shape and visibility. Use if the backend cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead. + + // User storage (to allow your backend/engine to communicate to code that may be shared between multiple projects. Those flags are NOT used by core Dear ImGui) + ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware. + ImGuiConfigFlags_IsTouchScreen = 1 << 21, // Application is using a touch screen instead of a mouse. +}; + +// Backend capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom backend. +enum ImGuiBackendFlags_ +{ + ImGuiBackendFlags_None = 0, + ImGuiBackendFlags_HasGamepad = 1 << 0, // Backend Platform supports gamepad and currently has one connected. + ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Backend Platform supports honoring GetMouseCursor() value to change the OS cursor shape. + ImGuiBackendFlags_HasSetMousePos = 1 << 2, // Backend Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set). + ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3, // Backend Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices. +}; + +// Enumeration for PushStyleColor() / PopStyleColor() +enum ImGuiCol_ +{ + ImGuiCol_Text, + ImGuiCol_TextDisabled, + ImGuiCol_WindowBg, // Background of normal windows + ImGuiCol_ChildBg, // Background of child windows + ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows + ImGuiCol_Border, + ImGuiCol_BorderShadow, + ImGuiCol_FrameBg, // Background of checkbox, radio Structure, plot, slider, text input + ImGuiCol_FrameBgHovered, + ImGuiCol_FrameBgActive, + ImGuiCol_TitleBg, // Title bar + ImGuiCol_TitleBgActive, // Title bar when focused + ImGuiCol_TitleBgCollapsed, // Title bar when collapsed + ImGuiCol_MenuBarBg, + ImGuiCol_ScrollbarBg, + ImGuiCol_ScrollbarGrab, + ImGuiCol_ScrollbarGrabHovered, + ImGuiCol_ScrollbarGrabActive, + ImGuiCol_CheckMark, // Checkbox tick and RadioButton circle + ImGuiCol_SliderGrab, + ImGuiCol_SliderGrabActive, + ImGuiCol_Button, + ImGuiCol_ButtonHovered, + ImGuiCol_ButtonActive, + ImGuiCol_Header, // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem + ImGuiCol_HeaderHovered, + ImGuiCol_HeaderActive, + ImGuiCol_Separator, + ImGuiCol_SeparatorHovered, + ImGuiCol_SeparatorActive, + ImGuiCol_ResizeGrip, // Resize grip in lower-right and lower-left corners of windows. + ImGuiCol_ResizeGripHovered, + ImGuiCol_ResizeGripActive, + ImGuiCol_Tab, // TabItem in a TabBar + ImGuiCol_TabHovered, + ImGuiCol_TabActive, + ImGuiCol_TabUnfocused, + ImGuiCol_TabUnfocusedActive, + ImGuiCol_PlotLines, + ImGuiCol_PlotLinesHovered, + ImGuiCol_PlotHistogram, + ImGuiCol_PlotHistogramHovered, + ImGuiCol_TableHeaderBg, // Table header background + ImGuiCol_TableBorderStrong, // Table outer and header borders (prefer using Alpha=1.0 here) + ImGuiCol_TableBorderLight, // Table inner borders (prefer using Alpha=1.0 here) + ImGuiCol_TableRowBg, // Table row background (even rows) + ImGuiCol_TableRowBgAlt, // Table row background (odd rows) + ImGuiCol_TextSelectedBg, + ImGuiCol_DragDropTarget, // Rectangle highlighting a drop target + ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item + ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB + ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active + ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active + ImGuiCol_COUNT +}; + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. +// During initialization or between frames, feel free to just poke into ImGuiStyle directly. +// - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description. +// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot. +// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments. +// - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +enum ImGuiStyleVar_ +{ + // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + ImGuiStyleVar_Alpha, // float Alpha + ImGuiStyleVar_DisabledAlpha, // float DisabledAlpha + ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding + ImGuiStyleVar_WindowRounding, // float WindowRounding + ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize + ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize + ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign + ImGuiStyleVar_ChildRounding, // float ChildRounding + ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize + ImGuiStyleVar_PopupRounding, // float PopupRounding + ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize + ImGuiStyleVar_FramePadding, // ImVec2 FramePadding + ImGuiStyleVar_FrameRounding, // float FrameRounding + ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize + ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing + ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing + ImGuiStyleVar_IndentSpacing, // float IndentSpacing + ImGuiStyleVar_CellPadding, // ImVec2 CellPadding + ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize + ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding + ImGuiStyleVar_GrabMinSize, // float GrabMinSize + ImGuiStyleVar_GrabRounding, // float GrabRounding + ImGuiStyleVar_TabRounding, // float TabRounding + ImGuiStyleVar_TabBarBorderSize, // float TabBarBorderSize + ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign + ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign + ImGuiStyleVar_SeparatorTextBorderSize,// float SeparatorTextBorderSize + ImGuiStyleVar_SeparatorTextAlign, // ImVec2 SeparatorTextAlign + ImGuiStyleVar_SeparatorTextPadding,// ImVec2 SeparatorTextPadding + ImGuiStyleVar_COUNT +}; + +// Flags for InvisibleButton() [extended in imgui_internal.h] +enum ImGuiButtonFlags_ +{ + ImGuiButtonFlags_None = 0, + ImGuiButtonFlags_MouseButtonLeft = 1 << 0, // React on left mouse Structure (default) + ImGuiButtonFlags_MouseButtonRight = 1 << 1, // React on right mouse Structure + ImGuiButtonFlags_MouseButtonMiddle = 1 << 2, // React on center mouse Structure + + // [Internal] + ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle, + ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft, +}; + +// Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +enum ImGuiColorEditFlags_ +{ + ImGuiColorEditFlags_None = 0, + ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer). + ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on color square. + ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable color square preview next to the inputs. (e.g. to show only the inputs) + ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview color square). + ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small color square preview instead. + ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source. + ImGuiColorEditFlags_NoBorder = 1 << 10, // // ColorButton: disable border (which is enforced by default) + + // User Options (right-click on widget to change some of them). + ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + ImGuiColorEditFlags_HDR = 1 << 19, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well). + ImGuiColorEditFlags_DisplayRGB = 1 << 20, // [Display] // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex. + ImGuiColorEditFlags_DisplayHSV = 1 << 21, // [Display] // " + ImGuiColorEditFlags_DisplayHex = 1 << 22, // [Display] // " + ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + ImGuiColorEditFlags_Float = 1 << 24, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [Picker] // ColorPicker: bar for Hue, rectangle for Sat/Value. + ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [Picker] // ColorPicker: wheel for Hue, triangle for Sat/Value. + ImGuiColorEditFlags_InputRGB = 1 << 27, // [Input] // ColorEdit, ColorPicker: input and output data in RGB format. + ImGuiColorEditFlags_InputHSV = 1 << 28, // [Input] // ColorEdit, ColorPicker: input and output data in HSV format. + + // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to + // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup. + ImGuiColorEditFlags_DefaultOptions_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar, + + // [Internal] Masks + ImGuiColorEditFlags_DisplayMask_ = ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex, + ImGuiColorEditFlags_DataTypeMask_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float, + ImGuiColorEditFlags_PickerMask_ = ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar, + ImGuiColorEditFlags_InputMask_ = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV, + + // Obsolete names + //ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69] +}; + +// Flags for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc. +// We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them. +// (Those are per-item flags. There are shared flags in ImGuiIO: io.ConfigDragClickToInputText) +enum ImGuiSliderFlags_ +{ + ImGuiSliderFlags_None = 0, + ImGuiSliderFlags_AlwaysClamp = 1 << 4, // Clamp value to min/max bounds when input manually with CTRL+Click. By default CTRL+Click allows going out of bounds. + ImGuiSliderFlags_Logarithmic = 1 << 5, // Make the widget logarithmic (linear otherwise). Consider using ImGuiSliderFlags_NoRoundToFormat with this if using a format-string with small amount of digits. + ImGuiSliderFlags_NoRoundToFormat = 1 << 6, // Disable rounding underlying value to match precision of the display format string (e.g. %.3f values are rounded to those 3 digits) + ImGuiSliderFlags_NoInput = 1 << 7, // Disable CTRL+Click or Enter key allowing to input text directly into the widget + ImGuiSliderFlags_InvalidMask_ = 0x7000000F, // [Internal] We treat using those bits as being potentially a 'float power' argument from the previous API that has got miscast to this enum, and will trigger an assert if needed. + + // Obsolete names + //ImGuiSliderFlags_ClampOnInput = ImGuiSliderFlags_AlwaysClamp, // [renamed in 1.79] +}; + +// Identify a mouse Structure. +// Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience. +enum ImGuiMouseButton_ +{ + ImGuiMouseButton_Left = 0, + ImGuiMouseButton_Right = 1, + ImGuiMouseButton_Middle = 2, + ImGuiMouseButton_COUNT = 5 +}; + +// Enumeration for GetMouseCursor() +// User code may request backend to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here +enum ImGuiMouseCursor_ +{ + ImGuiMouseCursor_None = -1, + ImGuiMouseCursor_Arrow = 0, + ImGuiMouseCursor_TextInput, // When hovering over InputText, etc. + ImGuiMouseCursor_ResizeAll, // (Unused by Dear ImGui functions) + ImGuiMouseCursor_ResizeNS, // When hovering over a horizontal border + ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column + ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window + ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window + ImGuiMouseCursor_Hand, // (Unused by Dear ImGui functions. Use for e.g. hyperlinks) + ImGuiMouseCursor_NotAllowed, // When hovering something with disallowed interaction. Usually a crossed circle. + ImGuiMouseCursor_COUNT +}; + +// Enumeration for AddMouseSourceEvent() actual source of Mouse Input data. +// Historically we use "Mouse" terminology everywhere to indicate pointer data, e.g. MousePos, IsMousePressed(), io.AddMousePosEvent() +// But that "Mouse" data can come from different source which occasionally may be useful for application to know about. +// You can submit a change of pointer type using io.AddMouseSourceEvent(). +enum ImGuiMouseSource : int +{ + ImGuiMouseSource_Mouse = 0, // Input is coming from an actual mouse. + ImGuiMouseSource_TouchScreen, // Input is coming from a touch screen (no hovering prior to initial press, less precise initial press aiming, dual-axis wheeling possible). + ImGuiMouseSource_Pen, // Input is coming from a pressure/magnetic pen (often used in conjunction with high-sampling rates). + ImGuiMouseSource_COUNT +}; + +// Enumeration for ImGui::SetNextWindow***(), SetWindow***(), SetNextItem***() functions +// Represent a condition. +// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always. +enum ImGuiCond_ +{ + ImGuiCond_None = 0, // No condition (always set the variable), same as _Always + ImGuiCond_Always = 1 << 0, // No condition (always set the variable), same as _None + ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call will succeed) + ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file) + ImGuiCond_Appearing = 1 << 3, // Set the variable if the object/window is appearing after being hidden/inactive (or the first time) +}; + +//----------------------------------------------------------------------------- +// [SECTION] Tables API flags and structures (ImGuiTableFlags, ImGuiTableColumnFlags, ImGuiTableRowFlags, ImGuiTableBgTarget, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs) +//----------------------------------------------------------------------------- + +// Flags for ImGui::BeginTable() +// - Important! Sizing policies have complex and subtle side effects, much more so than you would expect. +// Read comments/demos carefully + experiment with live demos to get acquainted with them. +// - The DEFAULT sizing policies are: +// - Default to ImGuiTableFlags_SizingFixedFit if ScrollX is on, or if host window has ImGuiWindowFlags_AlwaysAutoResize. +// - Default to ImGuiTableFlags_SizingStretchSame if ScrollX is off. +// - When ScrollX is off: +// - Table defaults to ImGuiTableFlags_SizingStretchSame -> all Columns defaults to ImGuiTableColumnFlags_WidthStretch with same weight. +// - Columns sizing policy allowed: Stretch (default), Fixed/Auto. +// - Fixed Columns (if any) will generally obtain their requested width (unless the table cannot fit them all). +// - Stretch Columns will share the remaining width according to their respective weight. +// - Mixed Fixed/Stretch columns is possible but has various side-effects on resizing behaviors. +// The typical use of mixing sizing policies is: any number of LEADING Fixed columns, followed by one or two TRAILING Stretch columns. +// (this is because the visible order of columns have subtle but necessary effects on how they react to manual resizing). +// - When ScrollX is on: +// - Table defaults to ImGuiTableFlags_SizingFixedFit -> all Columns defaults to ImGuiTableColumnFlags_WidthFixed +// - Columns sizing policy allowed: Fixed/Auto mostly. +// - Fixed Columns can be enlarged as needed. Table will show a horizontal scrollbar if needed. +// - When using auto-resizing (non-resizable) fixed columns, querying the content width to use item right-alignment e.g. SetNextItemWidth(-FLT_MIN) doesn't make sense, would create a feedback loop. +// - Using Stretch columns OFTEN DOES NOT MAKE SENSE if ScrollX is on, UNLESS you have specified a value for 'inner_width' in BeginTable(). +// If you specify a value for 'inner_width' then effectively the scrolling space is known and Stretch or mixed Fixed/Stretch columns become meaningful again. +// - Read on documentation at the top of imgui_tables.cpp for details. +enum ImGuiTableFlags_ +{ + // Features + ImGuiTableFlags_None = 0, + ImGuiTableFlags_Resizable = 1 << 0, // Enable resizing columns. + ImGuiTableFlags_Reorderable = 1 << 1, // Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers) + ImGuiTableFlags_Hideable = 1 << 2, // Enable hiding/disabling columns in context menu. + ImGuiTableFlags_Sortable = 1 << 3, // Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see ImGuiTableFlags_SortMulti and ImGuiTableFlags_SortTristate. + ImGuiTableFlags_NoSavedSettings = 1 << 4, // Disable persisting columns order, width and sort settings in the .ini file. + ImGuiTableFlags_ContextMenuInBody = 1 << 5, // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow(). + // Decorations + ImGuiTableFlags_RowBg = 1 << 6, // Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually) + ImGuiTableFlags_BordersInnerH = 1 << 7, // Draw horizontal borders between rows. + ImGuiTableFlags_BordersOuterH = 1 << 8, // Draw horizontal borders at the top and bottom. + ImGuiTableFlags_BordersInnerV = 1 << 9, // Draw vertical borders between columns. + ImGuiTableFlags_BordersOuterV = 1 << 10, // Draw vertical borders on the left and right sides. + ImGuiTableFlags_BordersH = ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH, // Draw horizontal borders. + ImGuiTableFlags_BordersV = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV, // Draw vertical borders. + ImGuiTableFlags_BordersInner = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH, // Draw inner borders. + ImGuiTableFlags_BordersOuter = ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH, // Draw outer borders. + ImGuiTableFlags_Borders = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter, // Draw all borders. + ImGuiTableFlags_NoBordersInBody = 1 << 11, // [ALPHA] Disable vertical borders in columns Body (borders will always appear in Headers). -> May move to style + ImGuiTableFlags_NoBordersInBodyUntilResize = 1 << 12, // [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appear in Headers). -> May move to style + // Sizing Policy (read above for defaults) + ImGuiTableFlags_SizingFixedFit = 1 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width. + ImGuiTableFlags_SizingFixedSame = 2 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible. + ImGuiTableFlags_SizingStretchProp = 3 << 13, // Columns default to _WidthStretch with default weights proportional to each columns contents widths. + ImGuiTableFlags_SizingStretchSame = 4 << 13, // Columns default to _WidthStretch with default weights all equal, unless overridden by TableSetupColumn(). + // Sizing Extra Options + ImGuiTableFlags_NoHostExtendX = 1 << 16, // Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used. + ImGuiTableFlags_NoHostExtendY = 1 << 17, // Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible. + ImGuiTableFlags_NoKeepColumnsVisible = 1 << 18, // Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable. + ImGuiTableFlags_PreciseWidths = 1 << 19, // Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth. + // Clipping + ImGuiTableFlags_NoClip = 1 << 20, // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze(). + // Padding + ImGuiTableFlags_PadOuterX = 1 << 21, // Default if BordersOuterV is on. Enable outermost padding. Generally desirable if you have headers. + ImGuiTableFlags_NoPadOuterX = 1 << 22, // Default if BordersOuterV is off. Disable outermost padding. + ImGuiTableFlags_NoPadInnerX = 1 << 23, // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off). + // Scrolling + ImGuiTableFlags_ScrollX = 1 << 24, // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this creates a child window, ScrollY is currently generally recommended when using ScrollX. + ImGuiTableFlags_ScrollY = 1 << 25, // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. + // Sorting + ImGuiTableFlags_SortMulti = 1 << 26, // Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1). + ImGuiTableFlags_SortTristate = 1 << 27, // Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0). + // Miscellaneous + ImGuiTableFlags_HighlightHoveredColumn = 1 << 28, // Highlight column headers when hovered (may evolve into a fuller highlight) + + // [Internal] Combinations and masks + ImGuiTableFlags_SizingMask_ = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame, +}; + +// Flags for ImGui::TableSetupColumn() +enum ImGuiTableColumnFlags_ +{ + // Input configuration flags + ImGuiTableColumnFlags_None = 0, + ImGuiTableColumnFlags_Disabled = 1 << 0, // Overriding/master disable flag: hide column, won't show in context menu (unlike calling TableSetColumnEnabled() which manipulates the user accessible state) + ImGuiTableColumnFlags_DefaultHide = 1 << 1, // Default as a hidden/disabled column. + ImGuiTableColumnFlags_DefaultSort = 1 << 2, // Default as a sorting column. + ImGuiTableColumnFlags_WidthStretch = 1 << 3, // Column will stretch. Preferable with horizontal scrolling disabled (default if table sizing policy is _SizingStretchSame or _SizingStretchProp). + ImGuiTableColumnFlags_WidthFixed = 1 << 4, // Column will not stretch. Preferable with horizontal scrolling enabled (default if table sizing policy is _SizingFixedFit and table is resizable). + ImGuiTableColumnFlags_NoResize = 1 << 5, // Disable manual resizing. + ImGuiTableColumnFlags_NoReorder = 1 << 6, // Disable manual reordering this column, this will also prevent other columns from crossing over this column. + ImGuiTableColumnFlags_NoHide = 1 << 7, // Disable ability to hide/disable this column. + ImGuiTableColumnFlags_NoClip = 1 << 8, // Disable clipping for this column (all NoClip columns will render in a same draw command). + ImGuiTableColumnFlags_NoSort = 1 << 9, // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table). + ImGuiTableColumnFlags_NoSortAscending = 1 << 10, // Disable ability to sort in the ascending direction. + ImGuiTableColumnFlags_NoSortDescending = 1 << 11, // Disable ability to sort in the descending direction. + ImGuiTableColumnFlags_NoHeaderLabel = 1 << 12, // TableHeadersRow() will not submit horizontal label for this column. Convenient for some small columns. Name will still appear in context menu or in angled headers. + ImGuiTableColumnFlags_NoHeaderWidth = 1 << 13, // Disable header text width contribution to automatic column width. + ImGuiTableColumnFlags_PreferSortAscending = 1 << 14, // Make the initial sort direction Ascending when first sorting on this column (default). + ImGuiTableColumnFlags_PreferSortDescending = 1 << 15, // Make the initial sort direction Descending when first sorting on this column. + ImGuiTableColumnFlags_IndentEnable = 1 << 16, // Use current Indent value when entering cell (default for column 0). + ImGuiTableColumnFlags_IndentDisable = 1 << 17, // Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored. + ImGuiTableColumnFlags_AngledHeader = 1 << 18, // TableHeadersRow() will submit an angled header row for this column. Note this will add an extra row. + + // Output status flags, read-only via TableGetColumnFlags() + ImGuiTableColumnFlags_IsEnabled = 1 << 24, // Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags. + ImGuiTableColumnFlags_IsVisible = 1 << 25, // Status: is visible == is enabled AND not clipped by scrolling. + ImGuiTableColumnFlags_IsSorted = 1 << 26, // Status: is currently part of the sort specs + ImGuiTableColumnFlags_IsHovered = 1 << 27, // Status: is hovered by mouse + + // [Internal] Combinations and masks + ImGuiTableColumnFlags_WidthMask_ = ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthFixed, + ImGuiTableColumnFlags_IndentMask_ = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable, + ImGuiTableColumnFlags_StatusMask_ = ImGuiTableColumnFlags_IsEnabled | ImGuiTableColumnFlags_IsVisible | ImGuiTableColumnFlags_IsSorted | ImGuiTableColumnFlags_IsHovered, + ImGuiTableColumnFlags_NoDirectResize_ = 1 << 30, // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge) +}; + +// Flags for ImGui::TableNextRow() +enum ImGuiTableRowFlags_ +{ + ImGuiTableRowFlags_None = 0, + ImGuiTableRowFlags_Headers = 1 << 0, // Identify header row (set default background color + width of its contents accounted differently for auto column width) +}; + +// Enum for ImGui::TableSetBgColor() +// Background colors are rendering in 3 layers: +// - Layer 0: draw with RowBg0 color if set, otherwise draw with ColumnBg0 if set. +// - Layer 1: draw with RowBg1 color if set, otherwise draw with ColumnBg1 if set. +// - Layer 2: draw with CellBg color if set. +// The purpose of the two row/columns layers is to let you decide if a background color change should override or blend with the existing color. +// When using ImGuiTableFlags_RowBg on the table, each row has the RowBg0 color automatically set for odd/even rows. +// If you set the color of RowBg0 target, your color will override the existing RowBg0 color. +// If you set the color of RowBg1 or ColumnBg1 target, your color will blend over the RowBg0 color. +enum ImGuiTableBgTarget_ +{ + ImGuiTableBgTarget_None = 0, + ImGuiTableBgTarget_RowBg0 = 1, // Set row background color 0 (generally used for background, automatically set when ImGuiTableFlags_RowBg is used) + ImGuiTableBgTarget_RowBg1 = 2, // Set row background color 1 (generally used for selection marking) + ImGuiTableBgTarget_CellBg = 3, // Set cell background color (top-most color) +}; + +// Sorting specifications for a table (often handling sort specs for a single column, occasionally more) +// Obtained by calling TableGetSortSpecs(). +// When 'SpecsDirty == true' you can sort your data. It will be true with sorting specs have changed since last call, or the first time. +// Make sure to set 'SpecsDirty = false' after sorting, else you may wastefully sort your data every frame! +struct ImGuiTableSortSpecs +{ + const ImGuiTableColumnSortSpecs* Specs; // Pointer to sort spec array. + int SpecsCount; // Sort spec count. Most often 1. May be > 1 when ImGuiTableFlags_SortMulti is enabled. May be == 0 when ImGuiTableFlags_SortTristate is enabled. + bool SpecsDirty; // Set to true when specs have changed since last time! Use this to sort again, then clear the flag. + + ImGuiTableSortSpecs() { memset(this, 0, sizeof(*this)); } +}; + +// Sorting specification for one column of a table (sizeof == 12 bytes) +struct ImGuiTableColumnSortSpecs +{ + ImGuiID ColumnUserID; // User id of the column (if specified by a TableSetupColumn() call) + ImS16 ColumnIndex; // Index of the column + ImS16 SortOrder; // Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here) + ImGuiSortDirection SortDirection : 8; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending + + ImGuiTableColumnSortSpecs() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Helpers: Memory allocations macros, ImVector<> +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE() +// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax. +// Defining a custom placement new() with a custom parameter allows us to bypass including which on some platforms complains when user has disabled exceptions. +//----------------------------------------------------------------------------- + +struct ImNewWrapper {}; +inline void* operator new(size_t, ImNewWrapper, void* ptr) { return ptr; } +inline void operator delete(void*, ImNewWrapper, void*) {} // This is only required so we can use the symmetrical new() +#define IM_ALLOC(_SIZE) ImGui::MemAlloc(_SIZE) +#define IM_FREE(_PTR) ImGui::MemFree(_PTR) +#define IM_PLACEMENT_NEW(_PTR) new(ImNewWrapper(), _PTR) +#define IM_NEW(_TYPE) new(ImNewWrapper(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE +template void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } } + +//----------------------------------------------------------------------------- +// ImVector<> +// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug). +//----------------------------------------------------------------------------- +// - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it. +// - We use std-like naming convention here, which is a little unusual for this codebase. +// - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs. +// - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that, +// Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset. +//----------------------------------------------------------------------------- + +IM_MSVC_RUNTIME_CHECKS_OFF +template +struct ImVector +{ + int Size; + int Capacity; + T* Data; + + // Provide standard typedefs but we don't use them ourselves. + typedef T value_type; + typedef value_type* iterator; + typedef const value_type* const_iterator; + + // Constructors, destructor + inline ImVector() { Size = Capacity = 0; Data = NULL; } + inline ImVector(const ImVector& src) { Size = Capacity = 0; Data = NULL; operator=(src); } + inline ImVector& operator=(const ImVector& src) { clear(); resize(src.Size); if (src.Data) memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; } + inline ~ImVector() { if (Data) IM_FREE(Data); } // Important: does not destruct anything + + inline void clear() { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } } // Important: does not destruct anything + inline void clear_delete() { for (int n = 0; n < Size; n++) IM_DELETE(Data[n]); clear(); } // Important: never called automatically! always explicit. + inline void clear_destruct() { for (int n = 0; n < Size; n++) Data[n].~T(); clear(); } // Important: never called automatically! always explicit. + + inline bool empty() const { return Size == 0; } + inline int size() const { return Size; } + inline int size_in_bytes() const { return Size * (int)sizeof(T); } + inline int max_size() const { return 0x7FFFFFFF / (int)sizeof(T); } + inline int capacity() const { return Capacity; } + inline T& operator[](int i) { IM_ASSERT(i >= 0 && i < Size); return Data[i]; } + inline const T& operator[](int i) const { IM_ASSERT(i >= 0 && i < Size); return Data[i]; } + + inline T* begin() { return Data; } + inline const T* begin() const { return Data; } + inline T* end() { return Data + Size; } + inline const T* end() const { return Data + Size; } + inline T& front() { IM_ASSERT(Size > 0); return Data[0]; } + inline const T& front() const { IM_ASSERT(Size > 0); return Data[0]; } + inline T& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + inline const T& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity / 2) : 8; return new_capacity > sz ? new_capacity : sz; } + inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + inline void resize(int new_size, const T& v) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; } + inline void shrink(int new_size) { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation + inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; } + inline void reserve_discard(int new_capacity) { if (new_capacity <= Capacity) return; if (Data) IM_FREE(Data); Data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); Capacity = new_capacity; } + + // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden. + inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; } + inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); } + inline T* erase(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; } + inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data + Size && it_last >= it && it_last <= Data + Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - (size_t)count) * sizeof(T)); Size -= (int)count; return Data + off; } + inline T* erase_unsorted(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; if (it < Data + Size - 1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; } + inline T* insert(const T* it, const T& v) { IM_ASSERT(it >= Data && it <= Data + Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; } + inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + inline T* find(const T& v) { T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } + inline const T* find(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } + inline int find_index(const T& v) const { const T* data_end = Data + Size; const T* it = find(v); if (it == data_end) return -1; const ptrdiff_t off = it - Data; return (int)off; } + inline bool find_erase(const T& v) { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; } + inline bool find_erase_unsorted(const T& v) { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; } + inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; } +}; +IM_MSVC_RUNTIME_CHECKS_RESTORE + +//----------------------------------------------------------------------------- +// [SECTION] ImGuiStyle +//----------------------------------------------------------------------------- +// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame(). +// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values, +// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors. +//----------------------------------------------------------------------------- + +struct ImGuiStyle +{ + float Alpha; // Global alpha applies to everything in Dear ImGui. + float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha. + ImVec2 WindowPadding; // Padding within a window. + float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended. + float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constrain individual windows, use SetNextWindowSizeConstraints(). + ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + ImGuiDir WindowMenuButtonPosition; // Side of the collapsing/docking Structure in the title bar (None/Left/Right). Defaults to ImGuiDir_Left. + float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding) + float PopupBorderSize; // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets). + float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines. + ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label). + ImVec2 CellPadding; // Padding within a table cell. CellPadding.y may be altered between different rows. + ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1). + float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar. + float ScrollbarRounding; // Radius of grab corners for scrollbar. + float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + float LogSliderDeadzone; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero. + float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs. + float TabBorderSize; // Thickness of border around tabs. + float TabMinWidthForCloseButton; // Minimum width for close Structure to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close Structure unless selected. + float TabBarBorderSize; // Thickness of tab-bar separator, which takes on the tab active color to denote focus. + float TableAngledHeadersAngle; // Angle of angled headers (supported values range from -50.0f degrees to +50.0f degrees). + ImGuiDir ColorButtonPosition; // Side of the color Structure in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right. + ImVec2 ButtonTextAlign; // Alignment of Structure text when Structure is larger than text. Defaults to (0.5f, 0.5f) (centered). + ImVec2 SelectableTextAlign; // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line. + float SeparatorTextBorderSize; // Thickkness of border in SeparatorText() + ImVec2 SeparatorTextAlign; // Alignment of text within the separator. Defaults to (0.0f, 0.5f) (left aligned, center). + ImVec2 SeparatorTextPadding; // Horizontal offset of text from each edge of the separator + spacing on other axis. Generally small values. .y is recommended to be == FramePadding.y. + ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows. + ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly! + float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later. + bool AntiAliasedLines; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList). + bool AntiAliasedLinesUseTex; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). Latched at the beginning of the frame (copied to ImDrawList). + bool AntiAliasedFill; // Enable anti-aliased edges around filled shapes (rounded rectangles, circles, etc.). Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList). + float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + float CircleTessellationMaxError; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry. + ImVec4 Colors[ImGuiCol_COUNT]; + + // Behaviors + // (It is possible to modify those fields mid-frame if specific behavior need it, unlike e.g. configuration fields in ImGuiIO) + float HoverStationaryDelay; // Delay for IsItemHovered(ImGuiHoveredFlags_Stationary). Time required to consider mouse stationary. + float HoverDelayShort; // Delay for IsItemHovered(ImGuiHoveredFlags_DelayShort). Usually used along with HoverStationaryDelay. + float HoverDelayNormal; // Delay for IsItemHovered(ImGuiHoveredFlags_DelayNormal). " + ImGuiHoveredFlags HoverFlagsForTooltipMouse;// Default flags when using IsItemHovered(ImGuiHoveredFlags_ForTooltip) or BeginItemTooltip()/SetItemTooltip() while using mouse. + ImGuiHoveredFlags HoverFlagsForTooltipNav; // Default flags when using IsItemHovered(ImGuiHoveredFlags_ForTooltip) or BeginItemTooltip()/SetItemTooltip() while using keyboard/gamepad. + + IMGUI_API ImGuiStyle(); + IMGUI_API void ScaleAllSizes(float scale_factor); +}; + +//----------------------------------------------------------------------------- +// [SECTION] ImGuiIO +//----------------------------------------------------------------------------- +// Communicate most settings and inputs/outputs to Dear ImGui using this structure. +// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage. +//----------------------------------------------------------------------------- + +// [Internal] Storage used by IsKeyDown(), IsKeyPressed() etc functions. +// If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and *NOT* io.KeysData[key]->DownDuration. +struct ImGuiKeyData +{ + bool Down; // True for if key is down + float DownDuration; // Duration the key has been down (<0.0f: not pressed, 0.0f: just pressed, >0.0f: time held) + float DownDurationPrev; // Last frame duration the key has been down + float AnalogValue; // 0.0f..1.0f for gamepad values +}; + +struct ImGuiIO +{ + //------------------------------------------------------------------ + // Configuration // Default value + //------------------------------------------------------------------ + + ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc. + ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by backend (imgui_impl_xxx files or custom backend) to communicate features supported by the backend. + ImVec2 DisplaySize; // // Main display size, in pixels (generally == GetMainViewport()->Size). May change every frame. + float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. May change every frame. + float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds. + const char* IniFilename; // = "imgui.ini" // Path to .ini file (important: default "imgui.ini" is relative to current working dir!). Set NULL to disable automatic .ini loading/saving or if you want to manually call LoadIniSettingsXXX() / SaveIniSettingsXXX() functions. + const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + void* UserData; // = NULL // Store your own data. + + ImFontAtlas*Fonts; // // Font atlas: load, rasterize and pack one or more fonts into a single texture. + float FontGlobalScale; // = 1.0f // Global scale all fonts + bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + ImVec2 DisplayFramebufferScale; // = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale. + + // Miscellaneous options + bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by backend implementations. + bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl. + bool ConfigInputTrickleEventQueue; // = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. Structure down + up) will be spread over multiple frames, improving interactions with low framerates. + bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting). + bool ConfigInputTextEnterKeepActive; // = false // [BETA] Pressing Enter will keep item active and select contents (single-line only). + bool ConfigDragClickToInputText; // = false // [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard. + bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag) + bool ConfigWindowsMoveFromTitleBarOnly; // = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar. + float ConfigMemoryCompactTimer; // = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable. + + // Inputs Behaviors + // (other variables, ones which are expected to be tweaked within UI code, are exposed in ImGuiStyle) + float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging. + float KeyRepeatDelay; // = 0.275f // When holding a key/Structure, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + float KeyRepeatRate; // = 0.050f // When holding a key/Structure, rate at which it repeats, in seconds. + + //------------------------------------------------------------------ + // Debug options + //------------------------------------------------------------------ + + // Option to enable various debug tools showing buttons that will call the IM_DEBUG_BREAK() macro. + // - The Item Picker tool will be available regardless of this being enabled, in order to maximize its discoverability. + // - Requires a debugger being attached, otherwise IM_DEBUG_BREAK() options will appear to crash your application. + // e.g. io.ConfigDebugIsDebuggerPresent = ::IsDebuggerPresent() on Win32, or refer to ImOsIsDebuggerPresent() imgui_test_engine/imgui_te_utils.cpp for a Unix compatible version). + bool ConfigDebugIsDebuggerPresent; // = false // Enable various tools calling IM_DEBUG_BREAK(). + + // Tools to test correct Begin/End and BeginChild/EndChild behaviors. + // - Presently Begin()/End() and BeginChild()/EndChild() needs to ALWAYS be called in tandem, regardless of return value of BeginXXX() + // - This is inconsistent with other BeginXXX functions and create confusion for many users. + // - We expect to update the API eventually. In the meanwhile we provide tools to facilitate checking user-code behavior. + bool ConfigDebugBeginReturnValueOnce;// = false // First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows. + bool ConfigDebugBeginReturnValueLoop;// = false // Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running. + + // Option to deactivate io.AddFocusEvent(false) handling. + // - May facilitate interactions with a debugger when focus loss leads to clearing inputs data. + // - Backends may have other side-effects on focus loss, so this will reduce side-effects but not necessary remove all of them. + bool ConfigDebugIgnoreFocusLoss; // = false // Ignore io.AddFocusEvent(false), consequently not calling io.ClearInputKeys() in input processing. + + // Options to audit .ini data + bool ConfigDebugIniSettings; // = false // Save .ini data with extra comments (particularly helpful for Docking, but makes saving slower) + + //------------------------------------------------------------------ + // Platform Functions + // (the imgui_impl_xxxx backend files are setting those up for you) + //------------------------------------------------------------------ + + // Optional: Platform/Renderer backend name (informational only! will be displayed in About Window) + User data for backend/wrappers to store their own stuff. + const char* BackendPlatformName; // = NULL + const char* BackendRendererName; // = NULL + void* BackendPlatformUserData; // = NULL // User data for platform backend + void* BackendRendererUserData; // = NULL // User data for renderer backend + void* BackendLanguageUserData; // = NULL // User data for non C++ programming language backend + + // Optional: Access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + const char* (*GetClipboardTextFn)(void* user_data); + void (*SetClipboardTextFn)(void* user_data, const char* text); + void* ClipboardUserData; + + // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows) + // (default to use native imm32 api on Windows) + void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data); + + // Optional: Platform locale + ImWchar PlatformLocaleDecimalPoint; // '.' // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point + + //------------------------------------------------------------------ + // Input - Call before calling NewFrame() + //------------------------------------------------------------------ + + // Input Functions + IMGUI_API void AddKeyEvent(ImGuiKey key, bool down); // Queue a new key down/up event. Key should be "translated" (as in, generally ImGuiKey_A matches the key end-user would use to emit an 'A' character) + IMGUI_API void AddKeyAnalogEvent(ImGuiKey key, bool down, float v); // Queue a new key down/up event for analog values (e.g. ImGuiKey_Gamepad_ values). Dead-zones should be handled by the backend. + IMGUI_API void AddMousePosEvent(float x, float y); // Queue a mouse position update. Use -FLT_MAX,-FLT_MAX to signify no mouse (e.g. app not focused and not hovered) + IMGUI_API void AddMouseButtonEvent(int button, bool down); // Queue a mouse Structure change + IMGUI_API void AddMouseWheelEvent(float wheel_x, float wheel_y); // Queue a mouse wheel update. wheel_y<0: scroll down, wheel_y>0: scroll up, wheel_x<0: scroll right, wheel_x>0: scroll left. + IMGUI_API void AddMouseSourceEvent(ImGuiMouseSource source); // Queue a mouse source change (Mouse/TouchScreen/Pen) + IMGUI_API void AddFocusEvent(bool focused); // Queue a gain/loss of focus for the application (generally based on OS/platform focus of your window) + IMGUI_API void AddInputCharacter(unsigned int c); // Queue a new character input + IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue a new character input from a UTF-16 character, it can be a surrogate + IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue a new characters input from a UTF-8 string + + IMGUI_API void SetKeyEventNativeData(ImGuiKey key, int native_keycode, int native_scancode, int native_legacy_index = -1); // [Optional] Specify index for legacy <1.87 IsKeyXXX() functions with native indices + specify native keycode, scancode. + IMGUI_API void SetAppAcceptingEvents(bool accepting_events); // Set master flag for accepting key/mouse/text events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen. + IMGUI_API void ClearEventsQueue(); // Clear all incoming events. + IMGUI_API void ClearInputKeys(); // Clear current keyboard/mouse/gamepad state + current frame text input buffer. Equivalent to releasing all keys/buttons. +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + IMGUI_API void ClearInputCharacters(); // [Obsoleted in 1.89.8] Clear the current frame text input buffer. Now included within ClearInputKeys(). +#endif + + //------------------------------------------------------------------ + // Output - Updated by NewFrame() or EndFrame()/Renderer() + // (when reading from the io.WantCaptureMouse, io.WantCaptureKeyboard flags to dispatch your inputs, it is + // generally easier and more correct to use their state BEFORE calling NewFrame(). See FAQ for details!) + //------------------------------------------------------------------ + + bool WantCaptureMouse; // Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.). + bool WantCaptureKeyboard; // Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.). + bool WantTextInput; // Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + bool WantSetMousePos; // MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled. + bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. Important: clear io.WantSaveIniSettings yourself after saving! + bool NavActive; // Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag. + bool NavVisible; // Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events). + float Framerate; // Estimate of application framerate (rolling average over 60 frames, based on io.DeltaTime), in frame per second. Solely for convenience. Slow applications may not want to use a moving average or may want to reset underlying buffers occasionally. + int MetricsRenderVertices; // Vertices output during last call to Renderer() + int MetricsRenderIndices; // Indices output during last call to Renderer() = number of triangles * 3 + int MetricsRenderWindows; // Number of visible windows + int MetricsActiveWindows; // Number of active windows + ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + + // Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame. + // This is still temporarily supported as a legacy feature. However the new preferred scheme is for backend to call io.AddKeyEvent(). + // Old (<1.87): ImGui::IsKeyPressed(ImGui::GetIO().KeyMap[ImGuiKey_Space]) --> New (1.87+) ImGui::IsKeyPressed(ImGuiKey_Space) +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + int KeyMap[ImGuiKey_COUNT]; // [LEGACY] Input: map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. The first 512 are now unused and should be kept zero. Legacy backend will write into KeyMap[] using ImGuiKey_ indices which are always >512. + bool KeysDown[ImGuiKey_COUNT]; // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow. + float NavInputs[ImGuiNavInput_COUNT]; // [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums. + //void* ImeWindowHandle; // [Obsoleted in 1.87] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning. +#endif + + //------------------------------------------------------------------ + // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + ImGuiContext* Ctx; // Parent UI context (needs to be set explicitly by parent). + + // Main Input State + // (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead) + // (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere) + ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.) + bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Other buttons allow us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. >0 scrolls Up, <0 scrolls Down. Hold SHIFT to turn vertical scroll into horizontal scroll. + float MouseWheelH; // Mouse wheel Horizontal. >0 scrolls Left, <0 scrolls Right. Most users don't have a mouse with a horizontal wheel, may not be filled by all backends. + ImGuiMouseSource MouseSource; // Mouse actual input peripheral (Mouse/TouchScreen/Pen). + bool KeyCtrl; // Keyboard modifier down: Control + bool KeyShift; // Keyboard modifier down: Shift + bool KeyAlt; // Keyboard modifier down: Alt + bool KeySuper; // Keyboard modifier down: Cmd/Super/Windows + + // Other state maintained from data above + IO function calls + ImGuiKeyChord KeyMods; // Key mods flags (any of ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Alt/ImGuiMod_Super flags, same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags. DOES NOT CONTAINS ImGuiMod_Shortcut which is pretranslated). Read-only, updated by NewFrame() + ImGuiKeyData KeysData[ImGuiKey_KeysData_SIZE]; // Key state for all known keys. Use IsKeyXXX() functions to access this. + bool WantCaptureMouseUnlessPopupClose; // Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup. + ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid) + ImVec2 MouseClickedPos[5]; // Position at time of clicking + double MouseClickedTime[5]; // Time of last click (used to figure out double-click) + bool MouseClicked[5]; // Mouse Structure went from !Down to Down (same as MouseClickedCount[x] != 0) + bool MouseDoubleClicked[5]; // Has mouse Structure been double-clicked? (same as MouseClickedCount[x] == 2) + ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down + ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done. + bool MouseReleased[5]; // Mouse Structure went from Down to !Down + bool MouseDownOwned[5]; // Track if Structure was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds. + bool MouseDownOwnedUnlessPopupClose[5]; // Track if Structure was clicked inside a dear imgui window. + bool MouseWheelRequestAxisSwap; // On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system. + float MouseDownDuration[5]; // Duration the mouse Structure has been down (0.0f == just clicked) + float MouseDownDurationPrev[5]; // Previous time the mouse Structure has been down + float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds) + float PenPressure; // Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui. + bool AppFocusLost; // Only modify via AddFocusEvent() + bool AppAcceptingEvents; // Only modify via SetAppAcceptingEvents() + ImS8 BackendUsingLegacyKeyArrays; // -1: unknown, 0: using AddKeyEvent(), 1: using legacy io.KeysDown[] + bool BackendUsingLegacyNavInputArray; // 0: using AddKeyAnalogEvent(), 1: writing to legacy io.NavInputs[] directly + ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16() + ImVector InputQueueCharacters; // Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper. + + IMGUI_API ImGuiIO(); +}; + +//----------------------------------------------------------------------------- +// [SECTION] Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload) +//----------------------------------------------------------------------------- + +// Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used. +// The callback function should return 0 by default. +// Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details) +// - ImGuiInputTextFlags_CallbackEdit: Callback on buffer edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active) +// - ImGuiInputTextFlags_CallbackAlways: Callback on each iteration +// - ImGuiInputTextFlags_CallbackCompletion: Callback on pressing TAB +// - ImGuiInputTextFlags_CallbackHistory: Callback on pressing Up/Down arrows +// - ImGuiInputTextFlags_CallbackCharFilter: Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard. +// - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. +struct ImGuiInputTextCallbackData +{ + ImGuiContext* Ctx; // Parent UI context + ImGuiInputTextFlags EventFlag; // One ImGuiInputTextFlags_Callback* // Read-only + ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + void* UserData; // What user passed to InputText() // Read-only + + // Arguments for the different callback events + // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary. + // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state. + ImWchar EventChar; // Character input // Read-write // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0; + ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only // [Completion,History] + char* Buf; // Text buffer // Read-write // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer! + int BufTextLen; // Text length (in bytes) // Read-write // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length() + int BufSize; // Buffer size (in bytes) = capacity+1 // Read-only // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1 + bool BufDirty; // Set if you modify Buf/BufTextLen! // Write // [Completion,History,Always] + int CursorPos; // // Read-write // [Completion,History,Always] + int SelectionStart; // // Read-write // [Completion,History,Always] == to SelectionEnd when no selection) + int SelectionEnd; // // Read-write // [Completion,History,Always] + + // Helper functions for text manipulation. + // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection. + IMGUI_API ImGuiInputTextCallbackData(); + IMGUI_API void DeleteChars(int pos, int bytes_count); + IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + void SelectAll() { SelectionStart = 0; SelectionEnd = BufTextLen; } + void ClearSelection() { SelectionStart = SelectionEnd = BufTextLen; } + bool HasSelection() const { return SelectionStart != SelectionEnd; } +}; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +struct ImGuiSizeCallbackData +{ + void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints(). Generally store an integer or float in here (need reinterpret_cast<>). + ImVec2 Pos; // Read-only. Window position, for reference. + ImVec2 CurrentSize; // Read-only. Current window size. + ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +}; + +// Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload() +struct ImGuiPayload +{ + // Members + void* Data; // Data (copied and owned by dear imgui) + int DataSize; // Data size + + // [Internal] + ImGuiID SourceId; // Source item id + ImGuiID SourceParentId; // Source parent id (if available) + int DataFrameCount; // Data timestamp + char DataType[32 + 1]; // Data type tag (short user-supplied string, 32 characters max) + bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + bool Delivery; // Set when AcceptDragDropPayload() was called and mouse Structure is released over the target item. + + ImGuiPayload() { Clear(); } + void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + bool IsPreview() const { return Preview; } + bool IsDelivery() const { return Delivery; } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, Math Operators, ImColor) +//----------------------------------------------------------------------------- + +// Helper: Unicode defines +#define IM_UNICODE_CODEPOINT_INVALID 0xFFFD // Invalid Unicode code point (standard value). +#ifdef IMGUI_USE_WCHAR32 +#define IM_UNICODE_CODEPOINT_MAX 0x10FFFF // Maximum Unicode code point supported by this build. +#else +#define IM_UNICODE_CODEPOINT_MAX 0xFFFF // Maximum Unicode code point supported by this build. +#endif + +// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create a UI within deep-nested code that runs multiple times every frame. +// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame"); +struct ImGuiOnceUponAFrame +{ + ImGuiOnceUponAFrame() { RefFrame = -1; } + mutable int RefFrame; + operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; } +}; + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +struct ImGuiTextFilter +{ + IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + IMGUI_API void Build(); + void Clear() { InputBuf[0] = 0; Build(); } + bool IsActive() const { return !Filters.empty(); } + + // [Internal] + struct ImGuiTextRange + { + const char* b; + const char* e; + + ImGuiTextRange() { b = e = NULL; } + ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; } + bool empty() const { return b == e; } + IMGUI_API void split(char separator, ImVector* out) const; + }; + char InputBuf[256]; + ImVectorFilters; + int CountGrep; +}; + +// Helper: Growable text buffer for logging/accumulating text +// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder') +struct ImGuiTextBuffer +{ + ImVector Buf; + IMGUI_API static char EmptyString[1]; + + ImGuiTextBuffer() { } + inline char operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; } + const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; } + const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator + int size() const { return Buf.Size ? Buf.Size - 1 : 0; } + bool empty() const { return Buf.Size <= 1; } + void clear() { Buf.clear(); } + void reserve(int capacity) { Buf.reserve(capacity); } + const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; } + IMGUI_API void append(const char* str, const char* str_end = NULL); + IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +}; + +// Helper: Key->Value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1) +// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +struct ImGuiStorage +{ + // [Internal] + struct ImGuiStoragePair + { + ImGuiID key; + union { int val_i; float val_f; void* val_p; }; + ImGuiStoragePair(ImGuiID _key, int _val) { key = _key; val_i = _val; } + ImGuiStoragePair(ImGuiID _key, float _val) { key = _key; val_f = _val; } + ImGuiStoragePair(ImGuiID _key, void* _val) { key = _key; val_p = _val; } + }; + + ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + void Clear() { Data.clear(); } + IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + IMGUI_API void SetInt(ImGuiID key, int val); + IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + IMGUI_API void SetBool(ImGuiID key, bool val); + IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + IMGUI_API void SetFloat(ImGuiID key, float val); + IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Advanced: for quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + IMGUI_API void BuildSortByKey(); + // Obsolete: use on your own storage if you know only integer are being stored (open/close all tree nodes) + IMGUI_API void SetAllInt(int val); +}; + +// Helper: Manually clip large list of items. +// If you have lots evenly spaced items and you have random access to the list, you can perform coarse +// clipping based on visibility to only submit items that are in view. +// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped. +// (Dear ImGui already clip items based on their bounds but: it needs to first layout the item to do so, and generally +// fetching/submitting your own data incurs additional cost. Coarse clipping using ImGuiListClipper allows you to easily +// scale using lists with tens of thousands of items without a problem) +// Usage: +// ImGuiListClipper clipper; +// clipper.Begin(1000); // We have 1000 elements, evenly spaced. +// while (clipper.Step()) +// for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) +// ImGui::Text("line number %d", i); +// Generally what happens is: +// - Clipper lets you process the first element (DisplayStart = 0, DisplayEnd = 1) regardless of it being visible or not. +// - User code submit that one element. +// - Clipper can measure the height of the first element +// - Clipper calculate the actual range of elements to display based on the current clipping rectangle, position the cursor before the first visible element. +// - User code submit visible elements. +// - The clipper also handles various subtleties related to keyboard/gamepad navigation, wrapping etc. +struct ImGuiListClipper +{ + ImGuiContext* Ctx; // Parent UI context + int DisplayStart; // First item to display, updated by each call to Step() + int DisplayEnd; // End of items to display (exclusive) + int ItemsCount; // [Internal] Number of items + float ItemsHeight; // [Internal] Height of item after a first step and item submission can calculate it + float StartPosY; // [Internal] Cursor position at the time of Begin() or after table frozen rows are all processed + void* TempData; // [Internal] Internal data + + // items_count: Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step) + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + IMGUI_API ImGuiListClipper(); + IMGUI_API ~ImGuiListClipper(); + IMGUI_API void Begin(int items_count, float items_height = -1.0f); + IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + + // Call IncludeItemByIndex() or IncludeItemsByIndex() *BEFORE* first call to Step() if you need a range of items to not be clipped, regardless of their visibility. + // (Due to alignment / padding of certain items it is possible that an extra item may be included on either end of the display range). + inline void IncludeItemByIndex(int item_index) { IncludeItemsByIndex(item_index, item_index + 1); } + IMGUI_API void IncludeItemsByIndex(int item_begin, int item_end); // item_end is exclusive e.g. use (42, 42+1) to make item 42 never clipped. + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + inline void IncludeRangeByIndices(int item_begin, int item_end) { IncludeItemsByIndex(item_begin, item_end); } // [renamed in 1.89.9] + inline void ForceDisplayRangeByIndices(int item_begin, int item_end) { IncludeItemsByIndex(item_begin, item_end); } // [renamed in 1.89.6] + //inline ImGuiListClipper(int items_count, float items_height = -1.0f) { memset(this, 0, sizeof(*this)); ItemsCount = -1; Begin(items_count, items_height); } // [removed in 1.79] +#endif +}; + +// Helpers: ImVec2/ImVec4 operators +// - It is important that we are keeping those disabled by default so they don't leak in user space. +// - This is in order to allow user enabling implicit cast operators between ImVec2/ImVec4 and their own types (using IM_VEC2_CLASS_EXTRA in imconfig.h) +// - You can use '#define IMGUI_DEFINE_MATH_OPERATORS' to import our operators, provided as a courtesy. +#ifdef IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_MATH_OPERATORS_IMPLEMENTED +IM_MSVC_RUNTIME_CHECKS_OFF +static inline ImVec2 operator*(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x * rhs, lhs.y * rhs); } +static inline ImVec2 operator/(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x / rhs, lhs.y / rhs); } +static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x + rhs.x, lhs.y + rhs.y); } +static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x - rhs.x, lhs.y - rhs.y); } +static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } +static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x / rhs.x, lhs.y / rhs.y); } +static inline ImVec2 operator-(const ImVec2& lhs) { return ImVec2(-lhs.x, -lhs.y); } +static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; } +static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; } +static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs) { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; } +static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; } +static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs) { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; } +static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs) { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; } +static inline bool operator==(const ImVec2& lhs, const ImVec2& rhs) { return lhs.x == rhs.x && lhs.y == rhs.y; } +static inline bool operator!=(const ImVec2& lhs, const ImVec2& rhs) { return lhs.x != rhs.x || lhs.y != rhs.y; } +static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z, lhs.w + rhs.w); } +static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z, lhs.w - rhs.w); } +static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z, lhs.w * rhs.w); } +static inline bool operator==(const ImVec4& lhs, const ImVec4& rhs) { return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z && lhs.w == rhs.w; } +static inline bool operator!=(const ImVec4& lhs, const ImVec4& rhs) { return lhs.x != rhs.x || lhs.y != rhs.y || lhs.z != rhs.z || lhs.w != rhs.w; } +IM_MSVC_RUNTIME_CHECKS_RESTORE +#endif + +// Helpers macros to generate 32-bit encoded colors +// User can declare their own format by #defining the 5 _SHIFT/_MASK macros in their imconfig file. +#ifndef IM_COL32_R_SHIFT +#ifdef IMGUI_USE_BGRA_PACKED_COLOR +#define IM_COL32_R_SHIFT 16 +#define IM_COL32_G_SHIFT 8 +#define IM_COL32_B_SHIFT 0 +#define IM_COL32_A_SHIFT 24 +#define IM_COL32_A_MASK 0xFF000000 +#else +#define IM_COL32_R_SHIFT 0 +#define IM_COL32_G_SHIFT 8 +#define IM_COL32_B_SHIFT 16 +#define IM_COL32_A_SHIFT 24 +#define IM_COL32_A_MASK 0xFF000000 +#endif +#endif +#define IM_COL32(R,G,B,A) (((ImU32)(A)<> IM_COL32_R_SHIFT) & 0xFF) * (1.0f / 255.0f), (float)((rgba >> IM_COL32_G_SHIFT) & 0xFF) * (1.0f / 255.0f), (float)((rgba >> IM_COL32_B_SHIFT) & 0xFF) * (1.0f / 255.0f), (float)((rgba >> IM_COL32_A_SHIFT) & 0xFF) * (1.0f / 255.0f)) {} + inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + inline operator ImVec4() const { return Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r, g, b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r, g, b, a); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Drawing API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData) +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// The maximum line width to bake anti-aliased textures for. Build atlas with ImFontAtlasFlags_NoBakedLines to disable baking. +#ifndef IM_DRAWLIST_TEX_LINES_WIDTH_MAX +#define IM_DRAWLIST_TEX_LINES_WIDTH_MAX (63) +#endif + +// ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h] +// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering, +// you can poke into the draw list for that! Draw callback may be useful for example to: +// A) Change your GPU render state, +// B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }' +// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering backend accordingly. +#ifndef ImDrawCallback +typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +#endif + +// Special Draw callback value to request renderer backend to reset the graphics/render state. +// The renderer backend needs to handle this special value, otherwise it will crash trying to call a function at this address. +// This is useful, for example, if you submitted callbacks which you know have altered the render state and you want it to be restored. +// Renderer state is not reset by default because they are many perfectly useful way of altering render state (e.g. changing shader/blending settings before an Image call). +#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-8) + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +// - VtxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled, +// this fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices. +// Backends made for <1.71. will typically ignore the VtxOffset fields. +// - The ClipRect/TextureId/VtxOffset fields must be contiguous as we memcmp() them together (this is asserted for). +struct ImDrawCmd +{ + ImVec4 ClipRect; // 4*4 // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates + ImTextureID TextureId; // 4-8 // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + unsigned int VtxOffset; // 4 // Start offset in vertex buffer. ImGuiBackendFlags_RendererHasVtxOffset: always 0, otherwise may be >0 to support meshes larger than 64K vertices with 16-bit indices. + unsigned int IdxOffset; // 4 // Start offset in index buffer. + unsigned int ElemCount; // 4 // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + ImDrawCallback UserCallback; // 4-8 // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + void* UserCallbackData; // 4-8 // The draw callback code can access this. + + ImDrawCmd() { memset(this, 0, sizeof(*this)); } // Also ensure our padding fields are zeroed + + // Since 1.83: returns ImTextureID associated with this draw call. Warning: DO NOT assume this is always same as 'TextureId' (we will change this function for an upcoming feature) + inline ImTextureID GetTexID() const { return TextureId; } +}; + +// Vertex layout +#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +struct ImDrawVert +{ + ImVec2 pos; + ImVec2 uv; + ImU32 col; +}; +#else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared at the time you'd want to set your type up. +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +#endif + +// [Internal] For use by ImDrawList +struct ImDrawCmdHeader +{ + ImVec4 ClipRect; + ImTextureID TextureId; + unsigned int VtxOffset; +}; + +// [Internal] For use by ImDrawListSplitter +struct ImDrawChannel +{ + ImVector _CmdBuffer; + ImVector _IdxBuffer; +}; + + +// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order. +// This is used by the Columns/Tables API, so items of each column can be batched together in a same draw call. +struct ImDrawListSplitter +{ + int _Current; // Current channel number (0) + int _Count; // Number of active channels (1+) + ImVector _Channels; // Draw channels (not resized down so _Count might be < Channels.Size) + + inline ImDrawListSplitter() { memset(this, 0, sizeof(*this)); } + inline ~ImDrawListSplitter() { ClearFreeMemory(); } + inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame + IMGUI_API void ClearFreeMemory(); + IMGUI_API void Split(ImDrawList* draw_list, int count); + IMGUI_API void Merge(ImDrawList* draw_list); + IMGUI_API void SetCurrentChannel(ImDrawList* draw_list, int channel_idx); +}; + +// Flags for ImDrawList functions +// (Legacy: bit 0 must always correspond to ImDrawFlags_Closed to be backward compatible with old API using a bool. Bits 1..3 must be unused) +enum ImDrawFlags_ +{ + ImDrawFlags_None = 0, + ImDrawFlags_Closed = 1 << 0, // PathStroke(), AddPolyline(): specify that shape should be closed (Important: this is always == 1 for legacy reason) + ImDrawFlags_RoundCornersTopLeft = 1 << 4, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-left corner only (when rounding > 0.0f, we default to all corners). Was 0x01. + ImDrawFlags_RoundCornersTopRight = 1 << 5, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-right corner only (when rounding > 0.0f, we default to all corners). Was 0x02. + ImDrawFlags_RoundCornersBottomLeft = 1 << 6, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-left corner only (when rounding > 0.0f, we default to all corners). Was 0x04. + ImDrawFlags_RoundCornersBottomRight = 1 << 7, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-right corner only (when rounding > 0.0f, we default to all corners). Wax 0x08. + ImDrawFlags_RoundCornersNone = 1 << 8, // AddRect(), AddRectFilled(), PathRect(): disable rounding on all corners (when rounding > 0.0f). This is NOT zero, NOT an implicit flag! + ImDrawFlags_RoundCornersTop = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight, + ImDrawFlags_RoundCornersBottom = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight, + ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersTopLeft, + ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundCornersBottomRight | ImDrawFlags_RoundCornersTopRight, + ImDrawFlags_RoundCornersAll = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight, + ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll, // Default to ALL corners if none of the _RoundCornersXX flags are specified. + ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone, +}; + +// Flags for ImDrawList instance. Those are set automatically by ImGui:: functions from ImGuiIO settings, and generally not manipulated directly. +// It is however possible to temporarily alter flags between calls to ImDrawList:: functions. +enum ImDrawListFlags_ +{ + ImDrawListFlags_None = 0, + ImDrawListFlags_AntiAliasedLines = 1 << 0, // Enable anti-aliased lines/borders (*2 the number of triangles for 1.0f wide line or lines thin enough to be drawn using textures, otherwise *3 the number of triangles) + ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, // Enable anti-aliased lines/borders using textures when possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). + ImDrawListFlags_AntiAliasedFill = 1 << 2, // Enable anti-aliased edge around filled shapes (rounded rectangles, circles). + ImDrawListFlags_AllowVtxOffset = 1 << 3, // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled. +}; + +// Draw command list +// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame, +// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to +// access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// In single viewport mode, top-left is == GetMainViewport()->Pos (generally 0,0), bottom-right is == GetMainViewport()->Pos+Size (generally io.DisplaySize). +// You are totally free to apply whatever transformation matrix to want to the data (depending on the use of the transformation you may want to apply it to ClipRect as well!) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +struct ImDrawList +{ + // This is what you have to render + ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + ImVector VtxBuffer; // Vertex buffer. + ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + + // [Internal, used while building lists] + unsigned int _VtxCurrentIdx; // [Internal] generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0. + ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + const char* _OwnerName; // Pointer to owner window's name for debugging + ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + ImVector _ClipRectStack; // [Internal] + ImVector _TextureIdStack; // [Internal] + ImVector _Path; // [Internal] current path building + ImDrawCmdHeader _CmdHeader; // [Internal] template of active commands. Fields should match those of CmdBuffer.back(). + ImDrawListSplitter _Splitter; // [Internal] for channels api (note: prefer using your own persistent instance of ImDrawListSplitter!) + float _FringeScale; // [Internal] anti-alias fringe is scaled by this value, this helps to keep things sharp while zooming at vertex buffer content + + // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui) + ImDrawList(ImDrawListSharedData* shared_data) { memset(this, 0, sizeof(*this)); _Data = shared_data; } + + ~ImDrawList() { _ClearFreeMemory(); } + IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect = false); // Renderer-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + IMGUI_API void PushClipRectFullScreen(); + IMGUI_API void PopClipRect(); + IMGUI_API void PushTextureID(ImTextureID texture_id); + IMGUI_API void PopTextureID(); + inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing. + // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners. + // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred). + // In older versions (until Dear ImGui 1.77) the AddCircle functions defaulted to num_segments == 12. + // In future versions we will use textures to provide cheaper and higher-quality circles. + // Use AddNgon() and AddNgonFilled() functions if you need to guarantee a specific number of sides. + IMGUI_API void AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f); // a: upper-left, b: lower-right (== upper-left + size) + IMGUI_API void AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0); // a: upper-left, b: lower-right (== upper-left + size) + IMGUI_API void AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + IMGUI_API void AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col); + IMGUI_API void AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f); + IMGUI_API void AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col); + IMGUI_API void AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 0, float thickness = 1.0f); + IMGUI_API void AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 0); + IMGUI_API void AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f); + IMGUI_API void AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments); + IMGUI_API void AddEllipse(const ImVec2& center, float radius_x, float radius_y, ImU32 col, float rot = 0.0f, int num_segments = 0, float thickness = 1.0f); + IMGUI_API void AddEllipseFilled(const ImVec2& center, float radius_x, float radius_y, ImU32 col, float rot = 0.0f, int num_segments = 0); + IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness); + IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); + IMGUI_API void AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); // Cubic Bezier (4 control points) + IMGUI_API void AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments = 0); // Quadratic Bezier (3 control points) + + // Image primitives + // - Read FAQ to understand what ImTextureID is. + // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle. + // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture. + IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE); + IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE); + IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawFlags flags = 0); + + // Stateful path API, add points then finish with PathFillConvex() or PathStroke() + // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing. + inline void PathClear() { _Path.Size = 0; } + inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); } + inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; } + inline void PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, flags, thickness); _Path.Size = 0; } + IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 0); + IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + IMGUI_API void PathEllipticalArcTo(const ImVec2& center, float radius_x, float radius_y, float rot, float a_min, float a_max, int num_segments = 0); // Ellipse + IMGUI_API void PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0); // Cubic Bezier (4 control points) + IMGUI_API void PathBezierQuadraticCurveTo(const ImVec2& p2, const ImVec2& p3, int num_segments = 0); // Quadratic Bezier (3 control points) + IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawFlags flags = 0); + + // Advanced + IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer. + + // Advanced: Channels + // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end) + // - This API shouldn't have been in ImDrawList in the first place! + // Prefer using your own persistent instance of ImDrawListSplitter as you can stack them. + // Using the ImDrawList::ChannelsXXXX you cannot stack a split over another. + inline void ChannelsSplit(int count) { _Splitter.Split(this, count); } + inline void ChannelsMerge() { _Splitter.Merge(this); } + inline void ChannelsSetCurrent(int n) { _Splitter.SetCurrentChannel(this, n); } + + // Advanced: Primitives allocations + // - We render triangles (three vertices) + // - All primitives needs to be reserved via PrimReserve() beforehand. + IMGUI_API void PrimReserve(int idx_count, int vtx_count); + IMGUI_API void PrimUnreserve(int idx_count, int vtx_count); + IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } // Write vertex with unique index + + // Obsolete names + //inline void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0) { AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments); } // OBSOLETED in 1.80 (Jan 2021) + //inline void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0) { PathBezierCubicCurveTo(p2, p3, p4, num_segments); } // OBSOLETED in 1.80 (Jan 2021) + + // [Internal helpers] + IMGUI_API void _ResetForNewFrame(); + IMGUI_API void _ClearFreeMemory(); + IMGUI_API void _PopUnusedDrawCmd(); + IMGUI_API void _TryMergeDrawCmds(); + IMGUI_API void _OnChangedClipRect(); + IMGUI_API void _OnChangedTextureID(); + IMGUI_API void _OnChangedVtxOffset(); + IMGUI_API int _CalcCircleAutoSegmentCount(float radius) const; + IMGUI_API void _PathArcToFastEx(const ImVec2& center, float radius, int a_min_sample, int a_max_sample, int a_step); + IMGUI_API void _PathArcToN(const ImVec2& center, float radius, float a_min, float a_max, int num_segments); +}; + +// All draw data to render a Dear ImGui frame +// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose, +// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList) +struct ImDrawData +{ + bool Valid; // Only valid after Renderer() is called and before the next NewFrame() is called. + int CmdListsCount; // Number of ImDrawList* to render (should always be == CmdLists.size) + int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size + int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size + ImVector CmdLists; // Array of ImDrawList* to render. The ImDrawLists are owned by ImGuiContext and only pointed to from here. + ImVec2 DisplayPos; // Top-left position of the viewport to render (== top-left of the orthogonal projection matrix to use) (== GetMainViewport()->Pos for the main viewport, == (0.0) in most single-viewport applications) + ImVec2 DisplaySize; // Size of the viewport to render (== GetMainViewport()->Size for the main viewport, == io.DisplaySize in most single-viewport applications) + ImVec2 FramebufferScale; // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display. + ImGuiViewport* OwnerViewport; // Viewport carrying the ImDrawData instance, might be of use to the renderer (generally not). + + // Functions + ImDrawData() { Clear(); } + IMGUI_API void Clear(); + IMGUI_API void AddDrawList(ImDrawList* draw_list); // Helper to add an external draw list into an existing ImDrawData. + IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + IMGUI_API void ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. +}; + +//----------------------------------------------------------------------------- +// [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont) +//----------------------------------------------------------------------------- + +struct ImFontConfig +{ + void* FontData; // // TTF/OTF data + int FontDataSize; // // TTF/OTF data size + bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + int FontNo; // 0 // Index of font within TTF/OTF file + float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height). + int OversampleH; // 2 // Rasterize at higher quality for sub-pixel positioning. Note the difference between 2 and 3 is minimal. You can reduce this to 1 for large glyphs save memory. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details. + int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. This is not really useful as we don't use sub-pixel positions on the Y axis. + bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + const ImWchar* GlyphRanges; // NULL // THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). + float GlyphMinAdvanceX; // 0 // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font + float GlyphMaxAdvanceX; // FLT_MAX // Maximum AdvanceX for glyphs + bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + unsigned int FontBuilderFlags; // 0 // Settings for custom font builder. THIS IS BUILDER IMPLEMENTATION DEPENDENT. Leave as zero if unsure. + float RasterizerMultiply; // 1.0f // Linearly brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. This is a silly thing we may remove in the future. + float RasterizerDensity; // 1.0f // DPI scale for rasterization, not altering other font metrics: make it easy to swap between e.g. a 100% and a 400% fonts for a zooming display. IMPORTANT: If you increase this it is expected that you increase font scale accordingly, otherwise quality may look lowered. + ImWchar EllipsisChar; // -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used. + + // [Internal] + char Name[40]; // Name (strictly to ease debugging) + ImFont* DstFont; + + IMGUI_API ImFontConfig(); +}; + +// Hold rendering data for one glyph. +// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this) +struct ImFontGlyph +{ + unsigned int Colored : 1; // Flag to indicate glyph is colored and should generally ignore tinting (make it usable with no shift on little-endian as this is used in loops) + unsigned int Visible : 1; // Flag to indicate glyph has no visible pixels (e.g. space). Allow early out when rendering. + unsigned int Codepoint : 30; // 0x0000..0x10FFFF + float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + float X0, Y0, X1, Y1; // Glyph corners + float U0, V0, U1, V1; // Texture coordinates +}; + +// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges(). +// This is essentially a tightly packed of vector of 64k booleans = 8KB storage. +struct ImFontGlyphRangesBuilder +{ + ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + + ImFontGlyphRangesBuilder() { Clear(); } + inline void Clear() { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); } + inline bool GetBit(size_t n) const { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array + inline void SetBit(size_t n) { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array + inline void AddChar(ImWchar c) { SetBit(c); } // Add character + IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext + IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges +}; + +// See ImFontAtlas::AddCustomRectXXX functions. +struct ImFontAtlasCustomRect +{ + unsigned short Width, Height; // Input // Desired rectangle dimension + unsigned short X, Y; // Output // Packed position in Atlas + unsigned int GlyphID; // Input // For custom font glyphs only (ID < 0x110000) + float GlyphAdvanceX; // Input // For custom font glyphs only: glyph xadvance + ImVec2 GlyphOffset; // Input // For custom font glyphs only: glyph display offset + ImFont* Font; // Input // For custom font glyphs only: target font + ImFontAtlasCustomRect() { Width = Height = 0; X = Y = 0xFFFF; GlyphID = 0; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0, 0); Font = NULL; } + bool IsPacked() const { return X != 0xFFFF; } +}; + +// Flags for ImFontAtlas build +enum ImFontAtlasFlags_ +{ + ImFontAtlasFlags_None = 0, + ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two + ImFontAtlasFlags_NoMouseCursors = 1 << 1, // Don't build software mouse cursors into the atlas (save a little texture memory) + ImFontAtlasFlags_NoBakedLines = 1 << 2, // Don't build thick line textures into the atlas (save a little texture memory, allow support for point/nearest filtering). The AntiAliasedLinesUseTex features uses them, otherwise they will be rendered using polygons (more expensive for CPU/GPU). +}; + +// Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding: +// - One or more fonts. +// - Custom graphics data needed to render the shapes needed by Dear ImGui. +// - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas). +// It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api. +// - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you. +// - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples) +// - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API. +// This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details. +// Common pitfalls: +// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the +// atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data. +// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction. +// You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed, +// - Even though many functions are suffixed with "TTF", OTF data is supported just as well. +// - This is an old API and it is currently awkward for those and various other reasons! We will address them in the future! +struct ImFontAtlas +{ + IMGUI_API ImFontAtlas(); + IMGUI_API ~ImFontAtlas(); + IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_data_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed. + IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_data_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + IMGUI_API void ClearInputData(); // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts. + IMGUI_API void ClearTexData(); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory. + IMGUI_API void ClearFonts(); // Clear output font data (glyphs storage, UV coordinates). + IMGUI_API void Clear(); // Clear all input and output. + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // The pitch is always = Width * BytesPerPixels (1 or 4) + // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into + // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste. + IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + bool IsBuilt() const { return Fonts.Size > 0 && TexReady; } // Bit ambiguous: used to detect when user didn't build texture but effectively we should check TexID != 0 except that would be backend dependent... + void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. + // Read https://github.com/ocornut/imgui/blob/master/docs/FONTS.md/#about-utf-8-encoding for details. + // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data. + IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + IMGUI_API const ImWchar* GetGlyphRangesGreek(); // Default + Greek and Coptic + IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 2999 Ideographs + IMGUI_API const ImWchar* GetGlyphRangesChineseFull(); // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs + IMGUI_API const ImWchar* GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese + IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + IMGUI_API const ImWchar* GetGlyphRangesVietnamese(); // Default + Vietnamese characters + + //------------------------------------------- + // [BETA] Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. + // - After calling Build(), you can query the rectangle position and render your pixels. + // - If you render colored output, set 'atlas->TexPixelsUseColors = true' as this may help some backends decide of prefered texture format. + // - You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), + // so you can render e.g. custom colorful icons and use them as regular glyphs. + // - Read docs/FONTS.md for more details about using colorful icons. + // - Note: this API may be redesigned later in order to support multi-monitor varying DPI settings. + IMGUI_API int AddCustomRectRegular(int width, int height); + IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0, 0)); + ImFontAtlasCustomRect* GetCustomRectByIndex(int index) { IM_ASSERT(index >= 0); return &CustomRects[index]; } + + // [Internal] + IMGUI_API void CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const; + IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]); + + //------------------------------------------- + // Members + //------------------------------------------- + + ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_) + ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0 (will also need to set AntiAliasedLinesUseTex = false). + bool Locked; // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert. + void* UserData; // Store your own atlas related user-data (if e.g. you have multiple font atlas). + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + bool TexReady; // Set when texture was built matching current font input + bool TexPixelsUseColors; // Tell whether our texture data is known to use colors (rather than just alpha channel), in order to help backend select a format. + unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + int TexWidth; // Texture width calculated during Build(). + int TexHeight; // Texture height calculated during Build(). + ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight) + ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + ImVector ConfigData; // Configuration data + ImVec4 TexUvLines[IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 1]; // UVs for baked anti-aliased lines + + // [Internal] Font builder + const ImFontBuilderIO* FontBuilderIO; // Opaque interface to a font builder (default to stb_truetype, can be changed to use FreeType by defining IMGUI_ENABLE_FREETYPE). + unsigned int FontBuilderFlags; // Shared flags (for all fonts) for custom font builder. THIS IS BUILD IMPLEMENTATION DEPENDENT. Per-font override is also available in ImFontConfig. + + // [Internal] Packing data + int PackIdMouseCursors; // Custom texture rectangle ID for white pixel and mouse cursors + int PackIdLines; // Custom texture rectangle ID for baked anti-aliased lines + + // [Obsolete] + //typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+ + //typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+ +}; + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +struct ImFont +{ + // Members: Hot ~20/24 bytes (for CalcTextSize) + ImVector IndexAdvanceX; // 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI). + float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX + float FontSize; // 4 // in // // Height of characters/line, set during loading (don't change after loading) + + // Members: Hot ~28/40 bytes (for CalcTextSize + render loop) + ImVector IndexLookup; // 12-16 // out // // Sparse. Index glyphs by Unicode code-point. + ImVector Glyphs; // 12-16 // out // // All glyphs. + const ImFontGlyph* FallbackGlyph; // 4-8 // out // = FindGlyph(FontFallbackChar) + + // Members: Cold ~32/40 bytes + ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into + const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData + short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + ImWchar FallbackChar; // 2 // out // = FFFD/'?' // Character used if a glyph isn't found. + ImWchar EllipsisChar; // 2 // out // = '...'/'.'// Character used for ellipsis rendering. + short EllipsisCharCount; // 1 // out // 1 or 3 + float EllipsisWidth; // 4 // out // Width + float EllipsisCharStep; // 4 // out // Step between characters when EllipsisCount > 0 + bool DirtyLookupTables; // 1 // out // + float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale() + float Ascent, Descent; // 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + ImU8 Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations across all used codepoints. + + // Methods + IMGUI_API ImFont(); + IMGUI_API ~ImFont(); + IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const; + float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + bool IsLoaded() const { return ContainerAtlas != NULL; } + const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + IMGUI_API void RenderChar(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, ImWchar c) const; + IMGUI_API void RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] Don't use! + IMGUI_API void BuildLookupTable(); + IMGUI_API void ClearOutputData(); + IMGUI_API void GrowIndex(int new_size); + IMGUI_API void AddGlyph(const ImFontConfig* src_cfg, ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + IMGUI_API void SetGlyphVisible(ImWchar c, bool visible); + IMGUI_API bool IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last); +}; + +//----------------------------------------------------------------------------- +// [SECTION] Viewports +//----------------------------------------------------------------------------- + +// Flags stored in ImGuiViewport::Flags, giving indications to the platform backends. +enum ImGuiViewportFlags_ +{ + ImGuiViewportFlags_None = 0, + ImGuiViewportFlags_IsPlatformWindow = 1 << 0, // Represent a Platform Window + ImGuiViewportFlags_IsPlatformMonitor = 1 << 1, // Represent a Platform Monitor (unused yet) + ImGuiViewportFlags_OwnedByApp = 1 << 2, // Platform Window: is created/managed by the application (rather than a dear imgui backend) +}; + +// - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows. +// - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports. +// - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode. +// - About Main Area vs Work Area: +// - Main Area = entire viewport. +// - Work Area = entire viewport minus sections used by main menu bars (for platform windows), or by task bar (for platform monitor). +// - Windows are generally trying to stay within the Work Area of their host viewport. +struct ImGuiViewport +{ + ImGuiViewportFlags Flags; // See ImGuiViewportFlags_ + ImVec2 Pos; // Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates) + ImVec2 Size; // Main Area: Size of the viewport. + ImVec2 WorkPos; // Work Area: Position of the viewport minus task bars, menus bars, status bars (>= Pos) + ImVec2 WorkSize; // Work Area: Size of the viewport minus task bars, menu bars, status bars (<= Size) + + // Platform/Backend Dependent Data + void* PlatformHandleRaw; // void* to hold lower-level, platform-native window handle (under Win32 this is expected to be a HWND, unused for other platforms) + + ImGuiViewport() { memset(this, 0, sizeof(*this)); } + + // Helpers + ImVec2 GetCenter() const { return ImVec2(Pos.x + Size.x * 0.5f, Pos.y + Size.y * 0.5f); } + ImVec2 GetWorkCenter() const { return ImVec2(WorkPos.x + WorkSize.x * 0.5f, WorkPos.y + WorkSize.y * 0.5f); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Platform Dependent Interfaces +//----------------------------------------------------------------------------- + +// (Optional) Support for IME (Input Method Editor) via the io.SetPlatformImeDataFn() function. +struct ImGuiPlatformImeData +{ + bool WantVisible; // A widget wants the IME to be visible + ImVec2 InputPos; // Position of the input cursor + float InputLineHeight; // Line height + + ImGuiPlatformImeData() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Obsolete functions and types +// (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details) +// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead. +//----------------------------------------------------------------------------- + +namespace ImGui +{ +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + IMGUI_API ImGuiKey GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into legacy native key index. == io.KeyMap[key] +#else + static inline ImGuiKey GetKeyIndex(ImGuiKey key) { IM_ASSERT(key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END && "ImGuiKey and native_index was merged together and native_index is disabled by IMGUI_DISABLE_OBSOLETE_KEYIO. Please switch to ImGuiKey."); return key; } +#endif +} + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS +namespace ImGui +{ + // OBSOLETED in 1.90.0 (from September 2023) + static inline bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags window_flags = 0) { return BeginChild(id, size, ImGuiChildFlags_FrameStyle, window_flags); } + static inline void EndChildFrame() { EndChild(); } + //static inline bool BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags window_flags){ return BeginChild(str_id, size_arg, border ? ImGuiChildFlags_Border : ImGuiChildFlags_None, window_flags); } // Unnecessary as true == ImGuiChildFlags_Border + //static inline bool BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags window_flags) { return BeginChild(id, size_arg, border ? ImGuiChildFlags_Border : ImGuiChildFlags_None, window_flags); } // Unnecessary as true == ImGuiChildFlags_Border + static inline void ShowStackToolWindow(bool* p_open = NULL) { ShowIDStackToolWindow(p_open); } + IMGUI_API bool ListBox(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int height_in_items = -1); + IMGUI_API bool Combo(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int popup_max_height_in_items = -1); + // OBSOLETED in 1.89.7 (from June 2023) + IMGUI_API void SetItemAllowOverlap(); // Use SetNextItemAllowOverlap() before item. + // OBSOLETED in 1.89.4 (from March 2023) + static inline void PushAllowKeyboardFocus(bool tab_stop) { PushTabStop(tab_stop); } + static inline void PopAllowKeyboardFocus() { PopTabStop(); } + // OBSOLETED in 1.89 (from August 2022) + IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0, 0, 0, 0), const ImVec4& tint_col = ImVec4(1, 1, 1, 1)); // Use new ImageButton() signature (explicit item id, regular FramePadding) + // OBSOLETED in 1.88 (from May 2022) + static inline void CaptureKeyboardFromApp(bool want_capture_keyboard = true) { SetNextFrameWantCaptureKeyboard(want_capture_keyboard); } // Renamed as name was misleading + removed default value. + static inline void CaptureMouseFromApp(bool want_capture_mouse = true) { SetNextFrameWantCaptureMouse(want_capture_mouse); } // Renamed as name was misleading + removed default value. + + // Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE) + //-- OBSOLETED in 1.86 (from November 2021) + //IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // Code removed, see 1.90 for last version of the code. Calculate range of visible items for large list of evenly sized items. Prefer using ImGuiListClipper. + //-- OBSOLETED in 1.85 (from August 2021) + //static inline float GetWindowContentRegionWidth() { return GetWindowContentRegionMax().x - GetWindowContentRegionMin().x; } + //-- OBSOLETED in 1.81 (from February 2021) + //static inline bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0, 0)) { return BeginListBox(label, size); } + //static inline bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1) { float height = GetTextLineHeightWithSpacing() * ((height_in_items < 0 ? ImMin(items_count, 7) : height_in_items) + 0.25f) + GetStyle().FramePadding.y * 2.0f; return BeginListBox(label, ImVec2(0.0f, height)); } // Helper to calculate size from items_count and height_in_items + //static inline void ListBoxFooter() { EndListBox(); } + //-- OBSOLETED in 1.79 (from August 2020) + //static inline void OpenPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mb = 1) { OpenPopupOnItemClick(str_id, mb); } // Bool return value removed. Use IsWindowAppearing() in BeginPopup() instead. Renamed in 1.77, renamed back in 1.79. Sorry! + //-- OBSOLETED in 1.78 (from June 2020): Old drag/sliders functions that took a 'float power > 1.0f' argument instead of ImGuiSliderFlags_Logarithmic. See github.com/ocornut/imgui/issues/3361 for details. + //IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power = 1.0f) // OBSOLETED in 1.78 (from June 2020) + //IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power = 1.0f); // OBSOLETED in 1.78 (from June 2020) + //IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power = 1.0f); // OBSOLETED in 1.78 (from June 2020) + //IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format, float power = 1.0f); // OBSOLETED in 1.78 (from June 2020) + //static inline bool DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power = 1.0f) { return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power = 1.0f) { return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power = 1.0f) { return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power = 1.0f) { return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power = 1.0f) { return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power = 1.0f) { return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power = 1.0f) { return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //static inline bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power = 1.0f) { return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); } // OBSOLETED in 1.78 (from June 2020) + //-- OBSOLETED in 1.77 and before + //static inline bool BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); } // OBSOLETED in 1.77 (from June 2020) + //static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); } // OBSOLETED in 1.72 (from July 2019) + //static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); } // OBSOLETED in 1.71 (from June 2019) + //static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; } // OBSOLETED in 1.70 (from May 2019) + //static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } // OBSOLETED in 1.69 (from Mar 2019) + //static inline void SetScrollHere(float ratio = 0.5f) { SetScrollHereY(ratio); } // OBSOLETED in 1.66 (from Nov 2018) + //static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } // OBSOLETED in 1.63 (from Aug 2018) + //-- OBSOLETED in 1.60 and before + //static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } // OBSOLETED in 1.60 (from Apr 2018) + //static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018) + //static inline void ShowTestWindow() { return ShowDemoWindow(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017) + //IMGUI_API bool Begin(char* name, bool* p_open, ImVec2 size_first_use, float bg_alpha = -1.0f, ImGuiWindowFlags flags=0); // OBSOLETED in 1.52 (between Aug 2017 and Oct 2017): Equivalent of using SetNextWindowSize(size, ImGuiCond_FirstUseEver) and SetNextWindowBgAlpha(). + //static inline bool IsRootWindowOrAnyChildHovered() { return IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows); } // OBSOLETED in 1.52 (between Aug 2017 and Oct 2017) + //static inline void AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); } // OBSOLETED in 1.52 (between Aug 2017 and Oct 2017) + //static inline void SetNextWindowPosCenter(ImGuiCond c=0) { SetNextWindowPos(GetMainViewport()->GetCenter(), c, ImVec2(0.5f,0.5f)); } // OBSOLETED in 1.52 (between Aug 2017 and Oct 2017) + //static inline bool IsItemHoveredRect() { return IsItemHovered(ImGuiHoveredFlags_RectOnly); } // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017) + //static inline bool IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017): This was misleading and partly broken. You probably want to use the io.WantCaptureMouse flag instead. + //static inline bool IsMouseHoveringAnyWindow() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017) + //static inline bool IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); } // OBSOLETED in 1.51 (between Jun 2017 and Aug 2017) + //-- OBSOLETED in 1.50 and before + //static inline bool CollapsingHeader(char* label, const char* str_id, bool framed = true, bool default_open = false) { return CollapsingHeader(label, (default_open ? (1 << 5) : 0)); } // OBSOLETED in 1.49 + //static inline ImFont*GetWindowFont() { return GetFont(); } // OBSOLETED in 1.48 + //static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETED in 1.48 + //static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETED in 1.42 +} + +//-- OBSOLETED in 1.82 (from Mars 2021): flags for AddRect(), AddRectFilled(), AddImageRounded(), PathRect() +//typedef ImDrawFlags ImDrawCornerFlags; +//enum ImDrawCornerFlags_ +//{ +// ImDrawCornerFlags_None = ImDrawFlags_RoundCornersNone, // Was == 0 prior to 1.82, this is now == ImDrawFlags_RoundCornersNone which is != 0 and not implicit +// ImDrawCornerFlags_TopLeft = ImDrawFlags_RoundCornersTopLeft, // Was == 0x01 (1 << 0) prior to 1.82. Order matches ImDrawFlags_NoRoundCorner* flag (we exploit this internally). +// ImDrawCornerFlags_TopRight = ImDrawFlags_RoundCornersTopRight, // Was == 0x02 (1 << 1) prior to 1.82. +// ImDrawCornerFlags_BotLeft = ImDrawFlags_RoundCornersBottomLeft, // Was == 0x04 (1 << 2) prior to 1.82. +// ImDrawCornerFlags_BotRight = ImDrawFlags_RoundCornersBottomRight, // Was == 0x08 (1 << 3) prior to 1.82. +// ImDrawCornerFlags_All = ImDrawFlags_RoundCornersAll, // Was == 0x0F prior to 1.82 +// ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight, +// ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight, +// ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft, +// ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight, +//}; + +// RENAMED and MERGED both ImGuiKey_ModXXX and ImGuiModFlags_XXX into ImGuiMod_XXX (from September 2022) +// RENAMED ImGuiKeyModFlags -> ImGuiModFlags in 1.88 (from April 2022). Exceptionally commented out ahead of obscolescence schedule to reduce confusion and because they were not meant to be used in the first place. +typedef ImGuiKeyChord ImGuiModFlags; // == int. We generally use ImGuiKeyChord to mean "a ImGuiKey or-ed with any number of ImGuiMod_XXX value", but you may store only mods in there. +enum ImGuiModFlags_ { ImGuiModFlags_None = 0, ImGuiModFlags_Ctrl = ImGuiMod_Ctrl, ImGuiModFlags_Shift = ImGuiMod_Shift, ImGuiModFlags_Alt = ImGuiMod_Alt, ImGuiModFlags_Super = ImGuiMod_Super }; +//typedef ImGuiKeyChord ImGuiKeyModFlags; // == int +//enum ImGuiKeyModFlags_ { ImGuiKeyModFlags_None = 0, ImGuiKeyModFlags_Ctrl = ImGuiMod_Ctrl, ImGuiKeyModFlags_Shift = ImGuiMod_Shift, ImGuiKeyModFlags_Alt = ImGuiMod_Alt, ImGuiKeyModFlags_Super = ImGuiMod_Super }; + +#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // OBSOLETED IN 1.90 (now using C++11 standard version) + +#endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +// RENAMED IMGUI_DISABLE_METRICS_WINDOW > IMGUI_DISABLE_DEBUG_TOOLS in 1.88 (from June 2022) +#if defined(IMGUI_DISABLE_METRICS_WINDOW) && !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && !defined(IMGUI_DISABLE_DEBUG_TOOLS) +#define IMGUI_DISABLE_DEBUG_TOOLS +#endif +#if defined(IMGUI_DISABLE_METRICS_WINDOW) && defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) +#error IMGUI_DISABLE_METRICS_WINDOW was renamed to IMGUI_DISABLE_DEBUG_TOOLS, please use new name. +#endif + +//----------------------------------------------------------------------------- + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +// Include imgui_user.h at the end of imgui.h +// May be convenient for some users to only explicitly include vanilla imgui.h and have extra stuff included. +#ifdef IMGUI_INCLUDE_IMGUI_USER_H +#ifdef IMGUI_USER_H_FILENAME +#include IMGUI_USER_H_FILENAME +#else +#include "imgui_user.h" +#endif +#endif + +#endif // #ifndef IMGUI_DISABLE diff --git a/include/imgui/imgui_impl_opengl3.h b/include/imgui/imgui_impl_opengl3.h new file mode 100644 index 00000000..23eb9247 --- /dev/null +++ b/include/imgui/imgui_impl_opengl3.h @@ -0,0 +1,66 @@ +// dear imgui: Renderer Backend for modern OpenGL with shaders / programmatic pipeline +// - Desktop GL: 2.x 3.x 4.x +// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0) +// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..) + +// Implemented features: +// [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! +// [x] Renderer: Large meshes support (64k+ vertices) with 16-bit indices (Desktop OpenGL only). + +// About WebGL/ES: +// - You need to '#define IMGUI_IMPL_OPENGL_ES2' or '#define IMGUI_IMPL_OPENGL_ES3' to use WebGL or OpenGL ES. +// - This is done automatically on iOS, Android and Emscripten targets. +// - For other targets, the define needs to be visible from the imgui_impl_opengl3.cpp compilation unit. If unsure, define globally or in imconfig.h. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// Learn about Dear ImGui: +// - FAQ https://dearimgui.com/faq +// - Getting Started https://dearimgui.com/getting-started +// - Documentation https://dearimgui.com/docs (same as your local docs/ folder). +// - Introduction, links and more at the top of imgui.cpp + +// About GLSL version: +// The 'glsl_version' initialization parameter should be nullptr (default) or a "#version XXX" string. +// On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" +// Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. + +#pragma once +#include "imgui.h" // IMGUI_IMPL_API +#ifndef IMGUI_DISABLE + +// Backend API +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = nullptr); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data); + +// (Optional) Called by Init/NewFrame/Shutdown +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture(); +IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects(); +IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects(); + +// Specific OpenGL ES versions +//#define IMGUI_IMPL_OPENGL_ES2 // Auto-detected on Emscripten +//#define IMGUI_IMPL_OPENGL_ES3 // Auto-detected on iOS/Android + +// You can explicitly select GLES2 or GLES3 API by using one of the '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line. +#if !defined(IMGUI_IMPL_OPENGL_ES2) \ + && !defined(IMGUI_IMPL_OPENGL_ES3) + +// Try to detect GLES on matching platforms +#if defined(__APPLE__) +#include +#endif +#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) +#define IMGUI_IMPL_OPENGL_ES3 // iOS, Android -> GL ES 3, "#version 300 es" +#elif defined(__EMSCRIPTEN__) || defined(__amigaos4__) +#define IMGUI_IMPL_OPENGL_ES2 // Emscripten -> GL ES 2, "#version 100" +#else +// Otherwise imgui_impl_opengl3_loader.h will be used. +#endif + +#endif + +#endif // #ifndef IMGUI_DISABLE diff --git a/include/imgui/imgui_impl_opengl3_loader.h b/include/imgui/imgui_impl_opengl3_loader.h new file mode 100644 index 00000000..4019f937 --- /dev/null +++ b/include/imgui/imgui_impl_opengl3_loader.h @@ -0,0 +1,816 @@ +//----------------------------------------------------------------------------- +// About imgui_impl_opengl3_loader.h: +// +// We embed our own OpenGL loader to not require user to provide their own or to have to use ours, +// which proved to be endless problems for users. +// Our loader is custom-generated, based on gl3w but automatically filtered to only include +// enums/functions that we use in our imgui_impl_opengl3.cpp source file in order to be small. +// +// YOU SHOULD NOT NEED TO INCLUDE/USE THIS DIRECTLY. THIS IS USED BY imgui_impl_opengl3.cpp ONLY. +// THE REST OF YOUR APP SHOULD USE A DIFFERENT GL LOADER: ANY GL LOADER OF YOUR CHOICE. +// +// IF YOU GET BUILD ERRORS IN THIS FILE (commonly macro redefinitions or function redefinitions): +// IT LIKELY MEANS THAT YOU ARE BUILDING 'imgui_impl_opengl3.cpp' OR INCUDING 'imgui_impl_opengl3_loader.h' +// IN THE SAME COMPILATION UNIT AS ONE OF YOUR FILE WHICH IS USING A THIRD-PARTY OPENGL LOADER. +// (e.g. COULD HAPPEN IF YOU ARE DOING A UNITY/JUMBO BUILD, OR INCLUDING .CPP FILES FROM OTHERS) +// YOU SHOULD NOT BUILD BOTH IN THE SAME COMPILATION UNIT. +// BUT IF YOU REALLY WANT TO, you can '#define IMGUI_IMPL_OPENGL_LOADER_CUSTOM' and imgui_impl_opengl3.cpp +// WILL NOT BE USING OUR LOADER, AND INSTEAD EXPECT ANOTHER/YOUR LOADER TO BE AVAILABLE IN THE COMPILATION UNIT. +// +// Regenerate with: +// python gl3w_gen.py --output ../imgui/backends/imgui_impl_opengl3_loader.h --ref ../imgui/backends/imgui_impl_opengl3.cpp ./extra_symbols.txt +// +// More info: +// https://github.com/dearimgui/gl3w_stripped +// https://github.com/ocornut/imgui/issues/4445 +//----------------------------------------------------------------------------- + +/* + * This file was generated with gl3w_gen.py, part of imgl3w + * (hosted at https://github.com/dearimgui/gl3w_stripped) + * + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * 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 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 __gl3w_h_ +#define __gl3w_h_ + +// Adapted from KHR/khrplatform.h to avoid including entire file. +#ifndef __khrplatform_h_ +typedef float khronos_float_t; +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef signed long long int khronos_ssize_t; +#else +typedef signed long int khronos_intptr_t; +typedef signed long int khronos_ssize_t; +#endif + +#if defined(_MSC_VER) && !defined(__clang__) +typedef signed __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100) +#include +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#else +typedef signed long long khronos_int64_t; +typedef unsigned long long khronos_uint64_t; +#endif +#endif // __khrplatform_h_ + +#ifndef __gl_glcorearb_h_ +#define __gl_glcorearb_h_ 1 +#ifdef __cplusplus +extern "C" { +#endif +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +#endif +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif +/* glcorearb.h is for use with OpenGL core profile implementations. +** It should should be placed in the same directory as gl.h and +** included as . +** +** glcorearb.h includes only APIs in the latest OpenGL core profile +** implementation together with APIs in newer ARB extensions which +** can be supported by the core profile. It does not, and never will +** include functionality removed from the core profile, such as +** fixed-function vertex and fragment processing. +** +** Do not #include both and either of or +** in the same source file. +*/ +/* Generated C header for: + * API: gl + * Profile: core + * Versions considered: .* + * Versions emitted: .* + * Default extensions included: glcore + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ +#ifndef GL_VERSION_1_0 +typedef void GLvoid; +typedef unsigned int GLenum; + +typedef khronos_float_t GLfloat; +typedef int GLint; +typedef int GLsizei; +typedef unsigned int GLbitfield; +typedef double GLdouble; +typedef unsigned int GLuint; +typedef unsigned char GLboolean; +typedef khronos_uint8_t GLubyte; +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_FALSE 0 +#define GL_TRUE 1 +#define GL_TRIANGLES 0x0004 +#define GL_ONE 1 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_POLYGON_MODE 0x0B40 +#define GL_CULL_FACE 0x0B44 +#define GL_DEPTH_TEST 0x0B71 +#define GL_STENCIL_TEST 0x0B90 +#define GL_VIEWPORT 0x0BA2 +#define GL_BLEND 0x0BE2 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_RGBA 0x1908 +#define GL_FILL 0x1B02 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_LINEAR 0x2601 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap); +typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap); +typedef void (APIENTRYP PFNGLFLUSHPROC) (void); +typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void); +typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); +typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); +typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode); +GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glClear (GLbitfield mask); +GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glDisable (GLenum cap); +GLAPI void APIENTRY glEnable (GLenum cap); +GLAPI void APIENTRY glFlush (void); +GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); +GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +GLAPI GLenum APIENTRY glGetError (void); +GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *data); +GLAPI const GLubyte *APIENTRY glGetString (GLenum name); +GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap); +GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_0 */ +#ifndef GL_VERSION_1_1 +typedef khronos_float_t GLclampf; +typedef double GLclampd; +#define GL_TEXTURE_BINDING_2D 0x8069 +typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); +#endif +#endif /* GL_VERSION_1_1 */ +#ifndef GL_VERSION_1_3 +#define GL_TEXTURE0 0x84C0 +#define GL_ACTIVE_TEXTURE 0x84E0 +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +#endif +#endif /* GL_VERSION_1_3 */ +#ifndef GL_VERSION_1_4 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_FUNC_ADD 0x8006 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ +#ifndef GL_VERSION_1_5 +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_intptr_t GLintptr; +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_STREAM_DRAW 0x88E0 +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +#endif +#endif /* GL_VERSION_1_5 */ +#ifndef GL_VERSION_2_0 +typedef char GLchar; +typedef khronos_int16_t GLshort; +typedef khronos_int8_t GLbyte; +typedef khronos_uint16_t GLushort; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_UPPER_LEFT 0x8CA2 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ +#ifndef GL_VERSION_3_0 +typedef khronos_uint16_t GLhalf; +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +#endif +#endif /* GL_VERSION_3_0 */ +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_PRIMITIVE_RESTART 0x8F9D +#endif /* GL_VERSION_3_1 */ +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +typedef khronos_uint64_t GLuint64; +typedef khronos_int64_t GLint64; +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +#endif +#endif /* GL_VERSION_3_2 */ +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_SAMPLER_BINDING 0x8919 +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +#endif +#endif /* GL_VERSION_3_3 */ +#ifndef GL_VERSION_4_1 +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#endif /* GL_VERSION_4_1 */ +#ifndef GL_VERSION_4_3 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#endif /* GL_VERSION_4_3 */ +#ifndef GL_VERSION_4_5 +#define GL_CLIP_ORIGIN 0x935C +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +#endif /* GL_VERSION_4_5 */ +#ifndef GL_ARB_bindless_texture +typedef khronos_uint64_t GLuint64EXT; +#endif /* GL_ARB_bindless_texture */ +#ifndef GL_ARB_cl_event +struct _cl_context; +struct _cl_event; +#endif /* GL_ARB_cl_event */ +#ifndef GL_ARB_clip_control +#define GL_ARB_clip_control 1 +#endif /* GL_ARB_clip_control */ +#ifndef GL_ARB_debug_output +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#endif /* GL_ARB_debug_output */ +#ifndef GL_EXT_EGL_image_storage +typedef void *GLeglImageOES; +#endif /* GL_EXT_EGL_image_storage */ +#ifndef GL_EXT_direct_state_access +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +#endif /* GL_EXT_direct_state_access */ +#ifndef GL_NV_draw_vulkan_image +typedef void (APIENTRY *GLVULKANPROCNV)(void); +#endif /* GL_NV_draw_vulkan_image */ +#ifndef GL_NV_gpu_shader5 +typedef khronos_int64_t GLint64EXT; +#endif /* GL_NV_gpu_shader5 */ +#ifndef GL_NV_vertex_buffer_unified_memory +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#endif /* GL_NV_vertex_buffer_unified_memory */ +#ifdef __cplusplus +} +#endif +#endif + +#ifndef GL3W_API +#define GL3W_API +#endif + +#ifndef __gl_h_ +#define __gl_h_ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define GL3W_OK 0 +#define GL3W_ERROR_INIT -1 +#define GL3W_ERROR_LIBRARY_OPEN -2 +#define GL3W_ERROR_OPENGL_VERSION -3 + +typedef void (*GL3WglProc)(void); +typedef GL3WglProc (*GL3WGetProcAddressProc)(const char *proc); + +/* gl3w api */ +GL3W_API int imgl3wInit(void); +GL3W_API int imgl3wInit2(GL3WGetProcAddressProc proc); +GL3W_API int imgl3wIsSupported(int major, int minor); +GL3W_API GL3WglProc imgl3wGetProcAddress(const char *proc); + +/* gl3w internal state */ +union ImGL3WProcs { + GL3WglProc ptr[59]; + struct { + PFNGLACTIVETEXTUREPROC ActiveTexture; + PFNGLATTACHSHADERPROC AttachShader; + PFNGLBINDBUFFERPROC BindBuffer; + PFNGLBINDSAMPLERPROC BindSampler; + PFNGLBINDTEXTUREPROC BindTexture; + PFNGLBINDVERTEXARRAYPROC BindVertexArray; + PFNGLBLENDEQUATIONPROC BlendEquation; + PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate; + PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate; + PFNGLBUFFERDATAPROC BufferData; + PFNGLBUFFERSUBDATAPROC BufferSubData; + PFNGLCLEARPROC Clear; + PFNGLCLEARCOLORPROC ClearColor; + PFNGLCOMPILESHADERPROC CompileShader; + PFNGLCREATEPROGRAMPROC CreateProgram; + PFNGLCREATESHADERPROC CreateShader; + PFNGLDELETEBUFFERSPROC DeleteBuffers; + PFNGLDELETEPROGRAMPROC DeleteProgram; + PFNGLDELETESHADERPROC DeleteShader; + PFNGLDELETETEXTURESPROC DeleteTextures; + PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays; + PFNGLDETACHSHADERPROC DetachShader; + PFNGLDISABLEPROC Disable; + PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray; + PFNGLDRAWELEMENTSPROC DrawElements; + PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex; + PFNGLENABLEPROC Enable; + PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray; + PFNGLFLUSHPROC Flush; + PFNGLGENBUFFERSPROC GenBuffers; + PFNGLGENTEXTURESPROC GenTextures; + PFNGLGENVERTEXARRAYSPROC GenVertexArrays; + PFNGLGETATTRIBLOCATIONPROC GetAttribLocation; + PFNGLGETERRORPROC GetError; + PFNGLGETINTEGERVPROC GetIntegerv; + PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog; + PFNGLGETPROGRAMIVPROC GetProgramiv; + PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog; + PFNGLGETSHADERIVPROC GetShaderiv; + PFNGLGETSTRINGPROC GetString; + PFNGLGETSTRINGIPROC GetStringi; + PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation; + PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv; + PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv; + PFNGLISENABLEDPROC IsEnabled; + PFNGLISPROGRAMPROC IsProgram; + PFNGLLINKPROGRAMPROC LinkProgram; + PFNGLPIXELSTOREIPROC PixelStorei; + PFNGLPOLYGONMODEPROC PolygonMode; + PFNGLREADPIXELSPROC ReadPixels; + PFNGLSCISSORPROC Scissor; + PFNGLSHADERSOURCEPROC ShaderSource; + PFNGLTEXIMAGE2DPROC TexImage2D; + PFNGLTEXPARAMETERIPROC TexParameteri; + PFNGLUNIFORM1IPROC Uniform1i; + PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv; + PFNGLUSEPROGRAMPROC UseProgram; + PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer; + PFNGLVIEWPORTPROC Viewport; + } gl; +}; + +GL3W_API extern union ImGL3WProcs imgl3wProcs; + +/* OpenGL functions */ +#define glActiveTexture imgl3wProcs.gl.ActiveTexture +#define glAttachShader imgl3wProcs.gl.AttachShader +#define glBindBuffer imgl3wProcs.gl.BindBuffer +#define glBindSampler imgl3wProcs.gl.BindSampler +#define glBindTexture imgl3wProcs.gl.BindTexture +#define glBindVertexArray imgl3wProcs.gl.BindVertexArray +#define glBlendEquation imgl3wProcs.gl.BlendEquation +#define glBlendEquationSeparate imgl3wProcs.gl.BlendEquationSeparate +#define glBlendFuncSeparate imgl3wProcs.gl.BlendFuncSeparate +#define glBufferData imgl3wProcs.gl.BufferData +#define glBufferSubData imgl3wProcs.gl.BufferSubData +#define glClear imgl3wProcs.gl.Clear +#define glClearColor imgl3wProcs.gl.ClearColor +#define glCompileShader imgl3wProcs.gl.CompileShader +#define glCreateProgram imgl3wProcs.gl.CreateProgram +#define glCreateShader imgl3wProcs.gl.CreateShader +#define glDeleteBuffers imgl3wProcs.gl.DeleteBuffers +#define glDeleteProgram imgl3wProcs.gl.DeleteProgram +#define glDeleteShader imgl3wProcs.gl.DeleteShader +#define glDeleteTextures imgl3wProcs.gl.DeleteTextures +#define glDeleteVertexArrays imgl3wProcs.gl.DeleteVertexArrays +#define glDetachShader imgl3wProcs.gl.DetachShader +#define glDisable imgl3wProcs.gl.Disable +#define glDisableVertexAttribArray imgl3wProcs.gl.DisableVertexAttribArray +#define glDrawElements imgl3wProcs.gl.DrawElements +#define glDrawElementsBaseVertex imgl3wProcs.gl.DrawElementsBaseVertex +#define glEnable imgl3wProcs.gl.Enable +#define glEnableVertexAttribArray imgl3wProcs.gl.EnableVertexAttribArray +#define glFlush imgl3wProcs.gl.Flush +#define glGenBuffers imgl3wProcs.gl.GenBuffers +#define glGenTextures imgl3wProcs.gl.GenTextures +#define glGenVertexArrays imgl3wProcs.gl.GenVertexArrays +#define glGetAttribLocation imgl3wProcs.gl.GetAttribLocation +#define glGetError imgl3wProcs.gl.GetError +#define glGetIntegerv imgl3wProcs.gl.GetIntegerv +#define glGetProgramInfoLog imgl3wProcs.gl.GetProgramInfoLog +#define glGetProgramiv imgl3wProcs.gl.GetProgramiv +#define glGetShaderInfoLog imgl3wProcs.gl.GetShaderInfoLog +#define glGetShaderiv imgl3wProcs.gl.GetShaderiv +#define glGetString imgl3wProcs.gl.GetString +#define glGetStringi imgl3wProcs.gl.GetStringi +#define glGetUniformLocation imgl3wProcs.gl.GetUniformLocation +#define glGetVertexAttribPointerv imgl3wProcs.gl.GetVertexAttribPointerv +#define glGetVertexAttribiv imgl3wProcs.gl.GetVertexAttribiv +#define glIsEnabled imgl3wProcs.gl.IsEnabled +#define glIsProgram imgl3wProcs.gl.IsProgram +#define glLinkProgram imgl3wProcs.gl.LinkProgram +#define glPixelStorei imgl3wProcs.gl.PixelStorei +#define glPolygonMode imgl3wProcs.gl.PolygonMode +#define glReadPixels imgl3wProcs.gl.ReadPixels +#define glScissor imgl3wProcs.gl.Scissor +#define glShaderSource imgl3wProcs.gl.ShaderSource +#define glTexImage2D imgl3wProcs.gl.TexImage2D +#define glTexParameteri imgl3wProcs.gl.TexParameteri +#define glUniform1i imgl3wProcs.gl.Uniform1i +#define glUniformMatrix4fv imgl3wProcs.gl.UniformMatrix4fv +#define glUseProgram imgl3wProcs.gl.UseProgram +#define glVertexAttribPointer imgl3wProcs.gl.VertexAttribPointer +#define glViewport imgl3wProcs.gl.Viewport + +#ifdef __cplusplus +} +#endif + +#endif + +#ifdef IMGL3W_IMPL +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define GL3W_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +#if defined(_WIN32) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include + +static HMODULE libgl; +typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR); +static GL3WglGetProcAddr wgl_get_proc_address; + +static int open_libgl(void) +{ + libgl = LoadLibraryA("opengl32.dll"); + if (!libgl) + return GL3W_ERROR_LIBRARY_OPEN; + wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl, "wglGetProcAddress"); + return GL3W_OK; +} + +static void close_libgl(void) { FreeLibrary(libgl); } +static GL3WglProc get_proc(const char *proc) +{ + GL3WglProc res; + res = (GL3WglProc)wgl_get_proc_address(proc); + if (!res) + res = (GL3WglProc)GetProcAddress(libgl, proc); + return res; +} +#elif defined(__APPLE__) +#include + +static void *libgl; +static int open_libgl(void) +{ + libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL); + if (!libgl) + return GL3W_ERROR_LIBRARY_OPEN; + return GL3W_OK; +} + +static void close_libgl(void) { dlclose(libgl); } + +static GL3WglProc get_proc(const char *proc) +{ + GL3WglProc res; + *(void **)(&res) = dlsym(libgl, proc); + return res; +} +#else +#include + +static void *libgl; +static GL3WglProc (*glx_get_proc_address)(const GLubyte *); + +static int open_libgl(void) +{ + // While most systems use libGL.so.1, NetBSD seems to use that libGL.so.3. See https://github.com/ocornut/imgui/issues/6983 + libgl = dlopen("libGL.so", RTLD_LAZY | RTLD_LOCAL); + if (!libgl) + libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL); + if (!libgl) + libgl = dlopen("libGL.so.3", RTLD_LAZY | RTLD_LOCAL); + if (!libgl) + return GL3W_ERROR_LIBRARY_OPEN; + *(void **)(&glx_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB"); + return GL3W_OK; +} + +static void close_libgl(void) { dlclose(libgl); } + +static GL3WglProc get_proc(const char *proc) +{ + GL3WglProc res; + res = glx_get_proc_address((const GLubyte *)proc); + if (!res) + *(void **)(&res) = dlsym(libgl, proc); + return res; +} +#endif + +static struct { int major, minor; } version; + +static int parse_version(void) +{ + if (!glGetIntegerv) + return GL3W_ERROR_INIT; + glGetIntegerv(GL_MAJOR_VERSION, &version.major); + glGetIntegerv(GL_MINOR_VERSION, &version.minor); + if (version.major == 0 && version.minor == 0) + { + // Query GL_VERSION in desktop GL 2.x, the string will start with "." + if (const char* gl_version = (const char*)glGetString(GL_VERSION)) + sscanf(gl_version, "%d.%d", &version.major, &version.minor); + } + if (version.major < 2) + return GL3W_ERROR_OPENGL_VERSION; + return GL3W_OK; +} + +static void load_procs(GL3WGetProcAddressProc proc); + +int imgl3wInit(void) +{ + int res = open_libgl(); + if (res) + return res; + atexit(close_libgl); + return imgl3wInit2(get_proc); +} + +int imgl3wInit2(GL3WGetProcAddressProc proc) +{ + load_procs(proc); + return parse_version(); +} + +int imgl3wIsSupported(int major, int minor) +{ + if (major < 2) + return 0; + if (version.major == major) + return version.minor >= minor; + return version.major >= major; +} + +GL3WglProc imgl3wGetProcAddress(const char *proc) { return get_proc(proc); } + +static const char *proc_names[] = { + "glActiveTexture", + "glAttachShader", + "glBindBuffer", + "glBindSampler", + "glBindTexture", + "glBindVertexArray", + "glBlendEquation", + "glBlendEquationSeparate", + "glBlendFuncSeparate", + "glBufferData", + "glBufferSubData", + "glClear", + "glClearColor", + "glCompileShader", + "glCreateProgram", + "glCreateShader", + "glDeleteBuffers", + "glDeleteProgram", + "glDeleteShader", + "glDeleteTextures", + "glDeleteVertexArrays", + "glDetachShader", + "glDisable", + "glDisableVertexAttribArray", + "glDrawElements", + "glDrawElementsBaseVertex", + "glEnable", + "glEnableVertexAttribArray", + "glFlush", + "glGenBuffers", + "glGenTextures", + "glGenVertexArrays", + "glGetAttribLocation", + "glGetError", + "glGetIntegerv", + "glGetProgramInfoLog", + "glGetProgramiv", + "glGetShaderInfoLog", + "glGetShaderiv", + "glGetString", + "glGetStringi", + "glGetUniformLocation", + "glGetVertexAttribPointerv", + "glGetVertexAttribiv", + "glIsEnabled", + "glIsProgram", + "glLinkProgram", + "glPixelStorei", + "glPolygonMode", + "glReadPixels", + "glScissor", + "glShaderSource", + "glTexImage2D", + "glTexParameteri", + "glUniform1i", + "glUniformMatrix4fv", + "glUseProgram", + "glVertexAttribPointer", + "glViewport", +}; + +GL3W_API union ImGL3WProcs imgl3wProcs; + +static void load_procs(GL3WGetProcAddressProc proc) +{ + size_t i; + for (i = 0; i < GL3W_ARRAY_SIZE(proc_names); i++) + imgl3wProcs.ptr[i] = proc(proc_names[i]); +} + +#ifdef __cplusplus +} +#endif +#endif diff --git a/include/imgui/imgui_impl_sdl2.h b/include/imgui/imgui_impl_sdl2.h new file mode 100644 index 00000000..dd5e047e --- /dev/null +++ b/include/imgui/imgui_impl_sdl2.h @@ -0,0 +1,43 @@ +// dear imgui: Platform Backend for SDL2 +// This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) +// (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) + +// Implemented features: +// [X] Platform: Clipboard support. +// [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen. +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy SDL_SCANCODE_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] +// [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. +// [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. +// [X] Platform: Basic IME support. App needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// Learn about Dear ImGui: +// - FAQ https://dearimgui.com/faq +// - Getting Started https://dearimgui.com/getting-started +// - Documentation https://dearimgui.com/docs (same as your local docs/ folder). +// - Introduction, links and more at the top of imgui.cpp + +#pragma once +#include "imgui.h" // IMGUI_IMPL_API +#ifndef IMGUI_DISABLE + +struct SDL_Window; +struct SDL_Renderer; +typedef union SDL_Event SDL_Event; + +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window); +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window); +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForSDLRenderer(SDL_Window* window, SDL_Renderer* renderer); +IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForOther(SDL_Window* window); +IMGUI_IMPL_API void ImGui_ImplSDL2_Shutdown(); +IMGUI_IMPL_API void ImGui_ImplSDL2_NewFrame(); +IMGUI_IMPL_API bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); + +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS +static inline void ImGui_ImplSDL2_NewFrame(SDL_Window*) { ImGui_ImplSDL2_NewFrame(); } // 1.84: removed unnecessary parameter +#endif + +#endif // #ifndef IMGUI_DISABLE diff --git a/include/imgui/imgui_impl_sdlrenderer2.h b/include/imgui/imgui_impl_sdlrenderer2.h new file mode 100644 index 00000000..843850ff --- /dev/null +++ b/include/imgui/imgui_impl_sdlrenderer2.h @@ -0,0 +1,39 @@ +// dear imgui: Renderer Backend for SDL_Renderer for SDL2 +// (Requires: SDL 2.0.17+) + +// Note how SDL_Renderer is an _optional_ component of SDL2. +// For a multi-platform app consider using e.g. SDL+DirectX on Windows and SDL+OpenGL on Linux/OSX. +// If your application will want to render any non trivial amount of graphics other than UI, +// please be aware that SDL_Renderer currently offers a limited graphic API to the end-user and +// it might be difficult to step out of those boundaries. + +// Implemented features: +// [X] Renderer: User texture binding. Use 'SDL_Texture*' as ImTextureID. Read the FAQ about ImTextureID! +// [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// Learn about Dear ImGui: +// - FAQ https://dearimgui.com/faq +// - Getting Started https://dearimgui.com/getting-started +// - Documentation https://dearimgui.com/docs (same as your local docs/ folder). +// - Introduction, links and more at the top of imgui.cpp + +#pragma once +#ifndef IMGUI_DISABLE +#include "imgui.h" // IMGUI_IMPL_API + +struct SDL_Renderer; + +IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_Init(SDL_Renderer* renderer); +IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_Shutdown(); +IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_NewFrame(); +IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_RenderDrawData(ImDrawData* draw_data); + +// Called by Init/NewFrame/Shutdown +IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_CreateFontsTexture(); +IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_DestroyFontsTexture(); +IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_CreateDeviceObjects(); +IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_DestroyDeviceObjects(); + +#endif // #ifndef IMGUI_DISABLE diff --git a/include/imgui/imgui_internal.h b/include/imgui/imgui_internal.h new file mode 100644 index 00000000..6c07f722 --- /dev/null +++ b/include/imgui/imgui_internal.h @@ -0,0 +1,3581 @@ +// dear imgui, v1.90.2 WIP +// (internal structures/api) + +// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility. + +/* + +Index of this file: + +// [SECTION] Header mess +// [SECTION] Forward declarations +// [SECTION] Context pointer +// [SECTION] STB libraries includes +// [SECTION] Macros +// [SECTION] Generic helpers +// [SECTION] ImDrawList support +// [SECTION] Widgets support: flags, enums, data structures +// [SECTION] Data types support +// [SECTION] Popup support +// [SECTION] Inputs support +// [SECTION] Clipper support +// [SECTION] Navigation support +// [SECTION] Typing-select support +// [SECTION] Columns support +// [SECTION] Multi-select support +// [SECTION] Docking support +// [SECTION] Viewport support +// [SECTION] Settings support +// [SECTION] Localization support +// [SECTION] Metrics, Debug tools +// [SECTION] Generic context hooks +// [SECTION] ImGuiContext (main imgui context) +// [SECTION] ImGuiWindowTempData, ImGuiWindow +// [SECTION] Tab bar, Tab item support +// [SECTION] Table support +// [SECTION] ImGui internal API +// [SECTION] ImFontAtlas internal API +// [SECTION] Test Engine specific hooks (imgui_test_engine) + +*/ + +#pragma once +#ifndef IMGUI_DISABLE + +//----------------------------------------------------------------------------- +// [SECTION] Header mess +//----------------------------------------------------------------------------- + +#ifndef IMGUI_VERSION +#include "imgui.h" +#endif + +#include // FILE*, sscanf +#include // NULL, malloc, free, qsort, atoi, atof +#include // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf +#include // INT_MIN, INT_MAX + +// Enable SSE intrinsics if available +#if (defined __SSE__ || defined __x86_64__ || defined _M_X64 || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1))) && !defined(IMGUI_DISABLE_SSE) +#define IMGUI_ENABLE_SSE +#include +#endif + +// Visual Studio warnings +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) +#pragma warning (disable: 26812) // The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). [MSVC Static Analyzer) +#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6). +#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later +#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types +#endif +#endif + +// Clang/GCC warnings with -Weverything +#if defined(__clang__) +#pragma clang diagnostic push +#if __has_warning("-Wunknown-warning-option") +#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx' +#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants ok, for ImFloor() +#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#pragma clang diagnostic ignored "-Wdouble-promotion" +#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision +#pragma clang diagnostic ignored "-Wmissing-noreturn" // warning: function 'xxx' could be declared with attribute 'noreturn' +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind +#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead +#endif + +// In 1.89.4, we moved the implementation of "courtesy maths operators" from imgui_internal.h in imgui.h +// As they are frequently requested, we do not want to encourage to many people using imgui_internal.h +#if defined(IMGUI_DEFINE_MATH_OPERATORS) && !defined(IMGUI_DEFINE_MATH_OPERATORS_IMPLEMENTED) +#error Please '#define IMGUI_DEFINE_MATH_OPERATORS' _BEFORE_ including imgui.h! +#endif + +// Legacy defines +#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74 +#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS +#endif +#ifdef IMGUI_DISABLE_MATH_FUNCTIONS // Renamed in 1.74 +#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS +#endif + +// Enable stb_truetype by default unless FreeType is enabled. +// You can compile with both by defining both IMGUI_ENABLE_FREETYPE and IMGUI_ENABLE_STB_TRUETYPE together. +#ifndef IMGUI_ENABLE_FREETYPE +#define IMGUI_ENABLE_STB_TRUETYPE +#endif + +//----------------------------------------------------------------------------- +// [SECTION] Forward declarations +//----------------------------------------------------------------------------- + +struct ImBitVector; // Store 1-bit per value +struct ImRect; // An axis-aligned rectangle (2 points) +struct ImDrawDataBuilder; // Helper to build a ImDrawData instance +struct ImDrawListSharedData; // Data shared between all ImDrawList instances +struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it +struct ImGuiContext; // Main Dear ImGui context +struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine +struct ImGuiDataVarInfo; // Variable information (e.g. to avoid style variables from an enum) +struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum +struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup() +struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box +struct ImGuiInputTextDeactivateData;// Short term storage to backup text of a deactivating InputText() while another is stealing active id +struct ImGuiLastItemData; // Status storage for last submitted items +struct ImGuiLocEntry; // A localization entry. +struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only +struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result +struct ImGuiNavTreeNodeData; // Temporary storage for last TreeNode() being a Left arrow landing candidate. +struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions +struct ImGuiNextWindowData; // Storage for SetNextWindow** functions +struct ImGuiNextItemData; // Storage for SetNextItem** functions +struct ImGuiOldColumnData; // Storage data for a single column for legacy Columns() api +struct ImGuiOldColumns; // Storage data for a columns set for legacy Columns() api +struct ImGuiPopupData; // Storage for current popup stack +struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file +struct ImGuiStackSizes; // Storage of stack sizes for debugging/asserting +struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it +struct ImGuiTabBar; // Storage for a tab bar +struct ImGuiTabItem; // Storage for a tab item (within a tab bar) +struct ImGuiTable; // Storage for a table +struct ImGuiTableColumn; // Storage for one column of a table +struct ImGuiTableInstanceData; // Storage for one instance of a same table +struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables. +struct ImGuiTableSettings; // Storage for a table .ini settings +struct ImGuiTableColumnsSettings; // Storage for a column .ini settings +struct ImGuiTypingSelectState; // Storage for GetTypingSelectRequest() +struct ImGuiTypingSelectRequest; // Storage for GetTypingSelectRequest() (aimed to be public) +struct ImGuiWindow; // Storage for one window +struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window) +struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session) + +// Enumerations +// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists. +enum ImGuiLocKey : int; // -> enum ImGuiLocKey // Enum: a localization entry for translation. +typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical + +// Flags +typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later) +typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags +typedef int ImGuiFocusRequestFlags; // -> enum ImGuiFocusRequestFlags_ // Flags: for FocusWindow(); +typedef int ImGuiInputFlags; // -> enum ImGuiInputFlags_ // Flags: for IsKeyPressed(), IsMouseClicked(), SetKeyOwner(), SetItemKeyOwner() etc. +typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag(), g.LastItemData.InFlags +typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for g.LastItemData.StatusFlags +typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns() +typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight() +typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests +typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions +typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions +typedef int ImGuiScrollFlags; // -> enum ImGuiScrollFlags_ // Flags: for ScrollToItem() and navigation requests +typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx() +typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx() +typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx() +typedef int ImGuiTypingSelectFlags; // -> enum ImGuiTypingSelectFlags_ // Flags: for GetTypingSelectRequest() + +typedef void (*ImGuiErrorLogCallback)(void* user_data, const char* fmt, ...); + +//----------------------------------------------------------------------------- +// [SECTION] Context pointer +// See implementation of this variable in imgui.cpp for comments and details. +//----------------------------------------------------------------------------- + +#ifndef GImGui +extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer +#endif + +//------------------------------------------------------------------------- +// [SECTION] STB libraries includes +//------------------------------------------------------------------------- + +namespace ImStb +{ + +#undef IMSTB_TEXTEDIT_STRING +#undef IMSTB_TEXTEDIT_CHARTYPE +#define IMSTB_TEXTEDIT_STRING ImGuiInputTextState +#define IMSTB_TEXTEDIT_CHARTYPE ImWchar +#define IMSTB_TEXTEDIT_GETWIDTH_NEWLINE (-1.0f) +#define IMSTB_TEXTEDIT_UNDOSTATECOUNT 99 +#define IMSTB_TEXTEDIT_UNDOCHARCOUNT 999 +#include "imstb_textedit.h" + +} // namespace ImStb + +//----------------------------------------------------------------------------- +// [SECTION] Macros +//----------------------------------------------------------------------------- + +// Debug Printing Into TTY +// (since IMGUI_VERSION_NUM >= 18729: IMGUI_DEBUG_LOG was reworked into IMGUI_DEBUG_PRINTF (and removed framecount from it). If you were using a #define IMGUI_DEBUG_LOG please rename) +#ifndef IMGUI_DEBUG_PRINTF +#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS +#define IMGUI_DEBUG_PRINTF(_FMT,...) printf(_FMT, __VA_ARGS__) +#else +#define IMGUI_DEBUG_PRINTF(_FMT,...) ((void)0) +#endif +#endif + +// Debug Logging for ShowDebugLogWindow(). This is designed for relatively rare events so please don't spam. +#ifndef IMGUI_DISABLE_DEBUG_TOOLS +#define IMGUI_DEBUG_LOG(...) ImGui::DebugLog(__VA_ARGS__) +#else +#define IMGUI_DEBUG_LOG(...) ((void)0) +#endif +#define IMGUI_DEBUG_LOG_ACTIVEID(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_FOCUS(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_POPUP(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_NAV(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_SELECTION(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_CLIPPER(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_IO(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) +#define IMGUI_DEBUG_LOG_INPUTROUTING(...) do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0) + +// Static Asserts +#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "") + +// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much. +// We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code. +//#define IMGUI_DEBUG_PARANOID +#ifdef IMGUI_DEBUG_PARANOID +#define IM_ASSERT_PARANOID(_EXPR) IM_ASSERT(_EXPR) +#else +#define IM_ASSERT_PARANOID(_EXPR) +#endif + +// Error handling +// Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults. +#ifndef IM_ASSERT_USER_ERROR +#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG) // Recoverable User Error +#endif + +// Misc Macros +#define IM_PI 3.14159265358979323846f +#ifdef _WIN32 +#define IM_NEWLINE "\r\n" // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!) +#else +#define IM_NEWLINE "\n" +#endif +#ifndef IM_TABSIZE // Until we move this to runtime and/or add proper tab support, at least allow users to compile-time override +#define IM_TABSIZE (4) +#endif +#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8 +#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose +#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255 +#define IM_TRUNC(_VAL) ((float)(int)(_VAL)) // ImTrunc() is not inlined in MSVC debug builds +#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) // +#define IM_STRINGIFY_HELPER(_X) #_X +#define IM_STRINGIFY(_X) IM_STRINGIFY_HELPER(_X) // Preprocessor idiom to stringify e.g. an integer. +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS +#define IM_FLOOR IM_TRUNC +#endif + +// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall +#ifdef _MSC_VER +#define IMGUI_CDECL __cdecl +#else +#define IMGUI_CDECL +#endif + +// Warnings +#if defined(_MSC_VER) && !defined(__clang__) +#define IM_MSVC_WARNING_SUPPRESS(XXXX) __pragma(warning(suppress: XXXX)) +#else +#define IM_MSVC_WARNING_SUPPRESS(XXXX) +#endif + +// Debug Tools +// Use 'Metrics/Debugger->Tools->Item Picker' to break into the call-stack of a specific item. +// This will call IM_DEBUG_BREAK() which you may redefine yourself. See https://github.com/scottt/debugbreak for more reference. +#ifndef IM_DEBUG_BREAK +#if defined (_MSC_VER) +#define IM_DEBUG_BREAK() __debugbreak() +#elif defined(__clang__) +#define IM_DEBUG_BREAK() __builtin_debugtrap() +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define IM_DEBUG_BREAK() __asm__ volatile("int3;nop") +#elif defined(__GNUC__) && defined(__thumb__) +#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xde01") +#elif defined(__GNUC__) && defined(__arm__) && !defined(__thumb__) +#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xe7f001f0") +#else +#define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger! +#endif +#endif // #ifndef IM_DEBUG_BREAK + +// Format specifiers, printing 64-bit hasn't been decently standardized... +// In a real application you should be using PRId64 and PRIu64 from (non-windows) and on Windows define them yourself. +#if defined(_MSC_VER) && !defined(__clang__) +#define IM_PRId64 "I64d" +#define IM_PRIu64 "I64u" +#define IM_PRIX64 "I64X" +#else +#define IM_PRId64 "lld" +#define IM_PRIu64 "llu" +#define IM_PRIX64 "llX" +#endif + +//----------------------------------------------------------------------------- +// [SECTION] Generic helpers +// Note that the ImXXX helpers functions are lower-level than ImGui functions. +// ImGui functions or the ImGui context are never called/used from other ImXXX functions. +//----------------------------------------------------------------------------- +// - Helpers: Hashing +// - Helpers: Sorting +// - Helpers: Bit manipulation +// - Helpers: String +// - Helpers: Formatting +// - Helpers: UTF-8 <> wchar conversions +// - Helpers: ImVec2/ImVec4 operators +// - Helpers: Maths +// - Helpers: Geometry +// - Helper: ImVec1 +// - Helper: ImVec2ih +// - Helper: ImRect +// - Helper: ImBitArray +// - Helper: ImBitVector +// - Helper: ImSpan<>, ImSpanAllocator<> +// - Helper: ImPool<> +// - Helper: ImChunkStream<> +// - Helper: ImGuiTextIndex +//----------------------------------------------------------------------------- + +// Helpers: Hashing +IMGUI_API ImGuiID ImHashData(const void* data, size_t data_size, ImGuiID seed = 0); +IMGUI_API ImGuiID ImHashStr(const char* data, size_t data_size = 0, ImGuiID seed = 0); + +// Helpers: Sorting +#ifndef ImQsort +static inline void ImQsort(void* base, size_t count, size_t size_of_element, int(IMGUI_CDECL *compare_func)(void const*, void const*)) { if (count > 1) qsort(base, count, size_of_element, compare_func); } +#endif + +// Helpers: Color Blending +IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b); + +// Helpers: Bit manipulation +static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; } +static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v & (v - 1)) == 0; } +static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } + +// Helpers: String +IMGUI_API int ImStricmp(const char* str1, const char* str2); // Case insensitive compare. +IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count); // Case insensitive compare to a certain count. +IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count); // Copy to a certain count and always zero terminate (strncpy doesn't). +IMGUI_API char* ImStrdup(const char* str); // Duplicate a string. +IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str); // Copy in provided buffer, recreate buffer if needed. +IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c); // Find first occurrence of 'c' in string range. +IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line +IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end); // Find a substring in a string range. +IMGUI_API void ImStrTrimBlanks(char* str); // Remove leading and trailing blanks from a buffer. +IMGUI_API const char* ImStrSkipBlank(const char* str); // Find first non-blank character. +IMGUI_API int ImStrlenW(const ImWchar* str); // Computer string length (ImWchar string) +IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line (ImWchar string) +IM_MSVC_RUNTIME_CHECKS_OFF +static inline char ImToUpper(char c) { return (c >= 'a' && c <= 'z') ? c &= ~32 : c; } +static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; } +static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; } +IM_MSVC_RUNTIME_CHECKS_RESTORE + +// Helpers: Formatting +IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3); +IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3); +IMGUI_API void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...) IM_FMTARGS(3); +IMGUI_API void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args) IM_FMTLIST(3); +IMGUI_API const char* ImParseFormatFindStart(const char* format); +IMGUI_API const char* ImParseFormatFindEnd(const char* format); +IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size); +IMGUI_API void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size); +IMGUI_API const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size); +IMGUI_API int ImParseFormatPrecision(const char* format, int default_value); + +// Helpers: UTF-8 <> wchar conversions +IMGUI_API const char* ImTextCharToUtf8(char out_buf[5], unsigned int c); // return out_buf +IMGUI_API int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count +IMGUI_API int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end); // read one character. return input UTF-8 bytes count +IMGUI_API int ImTextStrFromUtf8(ImWchar* out_buf, int out_buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL); // return input UTF-8 bytes count +IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count) +IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8 +IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8 +IMGUI_API const char* ImTextFindPreviousUtf8Codepoint(const char* in_text_start, const char* in_text_curr); // return previous UTF-8 code-point. + +// Helpers: File System +#ifdef IMGUI_DISABLE_FILE_FUNCTIONS +#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS +typedef void* ImFileHandle; +static inline ImFileHandle ImFileOpen(const char*, const char*) { return NULL; } +static inline bool ImFileClose(ImFileHandle) { return false; } +static inline ImU64 ImFileGetSize(ImFileHandle) { return (ImU64)-1; } +static inline ImU64 ImFileRead(void*, ImU64, ImU64, ImFileHandle) { return 0; } +static inline ImU64 ImFileWrite(const void*, ImU64, ImU64, ImFileHandle) { return 0; } +#endif +#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS +typedef FILE* ImFileHandle; +IMGUI_API ImFileHandle ImFileOpen(const char* filename, const char* mode); +IMGUI_API bool ImFileClose(ImFileHandle file); +IMGUI_API ImU64 ImFileGetSize(ImFileHandle file); +IMGUI_API ImU64 ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file); +IMGUI_API ImU64 ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file); +#else +#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions +#endif +IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0); + +// Helpers: Maths +IM_MSVC_RUNTIME_CHECKS_OFF +// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy) +#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS +#define ImFabs(X) fabsf(X) +#define ImSqrt(X) sqrtf(X) +#define ImFmod(X, Y) fmodf((X), (Y)) +#define ImCos(X) cosf(X) +#define ImSin(X) sinf(X) +#define ImAcos(X) acosf(X) +#define ImAtan2(Y, X) atan2f((Y), (X)) +#define ImAtof(STR) atof(STR) +#define ImCeil(X) ceilf(X) +static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision +static inline double ImPow(double x, double y) { return pow(x, y); } +static inline float ImLog(float x) { return logf(x); } // DragBehaviorT/SliderBehaviorT uses ImLog with either float/double and need the precision +static inline double ImLog(double x) { return log(x); } +static inline int ImAbs(int x) { return x < 0 ? -x : x; } +static inline float ImAbs(float x) { return fabsf(x); } +static inline double ImAbs(double x) { return fabs(x); } +static inline float ImSign(float x) { return (x < 0.0f) ? -1.0f : (x > 0.0f) ? 1.0f : 0.0f; } // Sign operator - returns -1, 0 or 1 based on sign of argument +static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : (x > 0.0) ? 1.0 : 0.0; } +#ifdef IMGUI_ENABLE_SSE +static inline float ImRsqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); } +#else +static inline float ImRsqrt(float x) { return 1.0f / sqrtf(x); } +#endif +static inline double ImRsqrt(double x) { return 1.0 / sqrt(x); } +#endif +// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double +// (Exceptionally using templates here but we could also redefine them for those types) +template static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; } +template static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; } +template static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; } +template static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); } +template static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; } +template static inline T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; } +template static inline T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; } +// - Misc maths helpers +static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); } +static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); } +static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx) { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); } +static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); } +static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); } +static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t) { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); } +static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; } +static inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); } +static inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); } +static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; } +static inline float ImTrunc(float f) { return (float)(int)(f); } +static inline ImVec2 ImTrunc(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); } +static inline float ImFloor(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf() +static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2(ImFloor(v.x), ImFloor(v.y)); } +static inline int ImModPositive(int a, int b) { return (a + b) % b; } +static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; } +static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); } +static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; } +static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } +static inline bool ImIsFloatAboveGuaranteedIntegerPrecision(float f) { return f <= -16777216 || f >= 16777216; } +static inline float ImExponentialMovingAverage(float avg, float sample, int n) { avg -= avg / n; avg += sample / n; return avg; } +IM_MSVC_RUNTIME_CHECKS_RESTORE + +// Helpers: Geometry +IMGUI_API ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t); +IMGUI_API ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments); // For curves with explicit number of segments +IMGUI_API ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol +IMGUI_API ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, float t); +IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p); +IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p); +IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p); +IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w); +inline float ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; } + +// Helper: ImVec1 (1D vector) +// (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches) +IM_MSVC_RUNTIME_CHECKS_OFF +struct ImVec1 +{ + float x; + constexpr ImVec1() : x(0.0f) { } + constexpr ImVec1(float _x) : x(_x) { } +}; + +// Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage) +struct ImVec2ih +{ + short x, y; + constexpr ImVec2ih() : x(0), y(0) {} + constexpr ImVec2ih(short _x, short _y) : x(_x), y(_y) {} + constexpr explicit ImVec2ih(const ImVec2& rhs) : x((short)rhs.x), y((short)rhs.y) {} +}; + +// Helper: ImRect (2D axis aligned bounding-box) +// NB: we can't rely on ImVec2 math operators being available here! +struct IMGUI_API ImRect +{ + ImVec2 Min; // Upper-left + ImVec2 Max; // Lower-right + + constexpr ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {} + constexpr ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {} + constexpr ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} + constexpr ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} + + ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); } + ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); } + float GetWidth() const { return Max.x - Min.x; } + float GetHeight() const { return Max.y - Min.y; } + float GetArea() const { return (Max.x - Min.x) * (Max.y - Min.y); } + ImVec2 GetTL() const { return Min; } // Top-left + ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right + ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left + ImVec2 GetBR() const { return Max; } // Bottom-right + bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; } + bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; } + bool ContainsWithPad(const ImVec2& p, const ImVec2& pad) const { return p.x >= Min.x - pad.x && p.y >= Min.y - pad.y && p.x < Max.x + pad.x && p.y < Max.y + pad.y; } + bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; } + void Add(const ImVec2& p) { if (Min.x > p.x) Min.x = p.x; if (Min.y > p.y) Min.y = p.y; if (Max.x < p.x) Max.x = p.x; if (Max.y < p.y) Max.y = p.y; } + void Add(const ImRect& r) { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; } + void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; } + void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; } + void Translate(const ImVec2& d) { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; } + void TranslateX(float dx) { Min.x += dx; Max.x += dx; } + void TranslateY(float dy) { Min.y += dy; Max.y += dy; } + void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display. + void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped. + void Floor() { Min.x = IM_TRUNC(Min.x); Min.y = IM_TRUNC(Min.y); Max.x = IM_TRUNC(Max.x); Max.y = IM_TRUNC(Max.y); } + bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; } + ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); } +}; + +// Helper: ImBitArray +#define IM_BITARRAY_TESTBIT(_ARRAY, _N) ((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0) // Macro version of ImBitArrayTestBit(): ensure args have side-effect or are costly! +#define IM_BITARRAY_CLEARBIT(_ARRAY, _N) ((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31)))) // Macro version of ImBitArrayClearBit(): ensure args have side-effect or are costly! +inline size_t ImBitArrayGetStorageSizeInBytes(int bitcount) { return (size_t)((bitcount + 31) >> 5) << 2; } +inline void ImBitArrayClearAllBits(ImU32* arr, int bitcount){ memset(arr, 0, ImBitArrayGetStorageSizeInBytes(bitcount)); } +inline bool ImBitArrayTestBit(const ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; } +inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; } +inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; } +inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on range [n..n2) +{ + n2--; + while (n <= n2) + { + int a_mod = (n & 31); + int b_mod = (n2 > (n | 31) ? 31 : (n2 & 31)) + 1; + ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1); + arr[n >> 5] |= mask; + n = (n + 32) & ~31; + } +} + +typedef ImU32* ImBitArrayPtr; // Name for use in structs + +// Helper: ImBitArray class (wrapper over ImBitArray functions) +// Store 1-bit per value. +template +struct ImBitArray +{ + ImU32 Storage[(BITCOUNT + 31) >> 5]; + ImBitArray() { ClearAllBits(); } + void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); } + void SetAllBits() { memset(Storage, 255, sizeof(Storage)); } + bool TestBit(int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); } + void SetBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArraySetBit(Storage, n); } + void ClearBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArrayClearBit(Storage, n); } + void SetBitRange(int n, int n2) { n += OFFSET; n2 += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT && n2 > n && n2 <= BITCOUNT); ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2) + bool operator[](int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); } +}; + +// Helper: ImBitVector +// Store 1-bit per value. +struct IMGUI_API ImBitVector +{ + ImVector Storage; + void Create(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); } + void Clear() { Storage.clear(); } + bool TestBit(int n) const { IM_ASSERT(n < (Storage.Size << 5)); return IM_BITARRAY_TESTBIT(Storage.Data, n); } + void SetBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); } + void ClearBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); } +}; +IM_MSVC_RUNTIME_CHECKS_RESTORE + +// Helper: ImSpan<> +// Pointing to a span of data we don't own. +template +struct ImSpan +{ + T* Data; + T* DataEnd; + + // Constructors, destructor + inline ImSpan() { Data = DataEnd = NULL; } + inline ImSpan(T* data, int size) { Data = data; DataEnd = data + size; } + inline ImSpan(T* data, T* data_end) { Data = data; DataEnd = data_end; } + + inline void set(T* data, int size) { Data = data; DataEnd = data + size; } + inline void set(T* data, T* data_end) { Data = data; DataEnd = data_end; } + inline int size() const { return (int)(ptrdiff_t)(DataEnd - Data); } + inline int size_in_bytes() const { return (int)(ptrdiff_t)(DataEnd - Data) * (int)sizeof(T); } + inline T& operator[](int i) { T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; } + inline const T& operator[](int i) const { const T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; } + + inline T* begin() { return Data; } + inline const T* begin() const { return Data; } + inline T* end() { return DataEnd; } + inline const T* end() const { return DataEnd; } + + // Utilities + inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; } +}; + +// Helper: ImSpanAllocator<> +// Facilitate storing multiple chunks into a single large block (the "arena") +// - Usage: call Reserve() N times, allocate GetArenaSizeInBytes() worth, pass it to SetArenaBasePtr(), call GetSpan() N times to retrieve the aligned ranges. +template +struct ImSpanAllocator +{ + char* BasePtr; + int CurrOff; + int CurrIdx; + int Offsets[CHUNKS]; + int Sizes[CHUNKS]; + + ImSpanAllocator() { memset(this, 0, sizeof(*this)); } + inline void Reserve(int n, size_t sz, int a=4) { IM_ASSERT(n == CurrIdx && n < CHUNKS); CurrOff = IM_MEMALIGN(CurrOff, a); Offsets[n] = CurrOff; Sizes[n] = (int)sz; CurrIdx++; CurrOff += (int)sz; } + inline int GetArenaSizeInBytes() { return CurrOff; } + inline void SetArenaBasePtr(void* base_ptr) { BasePtr = (char*)base_ptr; } + inline void* GetSpanPtrBegin(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n]); } + inline void* GetSpanPtrEnd(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n] + Sizes[n]); } + template + inline void GetSpan(int n, ImSpan* span) { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); } +}; + +// Helper: ImPool<> +// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer, +// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object. +typedef int ImPoolIdx; +template +struct ImPool +{ + ImVector Buf; // Contiguous data + ImGuiStorage Map; // ID->Index + ImPoolIdx FreeIdx; // Next free idx to use + ImPoolIdx AliveCount; // Number of active/alive items (for display purpose) + + ImPool() { FreeIdx = AliveCount = 0; } + ~ImPool() { Clear(); } + T* GetByKey(ImGuiID key) { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; } + T* GetByIndex(ImPoolIdx n) { return &Buf[n]; } + ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); } + T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); } + bool Contains(const T* p) const { return (p >= Buf.Data && p < Buf.Data + Buf.Size); } + void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = AliveCount = 0; } + T* Add() { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); AliveCount++; return &Buf[idx]; } + void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); } + void Remove(ImGuiID key, ImPoolIdx idx) { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; } + void Reserve(int capacity) { Buf.reserve(capacity); Map.Data.reserve(capacity); } + + // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... } + // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize() + int GetAliveCount() const { return AliveCount; } // Number of active/alive items in the pool (for display purpose) + int GetBufSize() const { return Buf.Size; } + int GetMapSize() const { return Map.Data.Size; } // It is the map we need iterate to find valid items, since we don't have "alive" storage anywhere + T* TryGetMapData(ImPoolIdx n) { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); } +}; + +// Helper: ImChunkStream<> +// Build and iterate a contiguous stream of variable-sized structures. +// This is used by Settings to store persistent data while reducing allocation count. +// We store the chunk size first, and align the final size on 4 bytes boundaries. +// The tedious/zealous amount of casting is to avoid -Wcast-align warnings. +template +struct ImChunkStream +{ + ImVector Buf; + + void clear() { Buf.clear(); } + bool empty() const { return Buf.Size == 0; } + int size() const { return Buf.Size; } + T* alloc_chunk(size_t sz) { size_t HDR_SZ = 4; sz = IM_MEMALIGN(HDR_SZ + sz, 4u); int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); } + T* begin() { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); } + T* next_chunk(T* p) { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; } + int chunk_size(const T* p) { return ((const int*)p)[-1]; } + T* end() { return (T*)(void*)(Buf.Data + Buf.Size); } + int offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; } + T* ptr_from_offset(int off) { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); } + void swap(ImChunkStream& rhs) { rhs.Buf.swap(Buf); } +}; + +// Helper: ImGuiTextIndex<> +// Maintain a line index for a text buffer. This is a strong candidate to be moved into the public API. +struct ImGuiTextIndex +{ + ImVector LineOffsets; + int EndOffset = 0; // Because we don't own text buffer we need to maintain EndOffset (may bake in LineOffsets?) + + void clear() { LineOffsets.clear(); EndOffset = 0; } + int size() { return LineOffsets.Size; } + const char* get_line_begin(const char* base, int n) { return base + LineOffsets[n]; } + const char* get_line_end(const char* base, int n) { return base + (n + 1 < LineOffsets.Size ? (LineOffsets[n + 1] - 1) : EndOffset); } + void append(const char* base, int old_size, int new_size); +}; + +//----------------------------------------------------------------------------- +// [SECTION] ImDrawList support +//----------------------------------------------------------------------------- + +// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value. +// Estimation of number of circle segment based on error is derived using method described in https://stackoverflow.com/a/2244088/15194693 +// Number of segments (N) is calculated using equation: +// N = ceil ( pi / acos(1 - error / r) ) where r > 0, error <= r +// Our equation is significantly simpler that one in the post thanks for choosing segment that is +// perpendicular to X axis. Follow steps in the article from this starting condition and you will +// will get this result. +// +// Rendering circles with an odd number of segments, while mathematically correct will produce +// asymmetrical results on the raster grid. Therefore we're rounding N to next even number (7->8, 8->8, 9->10 etc.) +#define IM_ROUNDUP_TO_EVEN(_V) ((((_V) + 1) / 2) * 2) +#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 4 +#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512 +#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp(IM_ROUNDUP_TO_EVEN((int)ImCeil(IM_PI / ImAcos(1 - ImMin((_MAXERROR), (_RAD)) / (_RAD)))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX) + +// Raw equation from IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC rewritten for 'r' and 'error'. +#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(_N,_MAXERROR) ((_MAXERROR) / (1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI)))) +#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_ERROR(_N,_RAD) ((1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))) / (_RAD)) + +// ImDrawList: Lookup table size for adaptive arc drawing, cover full circle. +#ifndef IM_DRAWLIST_ARCFAST_TABLE_SIZE +#define IM_DRAWLIST_ARCFAST_TABLE_SIZE 48 // Number of samples in lookup table. +#endif +#define IM_DRAWLIST_ARCFAST_SAMPLE_MAX IM_DRAWLIST_ARCFAST_TABLE_SIZE // Sample index _PathArcToFastEx() for 360 angle. + +// Data shared between all ImDrawList instances +// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure. +struct IMGUI_API ImDrawListSharedData +{ + ImVec2 TexUvWhitePixel; // UV of white pixel in the atlas + ImFont* Font; // Current/default font (optional, for simplified AddText overload) + float FontSize; // Current/default font size (optional, for simplified AddText overload) + float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() + float CircleSegmentMaxError; // Number of circle segments to use per pixel of radius for AddCircle() etc + ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen() + ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards) + + // [Internal] Temp write buffer + ImVector TempBuffer; + + // [Internal] Lookup tables + ImVec2 ArcFastVtx[IM_DRAWLIST_ARCFAST_TABLE_SIZE]; // Sample points on the quarter of the circle. + float ArcFastRadiusCutoff; // Cutoff radius after which arc drawing will fallback to slower PathArcTo() + ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius before we calculate it dynamically (to avoid calculation overhead) + const ImVec4* TexUvLines; // UV of anti-aliased lines in the atlas + + ImDrawListSharedData(); + void SetCircleTessellationMaxError(float max_error); +}; + +struct ImDrawDataBuilder +{ + ImVector* Layers[2]; // Pointers to global layers for: regular, tooltip. LayersP[0] is owned by DrawData. + ImVector LayerData1; + + ImDrawDataBuilder() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Widgets support: flags, enums, data structures +//----------------------------------------------------------------------------- + +// Flags used by upcoming items +// - input: PushItemFlag() manipulates g.CurrentItemFlags, ItemAdd() calls may add extra flags. +// - output: stored in g.LastItemData.InFlags +// Current window shared by all windows. +// This is going to be exposed in imgui.h when stabilized enough. +enum ImGuiItemFlags_ +{ + // Controlled by user + ImGuiItemFlags_None = 0, + ImGuiItemFlags_NoTabStop = 1 << 0, // false // Disable keyboard tabbing. This is a "lighter" version of ImGuiItemFlags_NoNav. + ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings. + ImGuiItemFlags_Disabled = 1 << 2, // false // Disable interactions but doesn't affect visuals. See BeginDisabled()/EndDisabled(). See github.com/ocornut/imgui/issues/211 + ImGuiItemFlags_NoNav = 1 << 3, // false // Disable any form of focusing (keyboard/gamepad directional navigation and SetKeyboardFocusHere() calls) + ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false // Disable item being a candidate for default focus (e.g. used by title bar items) + ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // Disable MenuItem/Selectable() automatically closing their popup window + ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets) + ImGuiItemFlags_ReadOnly = 1 << 7, // false // [ALPHA] Allow hovering interactions but underlying value is not changed. + ImGuiItemFlags_NoWindowHoverableCheck = 1 << 8, // false // Disable hoverable check in ItemHoverable() + ImGuiItemFlags_AllowOverlap = 1 << 9, // false // Allow being overlapped by another widget. Not-hovered to Hovered transition deferred by a frame. + + // Controlled by widget code + ImGuiItemFlags_Inputable = 1 << 10, // false // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature. + ImGuiItemFlags_HasSelectionUserData = 1 << 11, // false // Set by SetNextItemSelectionUserData() +}; + +// Status flags for an already submitted item +// - output: stored in g.LastItemData.StatusFlags +enum ImGuiItemStatusFlags_ +{ + ImGuiItemStatusFlags_None = 0, + ImGuiItemStatusFlags_HoveredRect = 1 << 0, // Mouse position is within item rectangle (does NOT mean that the window is in correct z-order and can be hovered!, this is only one part of the most-common IsItemHovered test) + ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, // g.LastItemData.DisplayRect is valid + ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets) + ImGuiItemStatusFlags_ToggledSelection = 1 << 3, // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected", only state changes, in order to easily handle clipping with less issues. + ImGuiItemStatusFlags_ToggledOpen = 1 << 4, // Set when TreeNode() reports toggling their open state. + ImGuiItemStatusFlags_HasDeactivated = 1 << 5, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag. + ImGuiItemStatusFlags_Deactivated = 1 << 6, // Only valid if ImGuiItemStatusFlags_HasDeactivated is set. + ImGuiItemStatusFlags_HoveredWindow = 1 << 7, // Override the HoveredWindow test to allow cross-window hover testing. + ImGuiItemStatusFlags_Visible = 1 << 8, // [WIP] Set when item is overlapping the current clipping rectangle (Used internally. Please don't use yet: API/system will change as we refactor Itemadd()). + ImGuiItemStatusFlags_HasClipRect = 1 << 9, // g.LastItemData.ClipRect is valid + + // Additional status + semantic for ImGuiTestEngine +#ifdef IMGUI_ENABLE_TEST_ENGINE + ImGuiItemStatusFlags_Openable = 1 << 20, // Item is an openable (e.g. TreeNode) + ImGuiItemStatusFlags_Opened = 1 << 21, // Opened status + ImGuiItemStatusFlags_Checkable = 1 << 22, // Item is a checkable (e.g. CheckBox, MenuItem) + ImGuiItemStatusFlags_Checked = 1 << 23, // Checked status + ImGuiItemStatusFlags_Inputable = 1 << 24, // Item is a text-inputable (e.g. InputText, SliderXXX, DragXXX) +#endif +}; + +// Extend ImGuiHoveredFlags_ +enum ImGuiHoveredFlagsPrivate_ +{ + ImGuiHoveredFlags_DelayMask_ = ImGuiHoveredFlags_DelayNone | ImGuiHoveredFlags_DelayShort | ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay, + ImGuiHoveredFlags_AllowedMaskForIsWindowHovered = ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary, + ImGuiHoveredFlags_AllowedMaskForIsItemHovered = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped | ImGuiHoveredFlags_AllowWhenDisabled | ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayMask_, +}; + +// Extend ImGuiInputTextFlags_ +enum ImGuiInputTextFlagsPrivate_ +{ + // [Internal] + ImGuiInputTextFlags_Multiline = 1 << 26, // For internal use by InputTextMultiline() + ImGuiInputTextFlags_NoMarkEdited = 1 << 27, // For internal use by functions using InputText() before reformatting data + ImGuiInputTextFlags_MergedItem = 1 << 28, // For internal use by TempInputText(), will skip calling ItemAdd(). Require bounding-box to strictly match. +}; + +// Extend ImGuiButtonFlags_ +enum ImGuiButtonFlagsPrivate_ +{ + ImGuiButtonFlags_PressedOnClick = 1 << 4, // return true on click (mouse down event) + ImGuiButtonFlags_PressedOnClickRelease = 1 << 5, // [Default] return true on click + release on same item <-- this is what the majority of Button are using + ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 6, // return true on click + release even if the release event is not done while hovering the item + ImGuiButtonFlags_PressedOnRelease = 1 << 7, // return true on release (default requires click+release) + ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, // return true on double-click (default requires click+release) + ImGuiButtonFlags_PressedOnDragDropHold = 1 << 9, // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers) + ImGuiButtonFlags_Repeat = 1 << 10, // hold to repeat + ImGuiButtonFlags_FlattenChildren = 1 << 11, // allow interactions even if a child window is overlapping + ImGuiButtonFlags_AllowOverlap = 1 << 12, // require previous frame HoveredId to either match id or be null before being usable. + ImGuiButtonFlags_DontClosePopups = 1 << 13, // disable automatically closing parent popup on press // [UNUSED] + //ImGuiButtonFlags_Disabled = 1 << 14, // disable interactions -> use BeginDisabled() or ImGuiItemFlags_Disabled + ImGuiButtonFlags_AlignTextBaseLine = 1 << 15, // vertically align Structure to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine + ImGuiButtonFlags_NoKeyModifiers = 1 << 16, // disable mouse interaction if a key modifier is held + ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only) + ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated (FIXME: this is essentially used everytime an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.InFlags) + ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item + ImGuiButtonFlags_NoSetKeyOwner = 1 << 20, // don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!) + ImGuiButtonFlags_NoTestKeyOwner = 1 << 21, // don't test key/input owner when polling the key (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!) + ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold, + ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease, +}; + +// Extend ImGuiComboFlags_ +enum ImGuiComboFlagsPrivate_ +{ + ImGuiComboFlags_CustomPreview = 1 << 20, // enable BeginComboPreview() +}; + +// Extend ImGuiSliderFlags_ +enum ImGuiSliderFlagsPrivate_ +{ + ImGuiSliderFlags_Vertical = 1 << 20, // Should this slider be orientated vertically? + ImGuiSliderFlags_ReadOnly = 1 << 21, // Consider using g.NextItemData.ItemFlags |= ImGuiItemFlags_ReadOnly instead. +}; + +// Extend ImGuiSelectableFlags_ +enum ImGuiSelectableFlagsPrivate_ +{ + // NB: need to be in sync with last value of ImGuiSelectableFlags_ + ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20, + ImGuiSelectableFlags_SelectOnNav = 1 << 21, // (WIP) Auto-select when moved into. This is not exposed in public API as to handle multi-select and modifiers we will need user to explicitly control focus scope. May be replaced with a BeginSelection() API. + ImGuiSelectableFlags_SelectOnClick = 1 << 22, // Override Structure behavior to react on Click (default is Click+Release) + ImGuiSelectableFlags_SelectOnRelease = 1 << 23, // Override Structure behavior to react on Release (default is Click+Release) + ImGuiSelectableFlags_SpanAvailWidth = 1 << 24, // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus) + ImGuiSelectableFlags_SetNavIdOnHover = 1 << 25, // Set Nav/Focus ID on mouse hover (used by MenuItem) + ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 26, // Disable padding each side with ItemSpacing * 0.5f + ImGuiSelectableFlags_NoSetKeyOwner = 1 << 27, // Don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!) +}; + +// Extend ImGuiTreeNodeFlags_ +enum ImGuiTreeNodeFlagsPrivate_ +{ + ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20, + ImGuiTreeNodeFlags_UpsideDownArrow = 1 << 21,// (FIXME-WIP) Turn Down arrow into an Up arrow, but reversed trees (#6517) +}; + +enum ImGuiSeparatorFlags_ +{ + ImGuiSeparatorFlags_None = 0, + ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar + ImGuiSeparatorFlags_Vertical = 1 << 1, + ImGuiSeparatorFlags_SpanAllColumns = 1 << 2, // Make separator cover all columns of a legacy Columns() set. +}; + +// Flags for FocusWindow(). This is not called ImGuiFocusFlags to avoid confusion with public-facing ImGuiFocusedFlags. +// FIXME: Once we finishing replacing more uses of GetTopMostPopupModal()+IsWindowWithinBeginStackOf() +// and FindBlockingModal() with this, we may want to change the flag to be opt-out instead of opt-in. +enum ImGuiFocusRequestFlags_ +{ + ImGuiFocusRequestFlags_None = 0, + ImGuiFocusRequestFlags_RestoreFocusedChild = 1 << 0, // Find last focused child (if any) and focus it instead. + ImGuiFocusRequestFlags_UnlessBelowModal = 1 << 1, // Do not set focus if the window is below a modal. +}; + +enum ImGuiTextFlags_ +{ + ImGuiTextFlags_None = 0, + ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0, +}; + +enum ImGuiTooltipFlags_ +{ + ImGuiTooltipFlags_None = 0, + ImGuiTooltipFlags_OverridePrevious = 1 << 1, // Clear/ignore previously submitted tooltip (defaults to append) +}; + +// FIXME: this is in development, not exposed/functional as a generic feature yet. +// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2 +enum ImGuiLayoutType_ +{ + ImGuiLayoutType_Horizontal = 0, + ImGuiLayoutType_Vertical = 1 +}; + +enum ImGuiLogType +{ + ImGuiLogType_None = 0, + ImGuiLogType_TTY, + ImGuiLogType_File, + ImGuiLogType_Buffer, + ImGuiLogType_Clipboard, +}; + +// X/Y enums are fixed to 0/1 so they may be used to index ImVec2 +enum ImGuiAxis +{ + ImGuiAxis_None = -1, + ImGuiAxis_X = 0, + ImGuiAxis_Y = 1 +}; + +enum ImGuiPlotType +{ + ImGuiPlotType_Lines, + ImGuiPlotType_Histogram, +}; + +// Stacked color modifier, backup of modified data so we can restore it +struct ImGuiColorMod +{ + ImGuiCol Col; + ImVec4 BackupValue; +}; + +// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable. +struct ImGuiStyleMod +{ + ImGuiStyleVar VarIdx; + union { int BackupInt[2]; float BackupFloat[2]; }; + ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; } + ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; } + ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; } +}; + +// Storage data for BeginComboPreview()/EndComboPreview() +struct IMGUI_API ImGuiComboPreviewData +{ + ImRect PreviewRect; + ImVec2 BackupCursorPos; + ImVec2 BackupCursorMaxPos; + ImVec2 BackupCursorPosPrevLine; + float BackupPrevLineTextBaseOffset; + ImGuiLayoutType BackupLayout; + + ImGuiComboPreviewData() { memset(this, 0, sizeof(*this)); } +}; + +// Stacked storage data for BeginGroup()/EndGroup() +struct IMGUI_API ImGuiGroupData +{ + ImGuiID WindowID; + ImVec2 BackupCursorPos; + ImVec2 BackupCursorMaxPos; + ImVec2 BackupCursorPosPrevLine; + ImVec1 BackupIndent; + ImVec1 BackupGroupOffset; + ImVec2 BackupCurrLineSize; + float BackupCurrLineTextBaseOffset; + ImGuiID BackupActiveIdIsAlive; + bool BackupActiveIdPreviousFrameIsAlive; + bool BackupHoveredIdIsAlive; + bool BackupIsSameLine; + bool EmitItem; +}; + +// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper. +struct IMGUI_API ImGuiMenuColumns +{ + ImU32 TotalWidth; + ImU32 NextTotalWidth; + ImU16 Spacing; + ImU16 OffsetIcon; // Always zero for now + ImU16 OffsetLabel; // Offsets are locked in Update() + ImU16 OffsetShortcut; + ImU16 OffsetMark; + ImU16 Widths[4]; // Width of: Icon, Label, Shortcut, Mark (accumulators for current frame) + + ImGuiMenuColumns() { memset(this, 0, sizeof(*this)); } + void Update(float spacing, bool window_reappearing); + float DeclColumns(float w_icon, float w_label, float w_shortcut, float w_mark); + void CalcNextTotalWidth(bool update_offsets); +}; + +// Internal temporary state for deactivating InputText() instances. +struct IMGUI_API ImGuiInputTextDeactivatedState +{ + ImGuiID ID; // widget id owning the text state (which just got deactivated) + ImVector TextA; // text buffer + + ImGuiInputTextDeactivatedState() { memset(this, 0, sizeof(*this)); } + void ClearFreeMemory() { ID = 0; TextA.clear(); } +}; +// Internal state of the currently focused/edited text input box +// For a given item ID, access with ImGui::GetInputTextState() +struct IMGUI_API ImGuiInputTextState +{ + ImGuiContext* Ctx; // parent UI context (needs to be set explicitly by parent). + ImGuiID ID; // widget id owning the text state + int CurLenW, CurLenA; // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not. + ImVector TextW; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer. + ImVector TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity. + ImVector InitialTextA; // backup of end-user buffer at the time of focus (in UTF-8, unaltered) + bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument) + int BufCapacityA; // end-user buffer capacity + float ScrollX; // horizontal scrolling/offset + ImStb::STB_TexteditState Stb; // state for stb_textedit.h + float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately + bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!) + bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection + bool Edited; // edited this frame + ImGuiInputTextFlags Flags; // copy of InputText() flags. may be used to check if e.g. ImGuiInputTextFlags_Password is set. + bool ReloadUserBuf; // force a reload of user buf so it may be modified externally. may be automatic in future version. + int ReloadSelectionStart; // POSITIONS ARE IN IMWCHAR units *NOT* UTF-8 this is why this is not exposed yet. + int ReloadSelectionEnd; + + ImGuiInputTextState() { memset(this, 0, sizeof(*this)); } + void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); } + void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); } + int GetUndoAvailCount() const { return Stb.undostate.undo_point; } + int GetRedoAvailCount() const { return IMSTB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; } + void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation + + // Cursor & Selection + void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking + void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); } + bool HasSelection() const { return Stb.select_start != Stb.select_end; } + void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; } + int GetCursorPos() const { return Stb.cursor; } + int GetSelectionStart() const { return Stb.select_start; } + int GetSelectionEnd() const { return Stb.select_end; } + void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; } + + // Reload user buf (WIP #2890) + // If you modify underlying user-passed const char* while active you need to call this (InputText V2 may lift this) + // strcpy(my_buf, "hello"); + // if (ImGuiInputTextState* state = ImGui::GetInputTextState(id)) // id may be ImGui::GetItemID() is last item + // state->ReloadUserBufAndSelectAll(); + void ReloadUserBufAndSelectAll() { ReloadUserBuf = true; ReloadSelectionStart = 0; ReloadSelectionEnd = INT_MAX; } + void ReloadUserBufAndKeepSelection() { ReloadUserBuf = true; ReloadSelectionStart = Stb.select_start; ReloadSelectionEnd = Stb.select_end; } + void ReloadUserBufAndMoveToEnd() { ReloadUserBuf = true; ReloadSelectionStart = ReloadSelectionEnd = INT_MAX; } + +}; + +enum ImGuiNextWindowDataFlags_ +{ + ImGuiNextWindowDataFlags_None = 0, + ImGuiNextWindowDataFlags_HasPos = 1 << 0, + ImGuiNextWindowDataFlags_HasSize = 1 << 1, + ImGuiNextWindowDataFlags_HasContentSize = 1 << 2, + ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3, + ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4, + ImGuiNextWindowDataFlags_HasFocus = 1 << 5, + ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6, + ImGuiNextWindowDataFlags_HasScroll = 1 << 7, + ImGuiNextWindowDataFlags_HasChildFlags = 1 << 8, +}; + +// Storage for SetNexWindow** functions +struct ImGuiNextWindowData +{ + ImGuiNextWindowDataFlags Flags; + ImGuiCond PosCond; + ImGuiCond SizeCond; + ImGuiCond CollapsedCond; + ImVec2 PosVal; + ImVec2 PosPivotVal; + ImVec2 SizeVal; + ImVec2 ContentSizeVal; + ImVec2 ScrollVal; + ImGuiChildFlags ChildFlags; + bool CollapsedVal; + ImRect SizeConstraintRect; + ImGuiSizeCallback SizeCallback; + void* SizeCallbackUserData; + float BgAlphaVal; // Override background alpha + ImVec2 MenuBarOffsetMinVal; // (Always on) This is not exposed publicly, so we don't clear it and it doesn't have a corresponding flag (could we? for consistency?) + + ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); } + inline void ClearFlags() { Flags = ImGuiNextWindowDataFlags_None; } +}; + +// Multi-Selection item index or identifier when using SetNextItemSelectionUserData()/BeginMultiSelect() +// (Most users are likely to use this store an item INDEX but this may be used to store a POINTER as well.) +typedef ImS64 ImGuiSelectionUserData; + +enum ImGuiNextItemDataFlags_ +{ + ImGuiNextItemDataFlags_None = 0, + ImGuiNextItemDataFlags_HasWidth = 1 << 0, + ImGuiNextItemDataFlags_HasOpen = 1 << 1, + ImGuiNextItemDataFlags_HasShortcut = 1 << 2, +}; + +struct ImGuiNextItemData +{ + ImGuiNextItemDataFlags Flags; + ImGuiItemFlags ItemFlags; // Currently only tested/used for ImGuiItemFlags_AllowOverlap. + // Non-flags members are NOT cleared by ItemAdd() meaning they are still valid during NavProcessItem() + ImGuiSelectionUserData SelectionUserData; // Set by SetNextItemSelectionUserData() (note that NULL/0 is a valid value, we use -1 == ImGuiSelectionUserData_Invalid to mark invalid values) + float Width; // Set by SetNextItemWidth() + ImGuiKeyChord Shortcut; // Set by SetNextItemShortcut() + bool OpenVal; // Set by SetNextItemOpen() + ImGuiCond OpenCond : 8; + + ImGuiNextItemData() { memset(this, 0, sizeof(*this)); SelectionUserData = -1; } + inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; ItemFlags = ImGuiItemFlags_None; } // Also cleared manually by ItemAdd()! +}; + +// Status storage for the last submitted item +struct ImGuiLastItemData +{ + ImGuiID ID; + ImGuiItemFlags InFlags; // See ImGuiItemFlags_ + ImGuiItemStatusFlags StatusFlags; // See ImGuiItemStatusFlags_ + ImRect Rect; // Full rectangle + ImRect NavRect; // Navigation scoring rectangle (not displayed) + // Rarely used fields are not explicitly cleared, only valid when the corresponding ImGuiItemStatusFlags is set. + ImRect DisplayRect; // Display rectangle (ONLY VALID IF ImGuiItemStatusFlags_HasDisplayRect is set) + ImRect ClipRect; // Clip rectangle at the time of submitting item (ONLY VALID IF ImGuiItemStatusFlags_HasClipRect is set) + + ImGuiLastItemData() { memset(this, 0, sizeof(*this)); } +}; + +// Store data emitted by TreeNode() for usage by TreePop() to implement ImGuiTreeNodeFlags_NavLeftJumpsBackHere. +// This is the minimum amount of data that we need to perform the equivalent of NavApplyItemToResult() and which we can't infer in TreePop() +// Only stored when the node is a potential candidate for landing on a Left arrow jump. +struct ImGuiNavTreeNodeData +{ + ImGuiID ID; + ImGuiItemFlags InFlags; + ImRect NavRect; +}; + +struct IMGUI_API ImGuiStackSizes +{ + short SizeOfIDStack; + short SizeOfColorStack; + short SizeOfStyleVarStack; + short SizeOfFontStack; + short SizeOfFocusScopeStack; + short SizeOfGroupStack; + short SizeOfItemFlagsStack; + short SizeOfBeginPopupStack; + short SizeOfDisabledStack; + + ImGuiStackSizes() { memset(this, 0, sizeof(*this)); } + void SetToContextState(ImGuiContext* ctx); + void CompareWithContextState(ImGuiContext* ctx); +}; + +// Data saved for each window pushed into the stack +struct ImGuiWindowStackData +{ + ImGuiWindow* Window; + ImGuiLastItemData ParentLastItemDataBackup; + ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting +}; + +struct ImGuiShrinkWidthItem +{ + int Index; + float Width; + float InitialWidth; +}; + +struct ImGuiPtrOrIndex +{ + void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool. + int Index; // Usually index in a main pool. + + ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; } + ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Data types support +//----------------------------------------------------------------------------- + +struct ImGuiDataVarInfo +{ + ImGuiDataType Type; + ImU32 Count; // 1+ + ImU32 Offset; // Offset in parent structure + void* GetVarPtr(void* parent) const { return (void*)((unsigned char*)parent + Offset); } +}; + +struct ImGuiDataTypeTempStorage +{ + ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT +}; + +// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo(). +struct ImGuiDataTypeInfo +{ + size_t Size; // Size in bytes + const char* Name; // Short descriptive name for the type, for debugging + const char* PrintFmt; // Default printf format for the type + const char* ScanFmt; // Default scanf format for the type +}; + +// Extend ImGuiDataType_ +enum ImGuiDataTypePrivate_ +{ + ImGuiDataType_String = ImGuiDataType_COUNT + 1, + ImGuiDataType_Pointer, + ImGuiDataType_ID, +}; + +//----------------------------------------------------------------------------- +// [SECTION] Popup support +//----------------------------------------------------------------------------- + +enum ImGuiPopupPositionPolicy +{ + ImGuiPopupPositionPolicy_Default, + ImGuiPopupPositionPolicy_ComboBox, + ImGuiPopupPositionPolicy_Tooltip, +}; + +// Storage for popup stacks (g.OpenPopupStack and g.BeginPopupStack) +struct ImGuiPopupData +{ + ImGuiID PopupId; // Set on OpenPopup() + ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup() + ImGuiWindow* BackupNavWindow;// Set on OpenPopup(), a NavWindow that will be restored on popup close + int ParentNavLayer; // Resolved on BeginPopup(). Actually a ImGuiNavLayer type (declared down below), initialized to -1 which is not part of an enum, but serves well-enough as "not any of layers" value + int OpenFrameCount; // Set on OpenPopup() + ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items) + ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse) + ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup + + ImGuiPopupData() { memset(this, 0, sizeof(*this)); ParentNavLayer = OpenFrameCount = -1; } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Inputs support +//----------------------------------------------------------------------------- + +// Bit array for named keys +typedef ImBitArray ImBitArrayForNamedKeys; + +// [Internal] Key ranges +#define ImGuiKey_LegacyNativeKey_BEGIN 0 +#define ImGuiKey_LegacyNativeKey_END 512 +#define ImGuiKey_Keyboard_BEGIN (ImGuiKey_NamedKey_BEGIN) +#define ImGuiKey_Keyboard_END (ImGuiKey_GamepadStart) +#define ImGuiKey_Gamepad_BEGIN (ImGuiKey_GamepadStart) +#define ImGuiKey_Gamepad_END (ImGuiKey_GamepadRStickDown + 1) +#define ImGuiKey_Mouse_BEGIN (ImGuiKey_MouseLeft) +#define ImGuiKey_Mouse_END (ImGuiKey_MouseWheelY + 1) +#define ImGuiKey_Aliases_BEGIN (ImGuiKey_Mouse_BEGIN) +#define ImGuiKey_Aliases_END (ImGuiKey_Mouse_END) + +// [Internal] Named shortcuts for Navigation +#define ImGuiKey_NavKeyboardTweakSlow ImGuiMod_Ctrl +#define ImGuiKey_NavKeyboardTweakFast ImGuiMod_Shift +#define ImGuiKey_NavGamepadTweakSlow ImGuiKey_GamepadL1 +#define ImGuiKey_NavGamepadTweakFast ImGuiKey_GamepadR1 +#define ImGuiKey_NavGamepadActivate ImGuiKey_GamepadFaceDown +#define ImGuiKey_NavGamepadCancel ImGuiKey_GamepadFaceRight +#define ImGuiKey_NavGamepadMenu ImGuiKey_GamepadFaceLeft +#define ImGuiKey_NavGamepadInput ImGuiKey_GamepadFaceUp + +enum ImGuiInputEventType +{ + ImGuiInputEventType_None = 0, + ImGuiInputEventType_MousePos, + ImGuiInputEventType_MouseWheel, + ImGuiInputEventType_MouseButton, + ImGuiInputEventType_Key, + ImGuiInputEventType_Text, + ImGuiInputEventType_Focus, + ImGuiInputEventType_COUNT +}; + +enum ImGuiInputSource +{ + ImGuiInputSource_None = 0, + ImGuiInputSource_Mouse, // Note: may be Mouse or TouchScreen or Pen. See io.MouseSource to distinguish them. + ImGuiInputSource_Keyboard, + ImGuiInputSource_Gamepad, + ImGuiInputSource_Clipboard, // Currently only used by InputText() + ImGuiInputSource_COUNT +}; + +// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension? +// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor' +struct ImGuiInputEventMousePos { float PosX, PosY; ImGuiMouseSource MouseSource; }; +struct ImGuiInputEventMouseWheel { float WheelX, WheelY; ImGuiMouseSource MouseSource; }; +struct ImGuiInputEventMouseButton { int Button; bool Down; ImGuiMouseSource MouseSource; }; +struct ImGuiInputEventKey { ImGuiKey Key; bool Down; float AnalogValue; }; +struct ImGuiInputEventText { unsigned int Char; }; +struct ImGuiInputEventAppFocused { bool Focused; }; + +struct ImGuiInputEvent +{ + ImGuiInputEventType Type; + ImGuiInputSource Source; + ImU32 EventId; // Unique, sequential increasing integer to identify an event (if you need to correlate them to other data). + union + { + ImGuiInputEventMousePos MousePos; // if Type == ImGuiInputEventType_MousePos + ImGuiInputEventMouseWheel MouseWheel; // if Type == ImGuiInputEventType_MouseWheel + ImGuiInputEventMouseButton MouseButton; // if Type == ImGuiInputEventType_MouseButton + ImGuiInputEventKey Key; // if Type == ImGuiInputEventType_Key + ImGuiInputEventText Text; // if Type == ImGuiInputEventType_Text + ImGuiInputEventAppFocused AppFocused; // if Type == ImGuiInputEventType_Focus + }; + bool AddedByTestEngine; + + ImGuiInputEvent() { memset(this, 0, sizeof(*this)); } +}; + +// Input function taking an 'ImGuiID owner_id' argument defaults to (ImGuiKeyOwner_Any == 0) aka don't test ownership, which matches legacy behavior. +#define ImGuiKeyOwner_Any ((ImGuiID)0) // Accept key that have an owner, UNLESS a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease. +#define ImGuiKeyOwner_None ((ImGuiID)-1) // Require key to have no owner. + +typedef ImS16 ImGuiKeyRoutingIndex; + +// Routing table entry (sizeof() == 16 bytes) +struct ImGuiKeyRoutingData +{ + ImGuiKeyRoutingIndex NextEntryIndex; + ImU16 Mods; // Technically we'd only need 4-bits but for simplify we store ImGuiMod_ values which need 16-bits. ImGuiMod_Shortcut is already translated to Ctrl/Super. + ImU8 RoutingCurrScore; // [DEBUG] For debug display + ImU8 RoutingNextScore; // Lower is better (0: perfect score) + ImGuiID RoutingCurr; + ImGuiID RoutingNext; + + ImGuiKeyRoutingData() { NextEntryIndex = -1; Mods = 0; RoutingCurrScore = RoutingNextScore = 255; RoutingCurr = RoutingNext = ImGuiKeyOwner_None; } +}; + +// Routing table: maintain a desired owner for each possible key-chord (key + mods), and setup owner in NewFrame() when mods are matching. +// Stored in main context (1 instance) +struct ImGuiKeyRoutingTable +{ + ImGuiKeyRoutingIndex Index[ImGuiKey_NamedKey_COUNT]; // Index of first entry in Entries[] + ImVector Entries; + ImVector EntriesNext; // Double-buffer to avoid reallocation (could use a shared buffer) + + ImGuiKeyRoutingTable() { Clear(); } + void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Index); n++) Index[n] = -1; Entries.clear(); EntriesNext.clear(); } +}; + +// This extends ImGuiKeyData but only for named keys (legacy keys don't support the new features) +// Stored in main context (1 per named key). In the future it might be merged into ImGuiKeyData. +struct ImGuiKeyOwnerData +{ + ImGuiID OwnerCurr; + ImGuiID OwnerNext; + bool LockThisFrame; // Reading this key requires explicit owner id (until end of frame). Set by ImGuiInputFlags_LockThisFrame. + bool LockUntilRelease; // Reading this key requires explicit owner id (until key is released). Set by ImGuiInputFlags_LockUntilRelease. When this is true LockThisFrame is always true as well. + + ImGuiKeyOwnerData() { OwnerCurr = OwnerNext = ImGuiKeyOwner_None; LockThisFrame = LockUntilRelease = false; } +}; + +// Flags for extended versions of IsKeyPressed(), IsMouseClicked(), Shortcut(), SetKeyOwner(), SetItemKeyOwner() +// Don't mistake with ImGuiInputTextFlags! (which is for ImGui::InputText() function) +enum ImGuiInputFlags_ +{ + // Flags for IsKeyPressed(), IsKeyChordPressed(), IsMouseClicked(), Shortcut() + ImGuiInputFlags_None = 0, + + // Repeat mode + ImGuiInputFlags_Repeat = 1 << 0, // Enable repeat. Return true on successive repeats. Default for legacy IsKeyPressed(). NOT Default for legacy IsMouseClicked(). MUST BE == 1. + ImGuiInputFlags_RepeatRateDefault = 1 << 1, // Repeat rate: Regular (default) + ImGuiInputFlags_RepeatRateNavMove = 1 << 2, // Repeat rate: Fast + ImGuiInputFlags_RepeatRateNavTweak = 1 << 3, // Repeat rate: Faster + + // Repeat mode: Specify when repeating key pressed can be interrupted. + // In theory ImGuiInputFlags_RepeatUntilOtherKeyPress may be a desirable default, but it would break too many behavior so everything is opt-in. + ImGuiInputFlags_RepeatUntilRelease = 1 << 4, // Stop repeating when released (default for all functions except Shortcut). This only exists to allow overriding Shortcut() default behavior. + ImGuiInputFlags_RepeatUntilKeyModsChange = 1 << 5, // Stop repeating when released OR if keyboard mods are changed (default for Shortcut) + ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone = 1 << 6, // Stop repeating when released OR if keyboard mods are leaving the None state. Allows going from Mod+Key to Key by releasing Mod. + ImGuiInputFlags_RepeatUntilOtherKeyPress = 1 << 7, // Stop repeating when released OR if any other keyboard key is pressed during the repeat + + // Flags for SetItemKeyOwner() + ImGuiInputFlags_CondHovered = 1 << 8, // Only set if item is hovered (default to both) + ImGuiInputFlags_CondActive = 1 << 9, // Only set if item is active (default to both) + ImGuiInputFlags_CondDefault_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive, + + // Flags for SetKeyOwner(), SetItemKeyOwner() + // Locking is useful to make input-owner-aware code steal keys from non-input-owner-aware code. If all code is input-owner-aware locking would never be necessary. + ImGuiInputFlags_LockThisFrame = 1 << 10, // Further accesses to key data will require EXPLICIT owner ID (ImGuiKeyOwner_Any/0 will NOT accepted for polling). Cleared at end of frame. + ImGuiInputFlags_LockUntilRelease = 1 << 11, // Further accesses to key data will require EXPLICIT owner ID (ImGuiKeyOwner_Any/0 will NOT accepted for polling). Cleared when the key is released or at end of each frame if key is released. + + // Routing policies for Shortcut() + low-level SetShortcutRouting() + // - The general idea is that several callers register interest in a shortcut, and only one owner gets it. + // Parent -> call Shortcut(Ctrl+S) // When Parent is focused, Parent gets the shortcut. + // Child1 -> call Shortcut(Ctrl+S) // When Child1 is focused, Child1 gets the shortcut (Child1 overrides Parent shortcuts) + // Child2 -> no call // When Child2 is focused, Parent gets the shortcut. + // The whole system is order independent, so if Child1 does it calls before Parent results will be identical. + // This is an important property as it facilitate working with foreign code or larger codebase. + // - Visualize registered routes in 'Metrics->Inputs' and submitted routes in 'Debug Log->InputRouting'. + // - When a policy (except for _RouteAlways *) is set, Shortcut() will register itself with SetShortcutRouting(), + // allowing the system to decide where to route the input among other route-aware calls. + // (* Using ImGuiInputFlags_RouteAlways is roughly equivalent to calling IsKeyChordPressed(key)). + // - Shortcut() uses ImGuiInputFlags_RouteFocused by default. Meaning that a Shortcut() call will register + // a route and only succeed when parent window is in the focus-stack and if no-one with a higher priority + // is claiming the same shortcut. + // - You can chain two unrelated windows in the focus stack using SetWindowParentWindowForFocusRoute(). + // - Priorities: GlobalHigh > Focused (when owner is active item) > Global > Focused (when focused window) > GlobalLow. + // - Can select only 1 policy among all available. + ImGuiInputFlags_RouteFocused = 1 << 12, // (Default) Honor focus route: Accept inputs if window is in focus stack. Deep-most focused window takes inputs. ActiveId takes inputs over deep-most focused window. + ImGuiInputFlags_RouteGlobalLow = 1 << 13, // Register route globally (lowest priority: unless a focused window or active item registered the route) -> recommended Global priority IF you need a Global priority. + ImGuiInputFlags_RouteGlobal = 1 << 14, // Register route globally (medium priority: unless an active item registered the route, e.g. CTRL+A registered by InputText will take priority over this). + ImGuiInputFlags_RouteGlobalHigh = 1 << 15, // Register route globally (higher priority: unlikely you need to use that: will interfere with every active items, e.g. CTRL+A registered by InputText will be overriden by this) + ImGuiInputFlags_RouteAlways = 1 << 16, // Do not register route, poll keys directly. + // Routing polices: extra options + ImGuiInputFlags_RouteUnlessBgFocused= 1 << 17, // Global routes will not be applied if underlying background/void is focused (== no Dear ImGui windows are focused). Useful for overlay applications. + + // [Internal] Mask of which function support which flags + ImGuiInputFlags_RepeatRateMask_ = ImGuiInputFlags_RepeatRateDefault | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak, + ImGuiInputFlags_RepeatUntilMask_ = ImGuiInputFlags_RepeatUntilRelease | ImGuiInputFlags_RepeatUntilKeyModsChange | ImGuiInputFlags_RepeatUntilKeyModsChangeFromNone | ImGuiInputFlags_RepeatUntilOtherKeyPress, + ImGuiInputFlags_RepeatMask_ = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_ | ImGuiInputFlags_RepeatUntilMask_, + ImGuiInputFlags_CondMask_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive, + ImGuiInputFlags_RouteMask_ = ImGuiInputFlags_RouteFocused | ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteGlobalLow | ImGuiInputFlags_RouteGlobalHigh, // _Always not part of this! + ImGuiInputFlags_SupportedByIsKeyPressed = ImGuiInputFlags_RepeatMask_, + ImGuiInputFlags_SupportedByIsMouseClicked = ImGuiInputFlags_Repeat, + ImGuiInputFlags_SupportedByShortcut = ImGuiInputFlags_RepeatMask_ | ImGuiInputFlags_RouteMask_ | ImGuiInputFlags_RouteAlways | ImGuiInputFlags_RouteUnlessBgFocused, + ImGuiInputFlags_SupportedBySetKeyOwner = ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease, + ImGuiInputFlags_SupportedBySetItemKeyOwner = ImGuiInputFlags_SupportedBySetKeyOwner | ImGuiInputFlags_CondMask_, +}; + +//----------------------------------------------------------------------------- +// [SECTION] Clipper support +//----------------------------------------------------------------------------- + +// Note that Max is exclusive, so perhaps should be using a Begin/End convention. +struct ImGuiListClipperRange +{ + int Min; + int Max; + bool PosToIndexConvert; // Begin/End are absolute position (will be converted to indices later) + ImS8 PosToIndexOffsetMin; // Add to Min after converting to indices + ImS8 PosToIndexOffsetMax; // Add to Min after converting to indices + + static ImGuiListClipperRange FromIndices(int min, int max) { ImGuiListClipperRange r = { min, max, false, 0, 0 }; return r; } + static ImGuiListClipperRange FromPositions(float y1, float y2, int off_min, int off_max) { ImGuiListClipperRange r = { (int)y1, (int)y2, true, (ImS8)off_min, (ImS8)off_max }; return r; } +}; + +// Temporary clipper data, buffers shared/reused between instances +struct ImGuiListClipperData +{ + ImGuiListClipper* ListClipper; + float LossynessOffset; + int StepNo; + int ItemsFrozen; + ImVector Ranges; + + ImGuiListClipperData() { memset(this, 0, sizeof(*this)); } + void Reset(ImGuiListClipper* clipper) { ListClipper = clipper; StepNo = ItemsFrozen = 0; Ranges.resize(0); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Navigation support +//----------------------------------------------------------------------------- + +enum ImGuiActivateFlags_ +{ + ImGuiActivateFlags_None = 0, + ImGuiActivateFlags_PreferInput = 1 << 0, // Favor activation that requires keyboard text input (e.g. for Slider/Drag). Default for Enter key. + ImGuiActivateFlags_PreferTweak = 1 << 1, // Favor activation for tweaking with arrows or gamepad (e.g. for Slider/Drag). Default for Space key and if keyboard is not used. + ImGuiActivateFlags_TryToPreserveState = 1 << 2, // Request widget to preserve state if it can (e.g. InputText will try to preserve cursor/selection) + ImGuiActivateFlags_FromTabbing = 1 << 3, // Activation requested by a tabbing request + ImGuiActivateFlags_FromShortcut = 1 << 4, // Activation requested by an item shortcut via SetNextItemShortcut() function. +}; + +// Early work-in-progress API for ScrollToItem() +enum ImGuiScrollFlags_ +{ + ImGuiScrollFlags_None = 0, + ImGuiScrollFlags_KeepVisibleEdgeX = 1 << 0, // If item is not visible: scroll as little as possible on X axis to bring item back into view [default for X axis] + ImGuiScrollFlags_KeepVisibleEdgeY = 1 << 1, // If item is not visible: scroll as little as possible on Y axis to bring item back into view [default for Y axis for windows that are already visible] + ImGuiScrollFlags_KeepVisibleCenterX = 1 << 2, // If item is not visible: scroll to make the item centered on X axis [rarely used] + ImGuiScrollFlags_KeepVisibleCenterY = 1 << 3, // If item is not visible: scroll to make the item centered on Y axis + ImGuiScrollFlags_AlwaysCenterX = 1 << 4, // Always center the result item on X axis [rarely used] + ImGuiScrollFlags_AlwaysCenterY = 1 << 5, // Always center the result item on Y axis [default for Y axis for appearing window) + ImGuiScrollFlags_NoScrollParent = 1 << 6, // Disable forwarding scrolling to parent window if required to keep item/rect visible (only scroll window the function was applied to). + ImGuiScrollFlags_MaskX_ = ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleCenterX | ImGuiScrollFlags_AlwaysCenterX, + ImGuiScrollFlags_MaskY_ = ImGuiScrollFlags_KeepVisibleEdgeY | ImGuiScrollFlags_KeepVisibleCenterY | ImGuiScrollFlags_AlwaysCenterY, +}; + +enum ImGuiNavHighlightFlags_ +{ + ImGuiNavHighlightFlags_None = 0, + ImGuiNavHighlightFlags_TypeDefault = 1 << 0, + ImGuiNavHighlightFlags_TypeThin = 1 << 1, + ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse. + ImGuiNavHighlightFlags_NoRounding = 1 << 3, +}; + +enum ImGuiNavMoveFlags_ +{ + ImGuiNavMoveFlags_None = 0, + ImGuiNavMoveFlags_LoopX = 1 << 0, // On failed request, restart from opposite side + ImGuiNavMoveFlags_LoopY = 1 << 1, + ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left) + ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful but provided for completeness + ImGuiNavMoveFlags_WrapMask_ = ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_WrapY, + ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place) + ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisible that only comprise elements that are already fully visible (used by PageUp/PageDown) + ImGuiNavMoveFlags_ScrollToEdgeY = 1 << 6, // Force scrolling to min/max (used by Home/End) // FIXME-NAV: Aim to remove or reword, probably unnecessary + ImGuiNavMoveFlags_Forwarded = 1 << 7, + ImGuiNavMoveFlags_DebugNoResult = 1 << 8, // Dummy scoring for debug purpose, don't apply result + ImGuiNavMoveFlags_FocusApi = 1 << 9, // Requests from focus API can land/focus/activate items even if they are marked with _NoTabStop (see NavProcessItemForTabbingRequest() for details) + ImGuiNavMoveFlags_IsTabbing = 1 << 10, // == Focus + Activate if item is Inputable + DontChangeNavHighlight + ImGuiNavMoveFlags_IsPageMove = 1 << 11, // Identify a PageDown/PageUp request. + ImGuiNavMoveFlags_Activate = 1 << 12, // Activate/select target item. + ImGuiNavMoveFlags_NoSelect = 1 << 13, // Don't trigger selection by not setting g.NavJustMovedTo + ImGuiNavMoveFlags_NoSetNavHighlight = 1 << 14, // Do not alter the visible state of keyboard vs mouse nav highlight +}; + +enum ImGuiNavLayer +{ + ImGuiNavLayer_Main = 0, // Main scrolling layer + ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt) + ImGuiNavLayer_COUNT +}; + +struct ImGuiNavItemData +{ + ImGuiWindow* Window; // Init,Move // Best candidate window (result->ItemWindow->RootWindowForNav == request->Window) + ImGuiID ID; // Init,Move // Best candidate item ID + ImGuiID FocusScopeId; // Init,Move // Best candidate focus scope ID + ImRect RectRel; // Init,Move // Best candidate bounding box in window relative space + ImGuiItemFlags InFlags; // ????,Move // Best candidate item flags + ImGuiSelectionUserData SelectionUserData;//I+Mov // Best candidate SetNextItemSelectionData() value. + float DistBox; // Move // Best candidate box distance to current NavId + float DistCenter; // Move // Best candidate center distance to current NavId + float DistAxial; // Move // Best candidate axial distance to current NavId + + ImGuiNavItemData() { Clear(); } + void Clear() { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; SelectionUserData = -1; DistBox = DistCenter = DistAxial = FLT_MAX; } +}; + +struct ImGuiFocusScopeData +{ + ImGuiID ID; + ImGuiID WindowID; +}; + +//----------------------------------------------------------------------------- +// [SECTION] Typing-select support +//----------------------------------------------------------------------------- + +// Flags for GetTypingSelectRequest() +enum ImGuiTypingSelectFlags_ +{ + ImGuiTypingSelectFlags_None = 0, + ImGuiTypingSelectFlags_AllowBackspace = 1 << 0, // Backspace to delete character inputs. If using: ensure GetTypingSelectRequest() is not called more than once per frame (filter by e.g. focus state) + ImGuiTypingSelectFlags_AllowSingleCharMode = 1 << 1, // Allow "single char" search mode which is activated when pressing the same character multiple times. +}; + +// Returned by GetTypingSelectRequest(), designed to eventually be public. +struct IMGUI_API ImGuiTypingSelectRequest +{ + ImGuiTypingSelectFlags Flags; // Flags passed to GetTypingSelectRequest() + int SearchBufferLen; + const char* SearchBuffer; // Search buffer contents (use full string. unless SingleCharMode is set, in which case use SingleCharSize). + bool SelectRequest; // Set when buffer was modified this frame, requesting a selection. + bool SingleCharMode; // Notify when buffer contains same character repeated, to implement special mode. In this situation it preferred to not display any on-screen search indication. + ImS8 SingleCharSize; // Length in bytes of first letter codepoint (1 for ascii, 2-4 for UTF-8). If (SearchBufferLen==RepeatCharSize) only 1 letter has been input. +}; + +// Storage for GetTypingSelectRequest() +struct IMGUI_API ImGuiTypingSelectState +{ + ImGuiTypingSelectRequest Request; // User-facing data + char SearchBuffer[64]; // Search buffer: no need to make dynamic as this search is very transient. + ImGuiID FocusScope; + int LastRequestFrame = 0; + float LastRequestTime = 0.0f; + bool SingleCharModeLock = false; // After a certain single char repeat count we lock into SingleCharMode. Two benefits: 1) buffer never fill, 2) we can provide an immediate SingleChar mode without timer elapsing. + + ImGuiTypingSelectState() { memset(this, 0, sizeof(*this)); } + void Clear() { SearchBuffer[0] = 0; SingleCharModeLock = false; } // We preserve remaining data for easier debugging +}; + +//----------------------------------------------------------------------------- +// [SECTION] Columns support +//----------------------------------------------------------------------------- + +// Flags for internal's BeginColumns(). This is an obsolete API. Prefer using BeginTable() nowadays! +enum ImGuiOldColumnFlags_ +{ + ImGuiOldColumnFlags_None = 0, + ImGuiOldColumnFlags_NoBorder = 1 << 0, // Disable column dividers + ImGuiOldColumnFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers + ImGuiOldColumnFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns + ImGuiOldColumnFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window + ImGuiOldColumnFlags_GrowParentContentsSize = 1 << 4, // Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove. + + // Obsolete names (will be removed) +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + //ImGuiColumnsFlags_None = ImGuiOldColumnFlags_None, + //ImGuiColumnsFlags_NoBorder = ImGuiOldColumnFlags_NoBorder, + //ImGuiColumnsFlags_NoResize = ImGuiOldColumnFlags_NoResize, + //ImGuiColumnsFlags_NoPreserveWidths = ImGuiOldColumnFlags_NoPreserveWidths, + //ImGuiColumnsFlags_NoForceWithinWindow = ImGuiOldColumnFlags_NoForceWithinWindow, + //ImGuiColumnsFlags_GrowParentContentsSize = ImGuiOldColumnFlags_GrowParentContentsSize, +#endif +}; + +struct ImGuiOldColumnData +{ + float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right) + float OffsetNormBeforeResize; + ImGuiOldColumnFlags Flags; // Not exposed + ImRect ClipRect; + + ImGuiOldColumnData() { memset(this, 0, sizeof(*this)); } +}; + +struct ImGuiOldColumns +{ + ImGuiID ID; + ImGuiOldColumnFlags Flags; + bool IsFirstFrame; + bool IsBeingResized; + int Current; + int Count; + float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x + float LineMinY, LineMaxY; + float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns() + float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns() + ImRect HostInitialClipRect; // Backup of ClipRect at the time of BeginColumns() + ImRect HostBackupClipRect; // Backup of ClipRect during PushColumnsBackground()/PopColumnsBackground() + ImRect HostBackupParentWorkRect;//Backup of WorkRect at the time of BeginColumns() + ImVector Columns; + ImDrawListSplitter Splitter; + + ImGuiOldColumns() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Multi-select support +//----------------------------------------------------------------------------- + +// We always assume that -1 is an invalid value (which works for indices and pointers) +#define ImGuiSelectionUserData_Invalid ((ImGuiSelectionUserData)-1) + +#ifdef IMGUI_HAS_MULTI_SELECT +// +#endif // #ifdef IMGUI_HAS_MULTI_SELECT + +//----------------------------------------------------------------------------- +// [SECTION] Docking support +//----------------------------------------------------------------------------- + +#ifdef IMGUI_HAS_DOCK +// +#endif // #ifdef IMGUI_HAS_DOCK + +//----------------------------------------------------------------------------- +// [SECTION] Viewport support +//----------------------------------------------------------------------------- + +// ImGuiViewport Private/Internals fields (cardinal sin: we are using inheritance!) +// Every instance of ImGuiViewport is in fact a ImGuiViewportP. +struct ImGuiViewportP : public ImGuiViewport +{ + int BgFgDrawListsLastFrame[2]; // Last frame number the background (0) and foreground (1) draw lists were used + ImDrawList* BgFgDrawLists[2]; // Convenience background (0) and foreground (1) draw lists. We use them to draw software mouser cursor when io.MouseDrawCursor is set and to draw most debug overlays. + ImDrawData DrawDataP; + ImDrawDataBuilder DrawDataBuilder; // Temporary data while building final ImDrawData + ImVec2 WorkOffsetMin; // Work Area: Offset from Pos to top-left corner of Work Area. Generally (0,0) or (0,+main_menu_bar_height). Work Area is Full Area but without menu-bars/status-bars (so WorkArea always fit inside Pos/Size!) + ImVec2 WorkOffsetMax; // Work Area: Offset from Pos+Size to bottom-right corner of Work Area. Generally (0,0) or (0,-status_bar_height). + ImVec2 BuildWorkOffsetMin; // Work Area: Offset being built during current frame. Generally >= 0.0f. + ImVec2 BuildWorkOffsetMax; // Work Area: Offset being built during current frame. Generally <= 0.0f. + + ImGuiViewportP() { BgFgDrawListsLastFrame[0] = BgFgDrawListsLastFrame[1] = -1; BgFgDrawLists[0] = BgFgDrawLists[1] = NULL; } + ~ImGuiViewportP() { if (BgFgDrawLists[0]) IM_DELETE(BgFgDrawLists[0]); if (BgFgDrawLists[1]) IM_DELETE(BgFgDrawLists[1]); } + + // Calculate work rect pos/size given a set of offset (we have 1 pair of offset for rect locked from last frame data, and 1 pair for currently building rect) + ImVec2 CalcWorkRectPos(const ImVec2& off_min) const { return ImVec2(Pos.x + off_min.x, Pos.y + off_min.y); } + ImVec2 CalcWorkRectSize(const ImVec2& off_min, const ImVec2& off_max) const { return ImVec2(ImMax(0.0f, Size.x - off_min.x + off_max.x), ImMax(0.0f, Size.y - off_min.y + off_max.y)); } + void UpdateWorkRect() { WorkPos = CalcWorkRectPos(WorkOffsetMin); WorkSize = CalcWorkRectSize(WorkOffsetMin, WorkOffsetMax); } // Update public fields + + // Helpers to retrieve ImRect (we don't need to store BuildWorkRect as every access tend to change it, hence the code asymmetry) + ImRect GetMainRect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); } + ImRect GetWorkRect() const { return ImRect(WorkPos.x, WorkPos.y, WorkPos.x + WorkSize.x, WorkPos.y + WorkSize.y); } + ImRect GetBuildWorkRect() const { ImVec2 pos = CalcWorkRectPos(BuildWorkOffsetMin); ImVec2 size = CalcWorkRectSize(BuildWorkOffsetMin, BuildWorkOffsetMax); return ImRect(pos.x, pos.y, pos.x + size.x, pos.y + size.y); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Settings support +//----------------------------------------------------------------------------- + +// Windows data saved in imgui.ini file +// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily. +// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure) +struct ImGuiWindowSettings +{ + ImGuiID ID; + ImVec2ih Pos; + ImVec2ih Size; + bool Collapsed; + bool IsChild; + bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context) + bool WantDelete; // Set to invalidate/delete the settings entry + + ImGuiWindowSettings() { memset(this, 0, sizeof(*this)); } + char* GetName() { return (char*)(this + 1); } +}; + +struct ImGuiSettingsHandler +{ + const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']' + ImGuiID TypeHash; // == ImHashStr(TypeName) + void (*ClearAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Clear all settings data + void (*ReadInitFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called before reading (in registration order) + void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]" + void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry + void (*ApplyAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called after reading (in registration order) + void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf' + void* UserData; + + ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Localization support +//----------------------------------------------------------------------------- + +// This is experimental and not officially supported, it'll probably fall short of features, if/when it does we may backtrack. +enum ImGuiLocKey : int +{ + ImGuiLocKey_VersionStr, + ImGuiLocKey_TableSizeOne, + ImGuiLocKey_TableSizeAllFit, + ImGuiLocKey_TableSizeAllDefault, + ImGuiLocKey_TableResetOrder, + ImGuiLocKey_WindowingMainMenuBar, + ImGuiLocKey_WindowingPopup, + ImGuiLocKey_WindowingUntitled, + ImGuiLocKey_COUNT +}; + +struct ImGuiLocEntry +{ + ImGuiLocKey Key; + const char* Text; +}; + + +//----------------------------------------------------------------------------- +// [SECTION] Metrics, Debug Tools +//----------------------------------------------------------------------------- + +enum ImGuiDebugLogFlags_ +{ + // Event types + ImGuiDebugLogFlags_None = 0, + ImGuiDebugLogFlags_EventActiveId = 1 << 0, + ImGuiDebugLogFlags_EventFocus = 1 << 1, + ImGuiDebugLogFlags_EventPopup = 1 << 2, + ImGuiDebugLogFlags_EventNav = 1 << 3, + ImGuiDebugLogFlags_EventClipper = 1 << 4, + ImGuiDebugLogFlags_EventSelection = 1 << 5, + ImGuiDebugLogFlags_EventIO = 1 << 6, + ImGuiDebugLogFlags_EventInputRouting = 1 << 7, + + ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav | ImGuiDebugLogFlags_EventClipper | ImGuiDebugLogFlags_EventSelection | ImGuiDebugLogFlags_EventIO | ImGuiDebugLogFlags_EventInputRouting, + ImGuiDebugLogFlags_OutputToTTY = 1 << 20, // Also send output to TTY + ImGuiDebugLogFlags_OutputToTestEngine = 1 << 21, // Also send output to Test Engine +}; + +struct ImGuiDebugAllocEntry +{ + int FrameCount; + ImS16 AllocCount; + ImS16 FreeCount; +}; + +struct ImGuiDebugAllocInfo +{ + int TotalAllocCount; // Number of call to MemAlloc(). + int TotalFreeCount; + ImS16 LastEntriesIdx; // Current index in buffer + ImGuiDebugAllocEntry LastEntriesBuf[6]; // Track last 6 frames that had allocations + + ImGuiDebugAllocInfo() { memset(this, 0, sizeof(*this)); } +}; + +struct ImGuiMetricsConfig +{ + bool ShowDebugLog = false; + bool ShowIDStackTool = false; + bool ShowWindowsRects = false; + bool ShowWindowsBeginOrder = false; + bool ShowTablesRects = false; + bool ShowDrawCmdMesh = true; + bool ShowDrawCmdBoundingBoxes = true; + bool ShowTextEncodingViewer = false; + bool ShowAtlasTintedWithTextColor = false; + int ShowWindowsRectsType = -1; + int ShowTablesRectsType = -1; +}; + +struct ImGuiStackLevelInfo +{ + ImGuiID ID; + ImS8 QueryFrameCount; // >= 1: Query in progress + bool QuerySuccess; // Obtained result from DebugHookIdInfo() + ImGuiDataType DataType : 8; + char Desc[57]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) FIXME: Now that we added CTRL+C this should be fixed. + + ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); } +}; + +// State for ID Stack tool queries +struct ImGuiIDStackTool +{ + int LastActiveFrame; + int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level + ImGuiID QueryId; // ID to query details for + ImVector Results; + bool CopyToClipboardOnCtrlC; + float CopyToClipboardLastTime; + + ImGuiIDStackTool() { memset(this, 0, sizeof(*this)); CopyToClipboardLastTime = -FLT_MAX; } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Generic context hooks +//----------------------------------------------------------------------------- + +typedef void (*ImGuiContextHookCallback)(ImGuiContext* ctx, ImGuiContextHook* hook); +enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiContextHookType_NewFramePost, ImGuiContextHookType_EndFramePre, ImGuiContextHookType_EndFramePost, ImGuiContextHookType_RenderPre, ImGuiContextHookType_RenderPost, ImGuiContextHookType_Shutdown, ImGuiContextHookType_PendingRemoval_ }; + +struct ImGuiContextHook +{ + ImGuiID HookId; // A unique ID assigned by AddContextHook() + ImGuiContextHookType Type; + ImGuiID Owner; + ImGuiContextHookCallback Callback; + void* UserData; + + ImGuiContextHook() { memset(this, 0, sizeof(*this)); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] ImGuiContext (main Dear ImGui context) +//----------------------------------------------------------------------------- + +struct ImGuiContext +{ + bool Initialized; + bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it. + ImGuiIO IO; + ImGuiStyle Style; + ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back() + float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window. + float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height. + ImDrawListSharedData DrawListSharedData; + double Time; + int FrameCount; + int FrameCountEnded; + int FrameCountRendered; + bool WithinFrameScope; // Set by NewFrame(), cleared by EndFrame() + bool WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed + bool WithinEndChild; // Set within EndChild() + bool GcCompactAll; // Request full GC + bool TestEngineHookItems; // Will call test engine hooks: ImGuiTestEngineHook_ItemAdd(), ImGuiTestEngineHook_ItemInfo(), ImGuiTestEngineHook_Log() + void* TestEngine; // Test engine user data + + // Inputs + ImVector InputEventsQueue; // Input events which will be trickled/written into IO structure. + ImVector InputEventsTrail; // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail. + ImGuiMouseSource InputEventsNextMouseSource; + ImU32 InputEventsNextEventId; + + // Windows state + ImVector Windows; // Windows, sorted in display order, back to front + ImVector WindowsFocusOrder; // Root windows, sorted in focus order, back to front. + ImVector WindowsTempSortBuffer; // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child + ImVector CurrentWindowStack; + ImGuiStorage WindowsById; // Map window's ImGuiID to ImGuiWindow* + int WindowsActiveCount; // Number of unique windows submitted by frame + ImVec2 WindowsHoverPadding; // Padding around resizable windows for which hovering on counts as hovering the window == ImMax(style.TouchExtraPadding, WINDOWS_HOVER_PADDING) + ImGuiID DebugBreakInWindow; // Set to break in Begin() call. + ImGuiWindow* CurrentWindow; // Window being drawn into + ImGuiWindow* HoveredWindow; // Window the mouse is hovering. Will typically catch mouse inputs. + ImGuiWindow* HoveredWindowUnderMovingWindow; // Hovered window ignoring MovingWindow. Only set if MovingWindow is set. + ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actual window that is moved is generally MovingWindow->RootWindow. + ImGuiWindow* WheelingWindow; // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window. + ImVec2 WheelingWindowRefMousePos; + int WheelingWindowStartFrame; // This may be set one frame before WheelingWindow is != NULL + int WheelingWindowScrolledFrame; + float WheelingWindowReleaseTimer; + ImVec2 WheelingWindowWheelRemainder; + ImVec2 WheelingAxisAvg; + + // Item/widgets state and tracking information + ImGuiID DebugHookIdInfo; // Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line] + ImGuiID HoveredId; // Hovered widget, filled during the frame + ImGuiID HoveredIdPreviousFrame; + bool HoveredIdAllowOverlap; + bool HoveredIdDisabled; // At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0. + float HoveredIdTimer; // Measure contiguous hovering time + float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active + ImGuiID ActiveId; // Active widget + ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame) + float ActiveIdTimer; + bool ActiveIdIsJustActivated; // Set at the time of activation for one frame + bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always) + bool ActiveIdNoClearOnFocusLoss; // Disable losing active id if the active id window gets unfocused. + bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch. + bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state. + bool ActiveIdHasBeenEditedThisFrame; + bool ActiveIdFromShortcut; + int ActiveIdMouseButton : 8; + ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior) + ImGuiWindow* ActiveIdWindow; + ImGuiInputSource ActiveIdSource; // Activating source: ImGuiInputSource_Mouse OR ImGuiInputSource_Keyboard OR ImGuiInputSource_Gamepad + ImGuiID ActiveIdPreviousFrame; + bool ActiveIdPreviousFrameIsAlive; + bool ActiveIdPreviousFrameHasBeenEditedBefore; + ImGuiWindow* ActiveIdPreviousFrameWindow; + ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation. + float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation. + + // [EXPERIMENTAL] Key/Input Ownership + Shortcut Routing system + // - The idea is that instead of "eating" a given key, we can link to an owner. + // - Input query can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_None (== -1) or a custom ID. + // - Routing is requested ahead of time for a given chord (Key + Mods) and granted in NewFrame(). + double LastKeyModsChangeTime; // Record the last time key mods changed (affect repeat delay when using shortcut logic) + double LastKeyModsChangeFromNoneTime; // Record the last time key mods changed away from being 0 (affect repeat delay when using shortcut logic) + double LastKeyboardKeyPressTime; // Record the last time a keyboard key (ignore mouse/gamepad ones) was pressed. + ImBitArrayForNamedKeys KeysMayBeCharInput; // Lookup to tell if a key can emit char input, see IsKeyChordPotentiallyCharInput(). sizeof() = 20 bytes + ImGuiKeyOwnerData KeysOwnerData[ImGuiKey_NamedKey_COUNT]; + ImGuiKeyRoutingTable KeysRoutingTable; + ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a Structure and move away from it) + bool ActiveIdUsingAllKeyboardKeys; // Active widget will want to read all keyboard keys inputs. (FIXME: This is a shortcut for not taking ownership of 100+ keys but perhaps best to not have the inconsistency) + ImGuiKeyChord DebugBreakInShortcutRouting; // Set to break in SetShortcutRouting()/Shortcut() calls. +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + ImU32 ActiveIdUsingNavInputMask; // If you used this. Since (IMGUI_VERSION_NUM >= 18804) : 'g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);' becomes 'SetKeyOwner(ImGuiKey_Escape, g.ActiveId) and/or SetKeyOwner(ImGuiKey_NavGamepadCancel, g.ActiveId);' +#endif + + // Next window/item data + ImGuiID CurrentFocusScopeId; // Value for currently appending items == g.FocusScopeStack.back(). Not to be mistaken with g.NavFocusScopeId. + ImGuiItemFlags CurrentItemFlags; // Value for currently appending items == g.ItemFlagsStack.back() + ImGuiID DebugLocateId; // Storage for DebugLocateItemOnHover() feature: this is read by ItemAdd() so we keep it in a hot/cached location + ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions + ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd) + ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions + bool DebugShowGroupRects; + + // Shared stacks + ImGuiCol DebugFlashStyleColorIdx; // (Keep close to ColorStack to share cache line) + ImVector ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin() + ImVector StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin() + ImVector FontStack; // Stack for PushFont()/PopFont() - inherited by Begin() + ImVector FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - inherited by BeginChild(), pushed into by Begin() + ImVector ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin() + ImVector GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin() + ImVector OpenPopupStack; // Which popups are open (persistent) + ImVector BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame) + ImVector NavTreeNodeStack; // Stack for TreeNode() when a NavLeft requested is emitted. + + int BeginMenuCount; + + // Viewports + ImVector Viewports; // Active viewports (Size==1 in 'master' branch). Each viewports hold their copy of ImDrawData. + + // Gamepad/keyboard Navigation + ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusedWindow' + ImGuiID NavId; // Focused item for navigation + ImGuiID NavFocusScopeId; // Focused focus scope (e.g. selection code often wants to "clear other items" when landing on an item of the same scope) + ImVector NavFocusRoute; // Reversed copy focus scope stack for NavId (should contains NavFocusScopeId). This essentially follow the window->ParentWindowForFocusRoute chain. + ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItem() + ImGuiID NavActivateDownId; // ~~ IsKeyDown(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyDown(ImGuiKey_NavGamepadActivate) ? NavId : 0 + ImGuiID NavActivatePressedId; // ~~ IsKeyPressed(ImGuiKey_Space) || IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate) ? NavId : 0 (no repeat) + ImGuiActivateFlags NavActivateFlags; + ImGuiID NavHighlightActivatedId; + float NavHighlightActivatedTimer; + ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest). + ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest). + ImGuiKeyChord NavJustMovedToKeyMods; + ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame. + ImGuiActivateFlags NavNextActivateFlags; + ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS CAN ONLY BE ImGuiInputSource_Keyboard or ImGuiInputSource_Mouse + ImGuiNavLayer NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later. + ImGuiSelectionUserData NavLastValidSelectionUserData; // Last valid data passed to SetNextItemSelectionUser(), or -1. For current window. Not reset when focusing an item that doesn't have selection data. + bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRectRel is valid + bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default) + bool NavDisableHighlight; // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover) + bool NavDisableMouseHover; // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again. + + // Navigation: Init & Move Requests + bool NavAnyRequest; // ~~ NavMoveRequest || NavInitRequest this is to perform early out in ItemAdd() + bool NavInitRequest; // Init request for appearing window to select first item + bool NavInitRequestFromMove; + ImGuiNavItemData NavInitResult; // Init request result (first item of the window, or one for which SetItemDefaultFocus() was called) + bool NavMoveSubmitted; // Move request submitted, will process result on next NewFrame() + bool NavMoveScoringItems; // Move request submitted, still scoring incoming items + bool NavMoveForwardToNextFrame; + ImGuiNavMoveFlags NavMoveFlags; + ImGuiScrollFlags NavMoveScrollFlags; + ImGuiKeyChord NavMoveKeyMods; + ImGuiDir NavMoveDir; // Direction of the move request (left/right/up/down) + ImGuiDir NavMoveDirForDebug; + ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename? + ImRect NavScoringRect; // Rectangle used for scoring, in screen space. Based of window->NavRectRel[], modified for directional navigation scoring. + ImRect NavScoringNoClipRect; // Some nav operations (such as PageUp/PageDown) enforce a region which clipper will attempt to always keep submitted + int NavScoringDebugCount; // Metrics for debugging + int NavTabbingDir; // Generally -1 or +1, 0 when tabbing without a nav id + int NavTabbingCounter; // >0 when counting items for tabbing + ImGuiNavItemData NavMoveResultLocal; // Best move request candidate within NavWindow + ImGuiNavItemData NavMoveResultLocalVisible; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag) + ImGuiNavItemData NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag) + ImGuiNavItemData NavTabbingResultFirst; // First tabbing request candidate within NavWindow and flattened hierarchy + + // Navigation: Windowing (CTRL+TAB for list, or Menu Structure + keys or directional pads to move/resize) + ImGuiKeyChord ConfigNavWindowingKeyNext; // = ImGuiMod_Ctrl | ImGuiKey_Tab, for reconfiguration (see #4828) + ImGuiKeyChord ConfigNavWindowingKeyPrev; // = ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab + ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most! + ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it. + ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents + float NavWindowingTimer; + float NavWindowingHighlightAlpha; + bool NavWindowingToggleLayer; + ImGuiKey NavWindowingToggleKey; + ImVec2 NavWindowingAccumDeltaPos; + ImVec2 NavWindowingAccumDeltaSize; + + // Renderer + float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list) + + // Drag and Drop + bool DragDropActive; + bool DragDropWithinSource; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source. + bool DragDropWithinTarget; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target. + ImGuiDragDropFlags DragDropSourceFlags; + int DragDropSourceFrameCount; + int DragDropMouseButton; + ImGuiPayload DragDropPayload; + ImRect DragDropTargetRect; // Store rectangle of current target candidate (we favor small targets when overlapping) + ImRect DragDropTargetClipRect; // Store ClipRect at the time of item's drawing + ImGuiID DragDropTargetId; + ImGuiDragDropFlags DragDropAcceptFlags; + float DragDropAcceptIdCurrRectSurface; // Target item surface (we resolve overlapping targets by prioritizing the smaller surface) + ImGuiID DragDropAcceptIdCurr; // Target item id (set at the time of accepting the payload) + ImGuiID DragDropAcceptIdPrev; // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets) + int DragDropAcceptFrameCount; // Last time a target expressed a desire to accept the source + ImGuiID DragDropHoldJustPressedId; // Set when holding a payload just made ButtonBehavior() return a press. + ImVector DragDropPayloadBufHeap; // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size + unsigned char DragDropPayloadBufLocal[16]; // Local buffer for small payloads + + // Clipper + int ClipperTempDataStacked; + ImVector ClipperTempData; + + // Tables + ImGuiTable* CurrentTable; + ImGuiID DebugBreakInTable; // Set to break in BeginTable() call. + int TablesTempDataStacked; // Temporary table data size (because we leave previous instances undestructed, we generally don't use TablesTempData.Size) + ImVector TablesTempData; // Temporary table data (buffers reused/shared across instances, support nesting) + ImPool Tables; // Persistent table data + ImVector TablesLastTimeActive; // Last used timestamp of each tables (SOA, for efficient GC) + ImVector DrawChannelsTempMergeBuffer; + + // Tab bars + ImGuiTabBar* CurrentTabBar; + ImPool TabBars; + ImVector CurrentTabBarStack; + ImVector ShrinkWidthBuffer; + + // Hover Delay system + ImGuiID HoverItemDelayId; + ImGuiID HoverItemDelayIdPreviousFrame; + float HoverItemDelayTimer; // Currently used by IsItemHovered() + float HoverItemDelayClearTimer; // Currently used by IsItemHovered(): grace time before g.TooltipHoverTimer gets cleared. + ImGuiID HoverItemUnlockedStationaryId; // Mouse has once been stationary on this item. Only reset after departing the item. + ImGuiID HoverWindowUnlockedStationaryId; // Mouse has once been stationary on this window. Only reset after departing the window. + + // Mouse state + ImGuiMouseCursor MouseCursor; + float MouseStationaryTimer; // Time the mouse has been stationary (with some loose heuristic) + ImVec2 MouseLastValidPos; + + // Widget state + ImGuiInputTextState InputTextState; + ImGuiInputTextDeactivatedState InputTextDeactivatedState; + ImFont InputTextPasswordFont; + ImGuiID TempInputId; // Temporary text input when CTRL+clicking on a slider, etc. + ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets + ImGuiID ColorEditCurrentID; // Set temporarily while inside of the parent-most ColorEdit4/ColorPicker4 (because they call each others). + ImGuiID ColorEditSavedID; // ID we are saving/restoring HS for + float ColorEditSavedHue; // Backup of last Hue associated to LastColor, so we can restore Hue in lossy RGB<>HSV round trips + float ColorEditSavedSat; // Backup of last Saturation associated to LastColor, so we can restore Saturation in lossy RGB<>HSV round trips + ImU32 ColorEditSavedColor; // RGB value with alpha set to 0. + ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker. + ImGuiComboPreviewData ComboPreviewData; + ImRect WindowResizeBorderExpectedRect; // Expected border rect, switch to relative edit if moving + bool WindowResizeRelativeMode; + float SliderGrabClickOffset; + float SliderCurrentAccum; // Accumulated slider delta when using navigation controls. + bool SliderCurrentAccumDirty; // Has the accumulated slider delta changed since last time we tried to apply it? + bool DragCurrentAccumDirty; + float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings + float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio + float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage? + float DisabledAlphaBackup; // Backup for style.Alpha for BeginDisabled() + short DisabledStackSize; + short LockMarkEdited; + short TooltipOverrideCount; + ImVector ClipboardHandlerData; // If no custom clipboard handler is defined + ImVector MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once + ImGuiTypingSelectState TypingSelectState; // State for GetTypingSelectRequest() + + // Platform support + ImGuiPlatformImeData PlatformImeData; // Data updated by current frame + ImGuiPlatformImeData PlatformImeDataPrev; // Previous frame data (when changing we will call io.SetPlatformImeDataFn + + // Settings + bool SettingsLoaded; + float SettingsDirtyTimer; // Save .ini Settings to memory when time reaches zero + ImGuiTextBuffer SettingsIniData; // In memory .ini settings + ImVector SettingsHandlers; // List of .ini settings handlers + ImChunkStream SettingsWindows; // ImGuiWindow .ini settings entries + ImChunkStream SettingsTables; // ImGuiTable .ini settings entries + ImVector Hooks; // Hooks for extensions (e.g. test engine) + ImGuiID HookIdNext; // Next available HookId + + // Localization + const char* LocalizationTable[ImGuiLocKey_COUNT]; + + // Capture/Logging + bool LogEnabled; // Currently capturing + ImGuiLogType LogType; // Capture target + ImFileHandle LogFile; // If != NULL log to stdout/ file + ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators. + const char* LogNextPrefix; + const char* LogNextSuffix; + float LogLinePosY; + bool LogLineFirstItem; + int LogDepthRef; + int LogDepthToExpand; + int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call. + + // Debug Tools + // (some of the highly frequently used data are interleaved in other structures above: DebugBreakXXX fields, DebugHookIdInfo, DebugLocateId etc.) + ImGuiDebugLogFlags DebugLogFlags; + ImGuiTextBuffer DebugLogBuf; + ImGuiTextIndex DebugLogIndex; + ImGuiDebugLogFlags DebugLogAutoDisableFlags; + ImU8 DebugLogAutoDisableFrames; + ImU8 DebugLocateFrames; // For DebugLocateItemOnHover(). This is used together with DebugLocateId which is in a hot/cached spot above. + bool DebugBreakInLocateId; // Debug break in ItemAdd() call for g.DebugLocateId. + ImGuiKeyChord DebugBreakKeyChord; // = ImGuiKey_Pause + ImS8 DebugBeginReturnValueCullDepth; // Cycle between 0..9 then wrap around. + bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker()) + ImU8 DebugItemPickerMouseButton; + ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID + float DebugFlashStyleColorTime; + ImVec4 DebugFlashStyleColorBackup; + ImGuiMetricsConfig DebugMetricsConfig; + ImGuiIDStackTool DebugIDStackTool; + ImGuiDebugAllocInfo DebugAllocInfo; + + // Misc + float FramerateSecPerFrame[60]; // Calculate estimate of framerate for user over the last 60 frames.. + int FramerateSecPerFrameIdx; + int FramerateSecPerFrameCount; + float FramerateSecPerFrameAccum; + int WantCaptureMouseNextFrame; // Explicit capture override via SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard(). Default to -1. + int WantCaptureKeyboardNextFrame; // " + int WantTextInputNextFrame; + ImVector TempBuffer; // Temporary text buffer + char TempKeychordName[64]; + + ImGuiContext(ImFontAtlas* shared_font_atlas) + { + IO.Ctx = this; + InputTextState.Ctx = this; + + Initialized = false; + FontAtlasOwnedByContext = shared_font_atlas ? false : true; + Font = NULL; + FontSize = FontBaseSize = 0.0f; + IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)(); + Time = 0.0f; + FrameCount = 0; + FrameCountEnded = FrameCountRendered = -1; + WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false; + GcCompactAll = false; + TestEngineHookItems = false; + TestEngine = NULL; + + InputEventsNextMouseSource = ImGuiMouseSource_Mouse; + InputEventsNextEventId = 1; + + WindowsActiveCount = 0; + CurrentWindow = NULL; + HoveredWindow = NULL; + HoveredWindowUnderMovingWindow = NULL; + MovingWindow = NULL; + WheelingWindow = NULL; + WheelingWindowStartFrame = WheelingWindowScrolledFrame = -1; + WheelingWindowReleaseTimer = 0.0f; + + DebugHookIdInfo = 0; + HoveredId = HoveredIdPreviousFrame = 0; + HoveredIdAllowOverlap = false; + HoveredIdDisabled = false; + HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f; + ActiveId = 0; + ActiveIdIsAlive = 0; + ActiveIdTimer = 0.0f; + ActiveIdIsJustActivated = false; + ActiveIdAllowOverlap = false; + ActiveIdNoClearOnFocusLoss = false; + ActiveIdHasBeenPressedBefore = false; + ActiveIdHasBeenEditedBefore = false; + ActiveIdHasBeenEditedThisFrame = false; + ActiveIdFromShortcut = false; + ActiveIdClickOffset = ImVec2(-1, -1); + ActiveIdWindow = NULL; + ActiveIdSource = ImGuiInputSource_None; + ActiveIdMouseButton = -1; + ActiveIdPreviousFrame = 0; + ActiveIdPreviousFrameIsAlive = false; + ActiveIdPreviousFrameHasBeenEditedBefore = false; + ActiveIdPreviousFrameWindow = NULL; + LastActiveId = 0; + LastActiveIdTimer = 0.0f; + + LastKeyboardKeyPressTime = LastKeyModsChangeTime = LastKeyModsChangeFromNoneTime = -1.0; + + ActiveIdUsingNavDirMask = 0x00; + ActiveIdUsingAllKeyboardKeys = false; +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + ActiveIdUsingNavInputMask = 0x00; +#endif + + CurrentFocusScopeId = 0; + CurrentItemFlags = ImGuiItemFlags_None; + DebugShowGroupRects = false; + BeginMenuCount = 0; + + NavWindow = NULL; + NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = 0; + NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0; + NavActivateFlags = NavNextActivateFlags = ImGuiActivateFlags_None; + NavHighlightActivatedId = 0; + NavHighlightActivatedTimer = 0.0f; + NavJustMovedToKeyMods = ImGuiMod_None; + NavInputSource = ImGuiInputSource_Keyboard; + NavLayer = ImGuiNavLayer_Main; + NavLastValidSelectionUserData = ImGuiSelectionUserData_Invalid; + NavIdIsAlive = false; + NavMousePosDirty = false; + NavDisableHighlight = true; + NavDisableMouseHover = false; + NavAnyRequest = false; + NavInitRequest = false; + NavInitRequestFromMove = false; + NavMoveSubmitted = false; + NavMoveScoringItems = false; + NavMoveForwardToNextFrame = false; + NavMoveFlags = ImGuiNavMoveFlags_None; + NavMoveScrollFlags = ImGuiScrollFlags_None; + NavMoveKeyMods = ImGuiMod_None; + NavMoveDir = NavMoveDirForDebug = NavMoveClipDir = ImGuiDir_None; + NavScoringDebugCount = 0; + NavTabbingDir = 0; + NavTabbingCounter = 0; + + ConfigNavWindowingKeyNext = ImGuiMod_Ctrl | ImGuiKey_Tab; + ConfigNavWindowingKeyPrev = ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Tab; + NavWindowingTarget = NavWindowingTargetAnim = NavWindowingListWindow = NULL; + NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f; + NavWindowingToggleLayer = false; + NavWindowingToggleKey = ImGuiKey_None; + + DimBgRatio = 0.0f; + + DragDropActive = DragDropWithinSource = DragDropWithinTarget = false; + DragDropSourceFlags = ImGuiDragDropFlags_None; + DragDropSourceFrameCount = -1; + DragDropMouseButton = -1; + DragDropTargetId = 0; + DragDropAcceptFlags = ImGuiDragDropFlags_None; + DragDropAcceptIdCurrRectSurface = 0.0f; + DragDropAcceptIdPrev = DragDropAcceptIdCurr = 0; + DragDropAcceptFrameCount = -1; + DragDropHoldJustPressedId = 0; + memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal)); + + ClipperTempDataStacked = 0; + + CurrentTable = NULL; + TablesTempDataStacked = 0; + CurrentTabBar = NULL; + + HoverItemDelayId = HoverItemDelayIdPreviousFrame = HoverItemUnlockedStationaryId = HoverWindowUnlockedStationaryId = 0; + HoverItemDelayTimer = HoverItemDelayClearTimer = 0.0f; + + MouseCursor = ImGuiMouseCursor_Arrow; + MouseStationaryTimer = 0.0f; + + TempInputId = 0; + ColorEditOptions = ImGuiColorEditFlags_DefaultOptions_; + ColorEditCurrentID = ColorEditSavedID = 0; + ColorEditSavedHue = ColorEditSavedSat = 0.0f; + ColorEditSavedColor = 0; + WindowResizeRelativeMode = false; + SliderGrabClickOffset = 0.0f; + SliderCurrentAccum = 0.0f; + SliderCurrentAccumDirty = false; + DragCurrentAccumDirty = false; + DragCurrentAccum = 0.0f; + DragSpeedDefaultRatio = 1.0f / 100.0f; + ScrollbarClickDeltaToGrabCenter = 0.0f; + DisabledAlphaBackup = 0.0f; + DisabledStackSize = 0; + LockMarkEdited = 0; + TooltipOverrideCount = 0; + + PlatformImeData.InputPos = ImVec2(0.0f, 0.0f); + PlatformImeDataPrev.InputPos = ImVec2(-1.0f, -1.0f); // Different to ensure initial submission + + SettingsLoaded = false; + SettingsDirtyTimer = 0.0f; + HookIdNext = 0; + + memset(LocalizationTable, 0, sizeof(LocalizationTable)); + + LogEnabled = false; + LogType = ImGuiLogType_None; + LogNextPrefix = LogNextSuffix = NULL; + LogFile = NULL; + LogLinePosY = FLT_MAX; + LogLineFirstItem = false; + LogDepthRef = 0; + LogDepthToExpand = LogDepthToExpandDefault = 2; + + DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY; + DebugLocateId = 0; + DebugLogAutoDisableFlags = ImGuiDebugLogFlags_None; + DebugLogAutoDisableFrames = 0; + DebugLocateFrames = 0; + DebugBeginReturnValueCullDepth = -1; + DebugItemPickerActive = false; + DebugItemPickerMouseButton = ImGuiMouseButton_Left; + DebugItemPickerBreakId = 0; + DebugFlashStyleColorTime = 0.0f; + DebugFlashStyleColorIdx = ImGuiCol_COUNT; + + // Same as DebugBreakClearData(). Those fields are scattered in their respective subsystem to stay in hot-data locations + DebugBreakInWindow = 0; + DebugBreakInTable = 0; + DebugBreakInLocateId = false; + DebugBreakKeyChord = ImGuiKey_Pause; + DebugBreakInShortcutRouting = ImGuiKey_None; + + memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame)); + FramerateSecPerFrameIdx = FramerateSecPerFrameCount = 0; + FramerateSecPerFrameAccum = 0.0f; + WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1; + memset(TempKeychordName, 0, sizeof(TempKeychordName)); + } +}; + +//----------------------------------------------------------------------------- +// [SECTION] ImGuiWindowTempData, ImGuiWindow +//----------------------------------------------------------------------------- + +// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow. +// (That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered..) +// (This doesn't need a constructor because we zero-clear it as part of ImGuiWindow and all frame-temporary data are setup on Begin) +struct IMGUI_API ImGuiWindowTempData +{ + // Layout + ImVec2 CursorPos; // Current emitting position, in absolute coordinates. + ImVec2 CursorPosPrevLine; + ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding. + ImVec2 CursorMaxPos; // Used to implicitly calculate ContentSize at the beginning of next frame, for scrolling range and auto-resize. Always growing during the frame. + ImVec2 IdealMaxPos; // Used to implicitly calculate ContentSizeIdeal at the beginning of next frame, for auto-resize only. Always growing during the frame. + ImVec2 CurrLineSize; + ImVec2 PrevLineSize; + float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added). + float PrevLineTextBaseOffset; + bool IsSameLine; + bool IsSetPos; + ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.) + ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API. + ImVec1 GroupOffset; + ImVec2 CursorStartPosLossyness;// Record the loss of precision of CursorStartPos due to really large scrolling amount. This is used by clipper to compensate and fix the most common use case of large scroll area. + + // Keyboard/Gamepad navigation + ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1) + short NavLayersActiveMask; // Which layers have been written to (result from previous frame) + short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame) + bool NavIsScrollPushableX; // Set when current work location may be scrolled horizontally when moving left / right. This is generally always true UNLESS within a column. + bool NavHideHighlightOneFrame; + bool NavWindowHasScrollY; // Set per window when scrolling can be used (== ScrollMax.y > 0.0f) + + // Miscellaneous + bool MenuBarAppending; // FIXME: Remove this + ImVec2 MenuBarOffset; // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs. + ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items measurement + int TreeDepth; // Current tree depth. + ImU32 TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary. + ImVector ChildWindows; + ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state) + ImGuiOldColumns* CurrentColumns; // Current columns set + int CurrentTableIdx; // Current table index (into g.Tables) + ImGuiLayoutType LayoutType; + ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin() + + // Local parameters stacks + // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings. + float ItemWidth; // Current item width (>0.0: width in pixels, <0.0: align xx pixels to the right of window). + float TextWrapPos; // Current text wrap pos. + ImVector ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth) + ImVector TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos) +}; + +// Storage for one window +struct IMGUI_API ImGuiWindow +{ + ImGuiContext* Ctx; // Parent UI context (needs to be set explicitly by parent). + char* Name; // Window name, owned by the window. + ImGuiID ID; // == ImHashStr(Name) + ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_ + ImGuiChildFlags ChildFlags; // Set when window is a child window. See enum ImGuiChildFlags_ + ImGuiViewportP* Viewport; // Always set in Begin(). Inactive windows may have a NULL value here if their viewport was discarded. + ImVec2 Pos; // Position (always rounded-up to nearest pixel) + ImVec2 Size; // Current size (==SizeFull or collapsed title bar size) + ImVec2 SizeFull; // Size when non collapsed + ImVec2 ContentSize; // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding. + ImVec2 ContentSizeIdeal; + ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize(). + ImVec2 WindowPadding; // Window padding at the time of Begin(). + float WindowRounding; // Window rounding at the time of Begin(). May be clamped lower to avoid rendering artifacts with title bar, menu bar etc. + float WindowBorderSize; // Window border size at the time of Begin(). + float DecoOuterSizeX1, DecoOuterSizeY1; // Left/Up offsets. Sum of non-scrolling outer decorations (X1 generally == 0.0f. Y1 generally = TitleBarHeight + MenuBarHeight). Locked during Begin(). + float DecoOuterSizeX2, DecoOuterSizeY2; // Right/Down offsets (X2 generally == ScrollbarSize.x, Y2 == ScrollbarSizes.y). + float DecoInnerSizeX1, DecoInnerSizeY1; // Applied AFTER/OVER InnerRect. Specialized for Tables as they use specialized form of clipping and frozen rows/columns are inside InnerRect (and not part of regular decoration sizes). + int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)! + ImGuiID MoveId; // == window->GetID("#MOVE") + ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window) + ImVec2 Scroll; + ImVec2 ScrollMax; + ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change) + ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered + ImVec2 ScrollTargetEdgeSnapDist; // 0.0f = no snapping, >0.0f snapping threshold + ImVec2 ScrollbarSizes; // Size taken by each scrollbars on their smaller axis. Pay attention! ScrollbarSizes.x == width of the vertical scrollbar, ScrollbarSizes.y = height of the horizontal scrollbar. + bool ScrollbarX, ScrollbarY; // Are scrollbars visible? + bool Active; // Set to true on Begin(), unless Collapsed + bool WasActive; + bool WriteAccessed; // Set to true when any widget access the current window + bool Collapsed; // Set when collapsing window to become only title-bar + bool WantCollapseToggle; + bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed) + bool Appearing; // Set during the frame where the window is appearing (or re-appearing) + bool Hidden; // Do not display (== HiddenFrames*** > 0) + bool IsFallbackWindow; // Set on the "Debug##Default" window. + bool IsExplicitChild; // Set when passed _ChildWindow, left to false by BeginDocked() + bool HasCloseButton; // Set when the window has a close Structure (p_open != NULL) + signed char ResizeBorderHovered; // Current border being hovered for resize (-1: none, otherwise 0-3) + signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3) + short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs) + short BeginCountPreviousFrame; // Number of Begin() during the previous frame + short BeginOrderWithinParent; // Begin() order within immediate parent window, if we are a child window. Otherwise 0. + short BeginOrderWithinContext; // Begin() order within entire imgui context. This is mostly used for debugging submission order related issues. + short FocusOrder; // Order within WindowsFocusOrder[], altered when windows are focused. + ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling) + ImS8 AutoFitFramesX, AutoFitFramesY; + bool AutoFitOnlyGrows; + ImGuiDir AutoPosLastDirection; + ImS8 HiddenFramesCanSkipItems; // Hide the window for N frames + ImS8 HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size + ImS8 HiddenFramesForRenderOnly; // Hide the window until frame N at Renderer() time only + ImS8 DisableInputsFrames; // Disable window interactions for N frames + ImGuiCond SetWindowPosAllowFlags : 8; // store acceptable condition flags for SetNextWindowPos() use. + ImGuiCond SetWindowSizeAllowFlags : 8; // store acceptable condition flags for SetNextWindowSize() use. + ImGuiCond SetWindowCollapsedAllowFlags : 8; // store acceptable condition flags for SetNextWindowCollapsed() use. + ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size) + ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0, 0) when positioning from top-left corner; ImVec2(0.5f, 0.5f) for centering; ImVec2(1, 1) for bottom right. + + ImVector IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure) + ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name. + + // The best way to understand what those rectangles are is to use the 'Metrics->Tools->Show Windows Rectangles' viewer. + // The main 'OuterRect', omitted as a field, is window->Rect(). + ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window. + ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar) + ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect. + ImRect WorkRect; // Initially covers the whole scrolling region. Reduced by containers e.g columns/tables when active. Shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward). + ImRect ParentWorkRect; // Backup of WorkRect before entering a container such as columns/tables. Used by e.g. SpanAllColumns functions to easily access. Stacked containers are responsible for maintaining this. // FIXME-WORKRECT: Could be a stack? + ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back(). + ImRect ContentRegionRect; // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on. + ImVec2ih HitTestHoleSize; // Define an optional rectangular hole where mouse will pass-through the window. + ImVec2ih HitTestHoleOffset; + + int LastFrameActive; // Last frame number the window was Active. + float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there) + float ItemWidthDefault; + ImGuiStorage StateStorage; + ImVector ColumnsStorage; + float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale() + int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back) + + ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer) + ImDrawList DrawListInst; + ImGuiWindow* ParentWindow; // If we are a child _or_ popup _or_ docked window, this is pointing to our parent. Otherwise NULL. + ImGuiWindow* ParentWindowInBeginStack; + ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. Doesn't cross through popups/dock nodes. + ImGuiWindow* RootWindowPopupTree; // Point to ourself or first ancestor that is not a child window. Cross through popups parent<>child. + ImGuiWindow* RootWindowForTitleBarHighlight; // Point to ourself or first ancestor which will display TitleBgActive color when this window is active. + ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag. + ImGuiWindow* ParentWindowForFocusRoute; // Set to manual link a window to its logical parent so that Shortcut() chain are honoerd (e.g. Tool linked to Document) + + ImGuiWindow* NavLastChildNavWindow; // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.) + ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1) + ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space + ImVec2 NavPreferredScoringPosRel[ImGuiNavLayer_COUNT]; // Preferred X/Y position updated when moving on a given axis, reset to FLT_MAX. + ImGuiID NavRootFocusScopeId; // Focus Scope ID at the time of Begin() + + int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy + int MemoryDrawListVtxCapacity; + bool MemoryCompacted; // Set when window extraneous data have been garbage collected + +public: + ImGuiWindow(ImGuiContext* context, const char* name); + ~ImGuiWindow(); + + ImGuiID GetID(const char* str, const char* str_end = NULL); + ImGuiID GetID(const void* ptr); + ImGuiID GetID(int n); + ImGuiID GetIDFromRectangle(const ImRect& r_abs); + + // We don't use g.FontSize because the window may be != g.CurrentWindow. + ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); } + float CalcFontSize() const { ImGuiContext& g = *Ctx; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; } + float TitleBarHeight() const { ImGuiContext& g = *Ctx; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; } + ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); } + float MenuBarHeight() const { ImGuiContext& g = *Ctx; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; } + ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] Tab bar, Tab item support +//----------------------------------------------------------------------------- + +// Extend ImGuiTabBarFlags_ +enum ImGuiTabBarFlagsPrivate_ +{ + ImGuiTabBarFlags_DockNode = 1 << 20, // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around] + ImGuiTabBarFlags_IsFocused = 1 << 21, + ImGuiTabBarFlags_SaveSettings = 1 << 22, // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs +}; + +// Extend ImGuiTabItemFlags_ +enum ImGuiTabItemFlagsPrivate_ +{ + ImGuiTabItemFlags_SectionMask_ = ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing, + ImGuiTabItemFlags_NoCloseButton = 1 << 20, // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout) + ImGuiTabItemFlags_Button = 1 << 21, // Used by TabItemButton, change the tab item behavior to mimic a Structure +}; + +// Storage for one active tab item (sizeof() 40 bytes) +struct ImGuiTabItem +{ + ImGuiID ID; + ImGuiTabItemFlags Flags; + int LastFrameVisible; + int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance + float Offset; // Position relative to beginning of tab + float Width; // Width currently displayed + float ContentWidth; // Width of label, stored during BeginTabItem() call + float RequestedWidth; // Width optionally requested by caller, -1.0f is unused + ImS32 NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames + ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable + ImS16 IndexDuringLayout; // Index only used during TabBarLayout(). Tabs gets reordered so 'Tabs[n].IndexDuringLayout == n' but may mismatch during additions. + bool WantClose; // Marked as closed by SetTabItemClosed() + + ImGuiTabItem() { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; RequestedWidth = -1.0f; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; } +}; + +// Storage for a tab bar (sizeof() 152 bytes) +struct IMGUI_API ImGuiTabBar +{ + ImVector Tabs; + ImGuiTabBarFlags Flags; + ImGuiID ID; // Zero for tab-bars used by docking + ImGuiID SelectedTabId; // Selected tab/window + ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation + ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview) + int CurrFrameVisible; + int PrevFrameVisible; + ImRect BarRect; + float CurrTabsContentsHeight; + float PrevTabsContentsHeight; // Record the height of contents submitted below the tab bar + float WidthAllTabs; // Actual width of all tabs (locked during layout) + float WidthAllTabsIdeal; // Ideal width if all tabs were visible and not clipped + float ScrollingAnim; + float ScrollingTarget; + float ScrollingTargetDistToVisibility; + float ScrollingSpeed; + float ScrollingRectMinX; + float ScrollingRectMaxX; + float SeparatorMinX; + float SeparatorMaxX; + ImGuiID ReorderRequestTabId; + ImS16 ReorderRequestOffset; + ImS8 BeginCount; + bool WantLayout; + bool VisibleTabWasSubmitted; + bool TabsAddedNew; // Set to true when a new tab item or Structure has been added to the tab bar during last frame + ImS16 TabsActiveCount; // Number of tabs submitted this frame. + ImS16 LastTabItemIdx; // Index of last BeginTabItem() tab for use by EndTabItem() + float ItemSpacingY; + ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar() + ImVec2 BackupCursorPos; + ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer. + + ImGuiTabBar(); +}; + +//----------------------------------------------------------------------------- +// [SECTION] Table support +//----------------------------------------------------------------------------- + +#define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color. +#define IMGUI_TABLE_MAX_COLUMNS 512 // May be further lifted + +// Our current column maximum is 64 but we may raise that in the future. +typedef ImS16 ImGuiTableColumnIdx; +typedef ImU16 ImGuiTableDrawChannelIdx; + +// [Internal] sizeof() ~ 112 +// We use the terminology "Enabled" to refer to a column that is not Hidden by user/api. +// We use the terminology "Clipped" to refer to a column that is out of sight because of scrolling/clipping. +// This is in contrast with some user-facing api such as IsItemVisible() / IsRectVisible() which use "Visible" to mean "not clipped". +struct ImGuiTableColumn +{ + ImGuiTableColumnFlags Flags; // Flags after some patching (not directly same as provided by user). See ImGuiTableColumnFlags_ + float WidthGiven; // Final/actual width visible == (MaxX - MinX), locked in TableUpdateLayout(). May be > WidthRequest to honor minimum width, may be < WidthRequest to honor shrinking columns down in tight space. + float MinX; // Absolute positions + float MaxX; + float WidthRequest; // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from StretchWeight in TableUpdateLayout() + float WidthAuto; // Automatic width + float StretchWeight; // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially. + float InitStretchWeightOrWidth; // Value passed to TableSetupColumn(). For Width it is a content width (_without padding_). + ImRect ClipRect; // Clipping rectangle for the column + ImGuiID UserID; // Optional, value passed to TableSetupColumn() + float WorkMinX; // Contents region min ~(MinX + CellPaddingX + CellSpacingX1) == cursor start position when entering column + float WorkMaxX; // Contents region max ~(MaxX - CellPaddingX - CellSpacingX2) + float ItemWidth; // Current item width for the column, preserved across rows + float ContentMaxXFrozen; // Contents maximum position for frozen rows (apart from headers), from which we can infer content width. + float ContentMaxXUnfrozen; + float ContentMaxXHeadersUsed; // Contents maximum position for headers rows (regardless of freezing). TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls + float ContentMaxXHeadersIdeal; + ImS16 NameOffset; // Offset into parent ColumnsNames[] + ImGuiTableColumnIdx DisplayOrder; // Index within Table's IndexToDisplayOrder[] (column may be reordered by users) + ImGuiTableColumnIdx IndexWithinEnabledSet; // Index within enabled/visible set (<= IndexToDisplayOrder) + ImGuiTableColumnIdx PrevEnabledColumn; // Index of prev enabled/visible column within Columns[], -1 if first enabled/visible column + ImGuiTableColumnIdx NextEnabledColumn; // Index of next enabled/visible column within Columns[], -1 if last enabled/visible column + ImGuiTableColumnIdx SortOrder; // Index of this column within sort specs, -1 if not sorting on this column, 0 for single-sort, may be >0 on multi-sort + ImGuiTableDrawChannelIdx DrawChannelCurrent; // Index within DrawSplitter.Channels[] + ImGuiTableDrawChannelIdx DrawChannelFrozen; // Draw channels for frozen rows (often headers) + ImGuiTableDrawChannelIdx DrawChannelUnfrozen; // Draw channels for unfrozen rows + bool IsEnabled; // IsUserEnabled && (Flags & ImGuiTableColumnFlags_Disabled) == 0 + bool IsUserEnabled; // Is the column not marked Hidden by the user? (unrelated to being off view, e.g. clipped by scrolling). + bool IsUserEnabledNextFrame; + bool IsVisibleX; // Is actually in view (e.g. overlapping the host window clipping rectangle, not scrolled). + bool IsVisibleY; + bool IsRequestOutput; // Return value for TableSetColumnIndex() / TableNextColumn(): whether we request user to output contents or not. + bool IsSkipItems; // Do we want item submissions to this column to be completely ignored (no layout will happen). + bool IsPreserveWidthAuto; + ImS8 NavLayerCurrent; // ImGuiNavLayer in 1 byte + ImU8 AutoFitQueue; // Queue of 8 values for the next 8 frames to request auto-fit + ImU8 CannotSkipItemsQueue; // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem + ImU8 SortDirection : 2; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending + ImU8 SortDirectionsAvailCount : 2; // Number of available sort directions (0 to 3) + ImU8 SortDirectionsAvailMask : 4; // Mask of available sort directions (1-bit each) + ImU8 SortDirectionsAvailList; // Ordered list of available sort directions (2-bits each, total 8-bits) + + ImGuiTableColumn() + { + memset(this, 0, sizeof(*this)); + StretchWeight = WidthRequest = -1.0f; + NameOffset = -1; + DisplayOrder = IndexWithinEnabledSet = -1; + PrevEnabledColumn = NextEnabledColumn = -1; + SortOrder = -1; + SortDirection = ImGuiSortDirection_None; + DrawChannelCurrent = DrawChannelFrozen = DrawChannelUnfrozen = (ImU8)-1; + } +}; + +// Transient cell data stored per row. +// sizeof() ~ 6 +struct ImGuiTableCellData +{ + ImU32 BgColor; // Actual color + ImGuiTableColumnIdx Column; // Column number +}; + +// Per-instance data that needs preserving across frames (seemingly most others do not need to be preserved aside from debug needs. Does that means they could be moved to ImGuiTableTempData?) +// sizeof() ~ 24 bytes +struct ImGuiTableInstanceData +{ + ImGuiID TableInstanceID; + float LastOuterHeight; // Outer height from last frame + float LastTopHeadersRowHeight; // Height of first consecutive header rows from last frame (FIXME: this is used assuming consecutive headers are in same frozen set) + float LastFrozenHeight; // Height of frozen section from last frame + int HoveredRowLast; // Index of row which was hovered last frame. + int HoveredRowNext; // Index of row hovered this frame, set after encountering it. + + ImGuiTableInstanceData() { TableInstanceID = 0; LastOuterHeight = LastTopHeadersRowHeight = LastFrozenHeight = 0.0f; HoveredRowLast = HoveredRowNext = -1; } +}; + +// FIXME-TABLE: more transient data could be stored in a stacked ImGuiTableTempData: e.g. SortSpecs, incoming RowData +// sizeof() ~ 580 bytes + heap allocs described in TableBeginInitMemory() +struct IMGUI_API ImGuiTable +{ + ImGuiID ID; + ImGuiTableFlags Flags; + void* RawData; // Single allocation to hold Columns[], DisplayOrderToIndex[] and RowCellData[] + ImGuiTableTempData* TempData; // Transient data while table is active. Point within g.CurrentTableStack[] + ImSpan Columns; // Point within RawData[] + ImSpan DisplayOrderToIndex; // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1) + ImSpan RowCellData; // Point within RawData[]. Store cells background requests for current row. + ImBitArrayPtr EnabledMaskByDisplayOrder; // Column DisplayOrder -> IsEnabled map + ImBitArrayPtr EnabledMaskByIndex; // Column Index -> IsEnabled map (== not hidden by user/api) in a format adequate for iterating column without touching cold data + ImBitArrayPtr VisibleMaskByIndex; // Column Index -> IsVisibleX|IsVisibleY map (== not hidden by user/api && not hidden by scrolling/cliprect) + ImGuiTableFlags SettingsLoadedFlags; // Which data were loaded from the .ini file (e.g. when order is not altered we won't save order) + int SettingsOffset; // Offset in g.SettingsTables + int LastFrameActive; + int ColumnsCount; // Number of columns declared in BeginTable() + int CurrentRow; + int CurrentColumn; + ImS16 InstanceCurrent; // Count of BeginTable() calls with same ID in the same frame (generally 0). This is a little bit similar to BeginCount for a window, but multiple table with same ID look are multiple tables, they are just synched. + ImS16 InstanceInteracted; // Mark which instance (generally 0) of the same ID is being interacted with + float RowPosY1; + float RowPosY2; + float RowMinHeight; // Height submitted to TableNextRow() + float RowCellPaddingY; // Top and bottom padding. Reloaded during row change. + float RowTextBaseline; + float RowIndentOffsetX; + ImGuiTableRowFlags RowFlags : 16; // Current row flags, see ImGuiTableRowFlags_ + ImGuiTableRowFlags LastRowFlags : 16; + int RowBgColorCounter; // Counter for alternating background colors (can be fast-forwarded by e.g clipper), not same as CurrentRow because header rows typically don't increase this. + ImU32 RowBgColor[2]; // Background color override for current row. + ImU32 BorderColorStrong; + ImU32 BorderColorLight; + float BorderX1; + float BorderX2; + float HostIndentX; + float MinColumnWidth; + float OuterPaddingX; + float CellPaddingX; // Padding from each borders. Locked in BeginTable()/Layout. + float CellSpacingX1; // Spacing between non-bordered cells. Locked in BeginTable()/Layout. + float CellSpacingX2; + float InnerWidth; // User value passed to BeginTable(), see comments at the top of BeginTable() for details. + float ColumnsGivenWidth; // Sum of current column width + float ColumnsAutoFitWidth; // Sum of ideal column width in order nothing to be clipped, used for auto-fitting and content width submission in outer window + float ColumnsStretchSumWeights; // Sum of weight of all enabled stretching columns + float ResizedColumnNextWidth; + float ResizeLockMinContentsX2; // Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table. + float RefScale; // Reference scale to be able to rescale columns on font/dpi changes. + float AngledHeadersHeight; // Set by TableAngledHeadersRow(), used in TableUpdateLayout() + float AngledHeadersSlope; // Set by TableAngledHeadersRow(), used in TableUpdateLayout() + ImRect OuterRect; // Note: for non-scrolling table, OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable(). + ImRect InnerRect; // InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is + ImRect WorkRect; + ImRect InnerClipRect; + ImRect BgClipRect; // We use this to cpu-clip cell background color fill, evolve during the frame as we cross frozen rows boundaries + ImRect Bg0ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG0/1 channel. This tends to be == OuterWindow->ClipRect at BeginTable() because output in BG0/BG1 is cpu-clipped + ImRect Bg2ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG2 channel. This tends to be a correct, tight-fit, because output to BG2 are done by widgets relying on regular ClipRect. + ImRect HostClipRect; // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window. + ImRect HostBackupInnerClipRect; // Backup of InnerWindow->ClipRect during PushTableBackground()/PopTableBackground() + ImGuiWindow* OuterWindow; // Parent window for the table + ImGuiWindow* InnerWindow; // Window holding the table data (== OuterWindow or a child window) + ImGuiTextBuffer ColumnsNames; // Contiguous buffer holding columns names + ImDrawListSplitter* DrawSplitter; // Shortcut to TempData->DrawSplitter while in table. Isolate draw commands per columns to avoid switching clip rect constantly + ImGuiTableInstanceData InstanceDataFirst; + ImVector InstanceDataExtra; // FIXME-OPT: Using a small-vector pattern would be good. + ImGuiTableColumnSortSpecs SortSpecsSingle; + ImVector SortSpecsMulti; // FIXME-OPT: Using a small-vector pattern would be good. + ImGuiTableSortSpecs SortSpecs; // Public facing sorts specs, this is what we return in TableGetSortSpecs() + ImGuiTableColumnIdx SortSpecsCount; + ImGuiTableColumnIdx ColumnsEnabledCount; // Number of enabled columns (<= ColumnsCount) + ImGuiTableColumnIdx ColumnsEnabledFixedCount; // Number of enabled columns (<= ColumnsCount) + ImGuiTableColumnIdx DeclColumnsCount; // Count calls to TableSetupColumn() + ImGuiTableColumnIdx AngledHeadersCount; // Count columns with angled headers + ImGuiTableColumnIdx HoveredColumnBody; // Index of column whose visible region is being hovered. Important: == ColumnsCount when hovering empty region after the right-most column! + ImGuiTableColumnIdx HoveredColumnBorder; // Index of column whose right-border is being hovered (for resizing). + ImGuiTableColumnIdx HighlightColumnHeader; // Index of column which should be highlighted. + ImGuiTableColumnIdx AutoFitSingleColumn; // Index of single column requesting auto-fit. + ImGuiTableColumnIdx ResizedColumn; // Index of column being resized. Reset when InstanceCurrent==0. + ImGuiTableColumnIdx LastResizedColumn; // Index of column being resized from previous frame. + ImGuiTableColumnIdx HeldHeaderColumn; // Index of column header being held. + ImGuiTableColumnIdx ReorderColumn; // Index of column being reordered. (not cleared) + ImGuiTableColumnIdx ReorderColumnDir; // -1 or +1 + ImGuiTableColumnIdx LeftMostEnabledColumn; // Index of left-most non-hidden column. + ImGuiTableColumnIdx RightMostEnabledColumn; // Index of right-most non-hidden column. + ImGuiTableColumnIdx LeftMostStretchedColumn; // Index of left-most stretched column. + ImGuiTableColumnIdx RightMostStretchedColumn; // Index of right-most stretched column. + ImGuiTableColumnIdx ContextPopupColumn; // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot + ImGuiTableColumnIdx FreezeRowsRequest; // Requested frozen rows count + ImGuiTableColumnIdx FreezeRowsCount; // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset) + ImGuiTableColumnIdx FreezeColumnsRequest; // Requested frozen columns count + ImGuiTableColumnIdx FreezeColumnsCount; // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset) + ImGuiTableColumnIdx RowCellDataCurrent; // Index of current RowCellData[] entry in current row + ImGuiTableDrawChannelIdx DummyDrawChannel; // Redirect non-visible columns here. + ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent; // For Selectable() and other widgets drawing across columns after the freezing line. Index within DrawSplitter.Channels[] + ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen; + bool IsLayoutLocked; // Set by TableUpdateLayout() which is called when beginning the first row. + bool IsInsideRow; // Set when inside TableBeginRow()/TableEndRow(). + bool IsInitializing; + bool IsSortSpecsDirty; + bool IsUsingHeaders; // Set when the first row had the ImGuiTableRowFlags_Headers flag. + bool IsContextPopupOpen; // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted). + bool DisableDefaultContextMenu; // Disable default context menu contents. You may submit your own using TableBeginContextMenuPopup()/EndPopup() + bool IsSettingsRequestLoad; + bool IsSettingsDirty; // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data. + bool IsDefaultDisplayOrder; // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1) + bool IsResetAllRequest; + bool IsResetDisplayOrderRequest; + bool IsUnfrozenRows; // Set when we got past the frozen row. + bool IsDefaultSizingPolicy; // Set if user didn't explicitly set a sizing policy in BeginTable() + bool IsActiveIdAliveBeforeTable; + bool IsActiveIdInTable; + bool HasScrollbarYCurr; // Whether ANY instance of this table had a vertical scrollbar during the current frame. + bool HasScrollbarYPrev; // Whether ANY instance of this table had a vertical scrollbar during the previous. + bool MemoryCompacted; + bool HostSkipItems; // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis + + ImGuiTable() { memset(this, 0, sizeof(*this)); LastFrameActive = -1; } + ~ImGuiTable() { IM_FREE(RawData); } +}; + +// Transient data that are only needed between BeginTable() and EndTable(), those buffers are shared (1 per level of stacked table). +// - Accessing those requires chasing an extra pointer so for very frequently used data we leave them in the main table structure. +// - We also leave out of this structure data that tend to be particularly useful for debugging/metrics. +// sizeof() ~ 120 bytes. +struct IMGUI_API ImGuiTableTempData +{ + int TableIndex; // Index in g.Tables.Buf[] pool + float LastTimeActive; // Last timestamp this structure was used + float AngledheadersExtraWidth; // Used in EndTable() + + ImVec2 UserOuterSize; // outer_size.x passed to BeginTable() + ImDrawListSplitter DrawSplitter; + + ImRect HostBackupWorkRect; // Backup of InnerWindow->WorkRect at the end of BeginTable() + ImRect HostBackupParentWorkRect; // Backup of InnerWindow->ParentWorkRect at the end of BeginTable() + ImVec2 HostBackupPrevLineSize; // Backup of InnerWindow->DC.PrevLineSize at the end of BeginTable() + ImVec2 HostBackupCurrLineSize; // Backup of InnerWindow->DC.CurrLineSize at the end of BeginTable() + ImVec2 HostBackupCursorMaxPos; // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable() + ImVec1 HostBackupColumnsOffset; // Backup of OuterWindow->DC.ColumnsOffset at the end of BeginTable() + float HostBackupItemWidth; // Backup of OuterWindow->DC.ItemWidth at the end of BeginTable() + int HostBackupItemWidthStackSize;//Backup of OuterWindow->DC.ItemWidthStack.Size at the end of BeginTable() + + ImGuiTableTempData() { memset(this, 0, sizeof(*this)); LastTimeActive = -1.0f; } +}; + +// sizeof() ~ 12 +struct ImGuiTableColumnSettings +{ + float WidthOrWeight; + ImGuiID UserID; + ImGuiTableColumnIdx Index; + ImGuiTableColumnIdx DisplayOrder; + ImGuiTableColumnIdx SortOrder; + ImU8 SortDirection : 2; + ImU8 IsEnabled : 1; // "Visible" in ini file + ImU8 IsStretch : 1; + + ImGuiTableColumnSettings() + { + WidthOrWeight = 0.0f; + UserID = 0; + Index = -1; + DisplayOrder = SortOrder = -1; + SortDirection = ImGuiSortDirection_None; + IsEnabled = 1; + IsStretch = 0; + } +}; + +// This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.) +struct ImGuiTableSettings +{ + ImGuiID ID; // Set to 0 to invalidate/delete the setting + ImGuiTableFlags SaveFlags; // Indicate data we want to save using the Resizable/Reorderable/Sortable/Hideable flags (could be using its own flags..) + float RefScale; // Reference scale to be able to rescale columns on font/dpi changes. + ImGuiTableColumnIdx ColumnsCount; + ImGuiTableColumnIdx ColumnsCountMax; // Maximum number of columns this settings instance can store, we can recycle a settings instance with lower number of columns but not higher + bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context) + + ImGuiTableSettings() { memset(this, 0, sizeof(*this)); } + ImGuiTableColumnSettings* GetColumnSettings() { return (ImGuiTableColumnSettings*)(this + 1); } +}; + +//----------------------------------------------------------------------------- +// [SECTION] ImGui internal API +// No guarantee of forward compatibility here! +//----------------------------------------------------------------------------- + +namespace ImGui +{ + // Windows + // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window) + // If this ever crash because g.CurrentWindow is NULL it means that either + // - ImGui::NewFrame() has never been called, which is illegal. + // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Renderer() and before the next ImGui::NewFrame(), which is also illegal. + inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; } + inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; } + IMGUI_API ImGuiWindow* FindWindowByID(ImGuiID id); + IMGUI_API ImGuiWindow* FindWindowByName(const char* name); + IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window); + IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow* window); + IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy); + IMGUI_API bool IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent); + IMGUI_API bool IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below); + IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window); + IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0); + IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0); + IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0); + IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size); + IMGUI_API void SetWindowHiddenAndSkipItemsForCurrentFrame(ImGuiWindow* window); + inline void SetWindowParentWindowForFocusRoute(ImGuiWindow* window, ImGuiWindow* parent_window) { window->ParentWindowForFocusRoute = parent_window; } + inline ImRect WindowRectAbsToRel(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x - off.x, r.Min.y - off.y, r.Max.x - off.x, r.Max.y - off.y); } + inline ImRect WindowRectRelToAbs(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x + off.x, r.Min.y + off.y, r.Max.x + off.x, r.Max.y + off.y); } + inline ImVec2 WindowPosRelToAbs(ImGuiWindow* window, const ImVec2& p) { ImVec2 off = window->DC.CursorStartPos; return ImVec2(p.x + off.x, p.y + off.y); } + + // Windows: Display Order and Focus Order + IMGUI_API void FocusWindow(ImGuiWindow* window, ImGuiFocusRequestFlags flags = 0); + IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window, ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags); + IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window); + IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window); + IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window); + IMGUI_API void BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* above_window); + IMGUI_API int FindWindowDisplayIndex(ImGuiWindow* window); + IMGUI_API ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* window); + + // Fonts, drawing + IMGUI_API void SetCurrentFont(ImFont* font); + inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; } + inline ImDrawList* GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); return GetForegroundDrawList(); } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches. + IMGUI_API ImDrawList* GetBackgroundDrawList(ImGuiViewport* viewport); // get background draw list for the given viewport. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents. + IMGUI_API ImDrawList* GetForegroundDrawList(ImGuiViewport* viewport); // get foreground draw list for the given viewport. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents. + IMGUI_API void AddDrawListToDrawDataEx(ImDrawData* draw_data, ImVector* out_list, ImDrawList* draw_list); + + // Init + IMGUI_API void Initialize(); + IMGUI_API void Shutdown(); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext(). + + // NewFrame + IMGUI_API void UpdateInputEvents(bool trickle_fast_inputs); + IMGUI_API void UpdateHoveredWindowAndCaptureFlags(); + IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window); + IMGUI_API void UpdateMouseMovingWindowNewFrame(); + IMGUI_API void UpdateMouseMovingWindowEndFrame(); + + // Generic context hooks + IMGUI_API ImGuiID AddContextHook(ImGuiContext* context, const ImGuiContextHook* hook); + IMGUI_API void RemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove); + IMGUI_API void CallContextHooks(ImGuiContext* context, ImGuiContextHookType type); + + // Viewports + IMGUI_API void SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport); + + // Settings + IMGUI_API void MarkIniSettingsDirty(); + IMGUI_API void MarkIniSettingsDirty(ImGuiWindow* window); + IMGUI_API void ClearIniSettings(); + IMGUI_API void AddSettingsHandler(const ImGuiSettingsHandler* handler); + IMGUI_API void RemoveSettingsHandler(const char* type_name); + IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name); + + // Settings - Windows + IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name); + IMGUI_API ImGuiWindowSettings* FindWindowSettingsByID(ImGuiID id); + IMGUI_API ImGuiWindowSettings* FindWindowSettingsByWindow(ImGuiWindow* window); + IMGUI_API void ClearWindowSettings(const char* name); + + // Localization + IMGUI_API void LocalizeRegisterEntries(const ImGuiLocEntry* entries, int count); + inline const char* LocalizeGetMsg(ImGuiLocKey key) { ImGuiContext& g = *GImGui; const char* msg = g.LocalizationTable[key]; return msg ? msg : "*Missing Text*"; } + + // Scrolling + IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x); + IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y); + IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio); + IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio); + + // Early work-in-progress API (ScrollToItem() will become public) + IMGUI_API void ScrollToItem(ImGuiScrollFlags flags = 0); + IMGUI_API void ScrollToRect(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0); + IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0); +//#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + inline void ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& rect) { ScrollToRect(window, rect, ImGuiScrollFlags_KeepVisibleEdgeY); } +//#endif + + // Basic Accessors + inline ImGuiItemStatusFlags GetItemStatusFlags(){ ImGuiContext& g = *GImGui; return g.LastItemData.StatusFlags; } + inline ImGuiItemFlags GetItemFlags() { ImGuiContext& g = *GImGui; return g.LastItemData.InFlags; } + inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; } + inline ImGuiID GetFocusID() { ImGuiContext& g = *GImGui; return g.NavId; } + IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window); + IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow* window); + IMGUI_API void ClearActiveID(); + IMGUI_API ImGuiID GetHoveredID(); + IMGUI_API void SetHoveredID(ImGuiID id); + IMGUI_API void KeepAliveID(ImGuiID id); + IMGUI_API void MarkItemEdited(ImGuiID id); // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function. + IMGUI_API void PushOverrideID(ImGuiID id); // Push given value as-is at the top of the ID stack (whereas PushID combines old and new hashes) + IMGUI_API ImGuiID GetIDWithSeed(const char* str_id_begin, const char* str_id_end, ImGuiID seed); + IMGUI_API ImGuiID GetIDWithSeed(int n, ImGuiID seed); + + // Basic Helpers for widget code + IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f); + inline void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f) { ItemSize(bb.GetSize(), text_baseline_y); } // FIXME: This is a misleading API since we expect CursorPos to be bb.Min. + IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL, ImGuiItemFlags extra_flags = 0); + IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id, ImGuiItemFlags item_flags); + IMGUI_API bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags = 0); + IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id); + IMGUI_API void SetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, ImGuiItemStatusFlags status_flags, const ImRect& item_rect); + IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h); + IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x); + IMGUI_API void PushMultiItemsWidths(int components, float width_full); + IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly) + IMGUI_API ImVec2 GetContentRegionMaxAbs(); + IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess); + + // Parameter stacks (shared) + IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled); + IMGUI_API void PopItemFlag(); + IMGUI_API const ImGuiDataVarInfo* GetStyleVarInfo(ImGuiStyleVar idx); + + // Logging/Capture + IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name. + IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer + IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL); + IMGUI_API void LogSetNextTextDecoration(const char* prefix, const char* suffix); + + // Popups, Modals, Tooltips + IMGUI_API bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags); + IMGUI_API void OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags = ImGuiPopupFlags_None); + IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup); + IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup); + IMGUI_API void ClosePopupsExceptModals(); + IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags); + IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags); + IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags); + IMGUI_API bool BeginTooltipHidden(); + IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window); + IMGUI_API ImGuiWindow* GetTopMostPopupModal(); + IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal(); + IMGUI_API ImGuiWindow* FindBlockingModal(ImGuiWindow* window); + IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window); + IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy); + + // Menus + IMGUI_API bool BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags); + IMGUI_API bool BeginMenuEx(const char* label, const char* icon, bool enabled = true); + IMGUI_API bool MenuItemEx(const char* label, const char* icon, const char* shortcut = NULL, bool selected = false, bool enabled = true); + + // Combos + IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags); + IMGUI_API bool BeginComboPreview(); + IMGUI_API void EndComboPreview(); + + // Gamepad/Keyboard Navigation + IMGUI_API void NavInitWindow(ImGuiWindow* window, bool force_reinit); + IMGUI_API void NavInitRequestApplyResult(); + IMGUI_API bool NavMoveRequestButNoResultYet(); + IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags); + IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags); + IMGUI_API void NavMoveRequestResolveWithLastItem(ImGuiNavItemData* result); + IMGUI_API void NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGuiNavTreeNodeData* tree_node_data); + IMGUI_API void NavMoveRequestCancel(); + IMGUI_API void NavMoveRequestApplyResult(); + IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags); + IMGUI_API void NavHighlightActivated(ImGuiID id); + IMGUI_API void NavClearPreferredPosForAxis(ImGuiAxis axis); + IMGUI_API void NavRestoreHighlightAfterMove(); + IMGUI_API void NavUpdateCurrentWindowIsScrollPushableX(); + IMGUI_API void SetNavWindow(ImGuiWindow* window); + IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel); + IMGUI_API void SetNavFocusScope(ImGuiID focus_scope_id); + + // Focus/Activation + // This should be part of a larger set of API: FocusItem(offset = -1), FocusItemByID(id), ActivateItem(offset = -1), ActivateItemByID(id) etc. which are + // much harder to design and implement than expected. I have a couple of private branches on this matter but it's not simple. For now implementing the easy ones. + IMGUI_API void FocusItem(); // Focus last item (no selection/activation). + IMGUI_API void ActivateItemByID(ImGuiID id); // Activate an item by ID (Structure, checkbox, tree node etc.). Activation is queued and processed on the next frame when the item is encountered again. + + // Inputs + // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions. + inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; } + inline bool IsNamedKeyOrModKey(ImGuiKey key) { return (key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END) || key == ImGuiMod_Ctrl || key == ImGuiMod_Shift || key == ImGuiMod_Alt || key == ImGuiMod_Super || key == ImGuiMod_Shortcut; } + inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; } + inline bool IsKeyboardKey(ImGuiKey key) { return key >= ImGuiKey_Keyboard_BEGIN && key < ImGuiKey_Keyboard_END; } + inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; } + inline bool IsMouseKey(ImGuiKey key) { return key >= ImGuiKey_Mouse_BEGIN && key < ImGuiKey_Mouse_END; } + inline bool IsAliasKey(ImGuiKey key) { return key >= ImGuiKey_Aliases_BEGIN && key < ImGuiKey_Aliases_END; } + inline bool IsModKey(ImGuiKey key) { return key >= ImGuiKey_LeftCtrl && key <= ImGuiKey_RightSuper; } + ImGuiKeyChord FixupKeyChord(ImGuiContext* ctx, ImGuiKeyChord key_chord); + inline ImGuiKey ConvertSingleModFlagToKey(ImGuiContext* ctx, ImGuiKey key) + { + ImGuiContext& g = *ctx; + if (key == ImGuiMod_Ctrl) return ImGuiKey_ReservedForModCtrl; + if (key == ImGuiMod_Shift) return ImGuiKey_ReservedForModShift; + if (key == ImGuiMod_Alt) return ImGuiKey_ReservedForModAlt; + if (key == ImGuiMod_Super) return ImGuiKey_ReservedForModSuper; + if (key == ImGuiMod_Shortcut) return (g.IO.ConfigMacOSXBehaviors ? ImGuiKey_ReservedForModSuper : ImGuiKey_ReservedForModCtrl); + return key; + } + + IMGUI_API ImGuiKeyData* GetKeyData(ImGuiContext* ctx, ImGuiKey key); + inline ImGuiKeyData* GetKeyData(ImGuiKey key) { ImGuiContext& g = *GImGui; return GetKeyData(&g, key); } + IMGUI_API const char* GetKeyChordName(ImGuiKeyChord key_chord); + inline ImGuiKey MouseButtonToKey(ImGuiMouseButton button) { IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT); return (ImGuiKey)(ImGuiKey_MouseLeft + button); } + IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f); + IMGUI_API ImVec2 GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, ImGuiKey key_up, ImGuiKey key_down); + IMGUI_API float GetNavTweakPressedAmount(ImGuiAxis axis); + IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate); + IMGUI_API void GetTypematicRepeatRate(ImGuiInputFlags flags, float* repeat_delay, float* repeat_rate); + IMGUI_API void TeleportMousePos(const ImVec2& pos); + IMGUI_API void SetActiveIdUsingAllKeyboardKeys(); + inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; } + + // [EXPERIMENTAL] Low-Level: Key/Input Ownership + // - The idea is that instead of "eating" a given input, we can link to an owner id. + // - Ownership is most often claimed as a result of reacting to a press/down event (but occasionally may be claimed ahead). + // - Input queries can then read input by specifying ImGuiKeyOwner_Any (== 0), ImGuiKeyOwner_None (== -1) or a custom ID. + // - Legacy input queries (without specifying an owner or _Any or _None) are equivalent to using ImGuiKeyOwner_Any (== 0). + // - Input ownership is automatically released on the frame after a key is released. Therefore: + // - for ownership registration happening as a result of a down/press event, the SetKeyOwner() call may be done once (common case). + // - for ownership registration happening ahead of a down/press event, the SetKeyOwner() call needs to be made every frame (happens if e.g. claiming ownership on hover). + // - SetItemKeyOwner() is a shortcut for common simple case. A custom widget will probably want to call SetKeyOwner() multiple times directly based on its interaction state. + // - This is marked experimental because not all widgets are fully honoring the Set/Test idioms. We will need to move forward step by step. + // Please open a GitHub Issue to submit your usage scenario or if there's a use case you need solved. + IMGUI_API ImGuiID GetKeyOwner(ImGuiKey key); + IMGUI_API void SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0); + IMGUI_API void SetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags = 0); + IMGUI_API void SetItemKeyOwner(ImGuiKey key, ImGuiInputFlags flags = 0); // Set key owner to last item if it is hovered or active. Equivalent to 'if (IsItemHovered() || IsItemActive()) { SetKeyOwner(key, GetItemID());'. + IMGUI_API bool TestKeyOwner(ImGuiKey key, ImGuiID owner_id); // Test that key is either not owned, either owned by 'owner_id' + inline ImGuiKeyOwnerData* GetKeyOwnerData(ImGuiContext* ctx, ImGuiKey key) { if (key & ImGuiMod_Mask_) key = ConvertSingleModFlagToKey(ctx, key); IM_ASSERT(IsNamedKey(key)); return &ctx->KeysOwnerData[key - ImGuiKey_NamedKey_BEGIN]; } + + // [EXPERIMENTAL] High-Level: Input Access functions w/ support for Key/Input Ownership + // - Important: legacy IsKeyPressed(ImGuiKey, bool repeat=true) _DEFAULTS_ to repeat, new IsKeyPressed() requires _EXPLICIT_ ImGuiInputFlags_Repeat flag. + // - Expected to be later promoted to public API, the prototypes are designed to replace existing ones (since owner_id can default to Any == 0) + // - Specifying a value for 'ImGuiID owner' will test that EITHER the key is NOT owned (UNLESS locked), EITHER the key is owned by 'owner'. + // Legacy functions use ImGuiKeyOwner_Any meaning that they typically ignore ownership, unless a call to SetKeyOwner() explicitly used ImGuiInputFlags_LockThisFrame or ImGuiInputFlags_LockUntilRelease. + // - Binding generators may want to ignore those for now, or suffix them with Ex() until we decide if this gets moved into public API. + IMGUI_API bool IsKeyDown(ImGuiKey key, ImGuiID owner_id); + IMGUI_API bool IsKeyPressed(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0); // Important: when transitioning from old to new IsKeyPressed(): old API has "bool repeat = true", so would default to repeat. New API requiress explicit ImGuiInputFlags_Repeat. + IMGUI_API bool IsKeyReleased(ImGuiKey key, ImGuiID owner_id); + IMGUI_API bool IsMouseDown(ImGuiMouseButton button, ImGuiID owner_id); + IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, ImGuiID owner_id, ImGuiInputFlags flags = 0); + IMGUI_API bool IsMouseReleased(ImGuiMouseButton button, ImGuiID owner_id); + IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button, ImGuiID owner_id); + + // [EXPERIMENTAL] Shortcut Routing + // - ImGuiKeyChord = a ImGuiKey optionally OR-red with ImGuiMod_Alt/ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Super. + // ImGuiKey_C (accepted by functions taking ImGuiKey or ImGuiKeyChord) + // ImGuiKey_C | ImGuiMod_Ctrl (accepted by functions taking ImGuiKeyChord) + // ONLY ImGuiMod_XXX values are legal to 'OR' with an ImGuiKey. You CANNOT 'OR' two ImGuiKey values. + // - When using one of the routing flags (e.g. ImGuiInputFlags_RouteFocused): routes requested ahead of time given a chord (key + modifiers) and a routing policy. + // - Routes are resolved during NewFrame(): if keyboard modifiers are matching current ones: SetKeyOwner() is called + route is granted for the frame. + // - Route is granted to a single owner. When multiple requests are made we have policies to select the winning route. + // - Multiple read sites may use the same owner id and will all get the granted route. + // - For routing: when owner_id is 0 we use the current Focus Scope ID as a default owner in order to identify our location. + // - TL;DR; + // - IsKeyChordPressed() compares mods + call IsKeyPressed() -> function has no side-effect. + // - Shortcut() submits a route then if currently can be routed calls IsKeyChordPressed() -> function has (desirable) side-effects. + IMGUI_API bool IsKeyChordPressed(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags = 0); + IMGUI_API void SetNextItemShortcut(ImGuiKeyChord key_chord); + IMGUI_API bool Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id = 0, ImGuiInputFlags flags = 0); + IMGUI_API bool SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags = 0); // owner_id needs to be explicit and cannot be 0 + IMGUI_API bool TestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id); + IMGUI_API ImGuiKeyRoutingData* GetShortcutRoutingData(ImGuiKeyChord key_chord); + + // [EXPERIMENTAL] Focus Scope + // This is generally used to identify a unique input location (for e.g. a selection set) + // There is one per window (automatically set in Begin), but: + // - Selection patterns generally need to react (e.g. clear a selection) when landing on one item of the set. + // So in order to identify a set multiple lists in same window may each need a focus scope. + // If you imagine an hypothetical BeginSelectionGroup()/EndSelectionGroup() api, it would likely call PushFocusScope()/EndFocusScope() + // - Shortcut routing also use focus scope as a default location identifier if an owner is not provided. + // We don't use the ID Stack for this as it is common to want them separate. + IMGUI_API void PushFocusScope(ImGuiID id); + IMGUI_API void PopFocusScope(); + inline ImGuiID GetCurrentFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentFocusScopeId; } // Focus scope we are outputting into, set by PushFocusScope() + + // Drag and Drop + IMGUI_API bool IsDragDropActive(); + IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id); + IMGUI_API void ClearDragDrop(); + IMGUI_API bool IsDragDropPayloadBeingAccepted(); + IMGUI_API void RenderDragDropTargetRect(const ImRect& bb, const ImRect& item_clip_rect); + + // Typing-Select API + IMGUI_API ImGuiTypingSelectRequest* GetTypingSelectRequest(ImGuiTypingSelectFlags flags = ImGuiTypingSelectFlags_None); + IMGUI_API int TypingSelectFindMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data, int nav_item_idx); + IMGUI_API int TypingSelectFindNextSingleCharMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data, int nav_item_idx); + IMGUI_API int TypingSelectFindBestLeadingMatch(ImGuiTypingSelectRequest* req, int items_count, const char* (*get_item_name_func)(void*, int), void* user_data); + + // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API) + IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect); + IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiOldColumnFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns(). + IMGUI_API void EndColumns(); // close columns + IMGUI_API void PushColumnClipRect(int column_index); + IMGUI_API void PushColumnsBackground(); + IMGUI_API void PopColumnsBackground(); + IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count); + IMGUI_API ImGuiOldColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id); + IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns* columns, float offset_norm); + IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns* columns, float offset); + + // Tables: Candidates for public API + IMGUI_API void TableOpenContextMenu(int column_n = -1); + IMGUI_API void TableSetColumnWidth(int column_n, float width); + IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs); + IMGUI_API int TableGetHoveredColumn(); // May use (TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered) instead. Return hovered column. return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered. + IMGUI_API int TableGetHoveredRow(); // Retrieve *PREVIOUS FRAME* hovered row. This difference with TableGetHoveredColumn() is the reason why this is not public yet. + IMGUI_API float TableGetHeaderRowHeight(); + IMGUI_API float TableGetHeaderAngledMaxLabelWidth(); + IMGUI_API void TablePushBackgroundChannel(); + IMGUI_API void TablePopBackgroundChannel(); + IMGUI_API void TableAngledHeadersRowEx(float angle, float label_width = 0.0f); + + // Tables: Internals + inline ImGuiTable* GetCurrentTable() { ImGuiContext& g = *GImGui; return g.CurrentTable; } + IMGUI_API ImGuiTable* TableFindByID(ImGuiID id); + IMGUI_API bool BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f); + IMGUI_API void TableBeginInitMemory(ImGuiTable* table, int columns_count); + IMGUI_API void TableBeginApplyRequests(ImGuiTable* table); + IMGUI_API void TableSetupDrawChannels(ImGuiTable* table); + IMGUI_API void TableUpdateLayout(ImGuiTable* table); + IMGUI_API void TableUpdateBorders(ImGuiTable* table); + IMGUI_API void TableUpdateColumnsWeightFromWidth(ImGuiTable* table); + IMGUI_API void TableDrawBorders(ImGuiTable* table); + IMGUI_API void TableDrawDefaultContextMenu(ImGuiTable* table, ImGuiTableFlags flags_for_section_to_display); + IMGUI_API bool TableBeginContextMenuPopup(ImGuiTable* table); + IMGUI_API void TableMergeDrawChannels(ImGuiTable* table); + inline ImGuiTableInstanceData* TableGetInstanceData(ImGuiTable* table, int instance_no) { if (instance_no == 0) return &table->InstanceDataFirst; return &table->InstanceDataExtra[instance_no - 1]; } + inline ImGuiID TableGetInstanceID(ImGuiTable* table, int instance_no) { return TableGetInstanceData(table, instance_no)->TableInstanceID; } + IMGUI_API void TableSortSpecsSanitize(ImGuiTable* table); + IMGUI_API void TableSortSpecsBuild(ImGuiTable* table); + IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn* column); + IMGUI_API void TableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column); + IMGUI_API float TableGetColumnWidthAuto(ImGuiTable* table, ImGuiTableColumn* column); + IMGUI_API void TableBeginRow(ImGuiTable* table); + IMGUI_API void TableEndRow(ImGuiTable* table); + IMGUI_API void TableBeginCell(ImGuiTable* table, int column_n); + IMGUI_API void TableEndCell(ImGuiTable* table); + IMGUI_API ImRect TableGetCellBgRect(const ImGuiTable* table, int column_n); + IMGUI_API const char* TableGetColumnName(const ImGuiTable* table, int column_n); + IMGUI_API ImGuiID TableGetColumnResizeID(ImGuiTable* table, int column_n, int instance_no = 0); + IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable* table, int column_n); + IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n); + IMGUI_API void TableSetColumnWidthAutoAll(ImGuiTable* table); + IMGUI_API void TableRemove(ImGuiTable* table); + IMGUI_API void TableGcCompactTransientBuffers(ImGuiTable* table); + IMGUI_API void TableGcCompactTransientBuffers(ImGuiTableTempData* table); + IMGUI_API void TableGcCompactSettings(); + + // Tables: Settings + IMGUI_API void TableLoadSettings(ImGuiTable* table); + IMGUI_API void TableSaveSettings(ImGuiTable* table); + IMGUI_API void TableResetSettings(ImGuiTable* table); + IMGUI_API ImGuiTableSettings* TableGetBoundSettings(ImGuiTable* table); + IMGUI_API void TableSettingsAddSettingsHandler(); + IMGUI_API ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count); + IMGUI_API ImGuiTableSettings* TableSettingsFindByID(ImGuiID id); + + // Tab Bars + inline ImGuiTabBar* GetCurrentTabBar() { ImGuiContext& g = *GImGui; return g.CurrentTabBar; } + IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags); + IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id); + IMGUI_API ImGuiTabItem* TabBarFindTabByOrder(ImGuiTabBar* tab_bar, int order); + IMGUI_API ImGuiTabItem* TabBarGetCurrentTab(ImGuiTabBar* tab_bar); + inline int TabBarGetTabOrder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab) { return tab_bar->Tabs.index_from_ptr(tab); } + IMGUI_API const char* TabBarGetTabName(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); + IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id); + IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); + IMGUI_API void TabBarQueueFocus(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); + IMGUI_API void TabBarQueueReorder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, int offset); + IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImVec2 mouse_pos); + IMGUI_API bool TabBarProcessReorder(ImGuiTabBar* tab_bar); + IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags, ImGuiWindow* docked_window); + IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button_or_unsaved_marker); + IMGUI_API ImVec2 TabItemCalcSize(ImGuiWindow* window); + IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col); + IMGUI_API void TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, bool* out_just_closed, bool* out_text_clipped); + + // Renderer helpers + // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT. + // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) + IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true); + IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width); + IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL); + IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL); + IMGUI_API void RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known); + IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f); + IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f); + IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0); + IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight + IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text. + IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); + + // Renderer helpers (those functions don't access any ImGui state!) + IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); + IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); + IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); + IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col); + IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding); + IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding); + + // Widgets + IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0); + IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0); + IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0); + IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& image_size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& bg_col, const ImVec4& tint_col, ImGuiButtonFlags flags = 0); + IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags, float thickness = 1.0f); + IMGUI_API void SeparatorTextEx(ImGuiID id, const char* label, const char* label_end, float extra_width); + IMGUI_API bool CheckboxFlags(const char* label, ImS64* flags, ImS64 flags_value); + IMGUI_API bool CheckboxFlags(const char* label, ImU64* flags, ImU64 flags_value); + + // Widgets: Window Decorations + IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos); + IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos); + IMGUI_API void Scrollbar(ImGuiAxis axis); + IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags); + IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis); + IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis); + IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow* window, int n); // 0..3: corners + IMGUI_API ImGuiID GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir); + + // Widgets low-level behaviors + IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0); + IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags); + IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb); + IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f, ImU32 bg_col = 0); + IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL); + IMGUI_API void TreePushOverrideID(ImGuiID id); + IMGUI_API void TreeNodeSetOpen(ImGuiID id, bool open); + IMGUI_API bool TreeNodeUpdateNextOpen(ImGuiID id, ImGuiTreeNodeFlags flags); // Return open state. Consume previous SetNextItemOpen() data, if any. May return true when logging. + IMGUI_API void SetNextItemSelectionUserData(ImGuiSelectionUserData selection_user_data); + + // Template functions are instantiated in imgui_widgets.cpp for a finite number of types. + // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036). + // e.g. " extern template IMGUI_API float RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, float v); " + template IMGUI_API float ScaleRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size); + template IMGUI_API T ScaleValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size); + template IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, ImGuiSliderFlags flags); + template IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb); + template IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v); + template IMGUI_API bool CheckboxFlagsT(const char* label, T* flags, T flags_value); + + // Data type helpers + IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type); + IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format); + IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg_1, const void* arg_2); + IMGUI_API bool DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format); + IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2); + IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max); + + // InputText + IMGUI_API bool InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL); + IMGUI_API void InputTextDeactivateHook(ImGuiID id); + IMGUI_API bool TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags); + IMGUI_API bool TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format, const void* p_clamp_min = NULL, const void* p_clamp_max = NULL); + inline bool TempInputIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); } + inline ImGuiInputTextState* GetInputTextState(ImGuiID id) { ImGuiContext& g = *GImGui; return (id != 0 && g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active + + // Color + IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags); + IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags); + IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags); + + // Plot + IMGUI_API int PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, const ImVec2& size_arg); + + // Shade functions (write over already created vertices) + IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1); + IMGUI_API void ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp); + IMGUI_API void ShadeVertsTransformPos(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& pivot_in, float cos_a, float sin_a, const ImVec2& pivot_out); + + // Garbage collection + IMGUI_API void GcCompactTransientMiscBuffers(); + IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window); + IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window); + + // Debug Log + IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1); + IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1); + IMGUI_API void DebugAllocHook(ImGuiDebugAllocInfo* info, int frame_count, void* ptr, size_t size); // size >= 0 : alloc, size = -1 : free + + // Debug Tools + IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL); + IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL); + IMGUI_API void ErrorCheckUsingSetCursorPosToExtendParentBoundaries(); + IMGUI_API void DebugDrawCursorPos(ImU32 col = IM_COL32(255, 0, 0, 255)); + IMGUI_API void DebugDrawLineExtents(ImU32 col = IM_COL32(255, 0, 0, 255)); + IMGUI_API void DebugDrawItemRect(ImU32 col = IM_COL32(255, 0, 0, 255)); + IMGUI_API void DebugLocateItem(ImGuiID target_id); // Call sparingly: only 1 at the same time! + IMGUI_API void DebugLocateItemOnHover(ImGuiID target_id); // Only call on reaction to a mouse Hover: because only 1 at the same time! + IMGUI_API void DebugLocateItemResolveWithLastItem(); + IMGUI_API void DebugBreakClearData(); + IMGUI_API bool DebugBreakButton(const char* label, const char* description_of_location); + IMGUI_API void DebugBreakButtonTooltip(bool keyboard_only, const char* description_of_location); + inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; } + IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas); + IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end); + IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns); + IMGUI_API void DebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, const ImDrawList* draw_list, const char* label); + IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb); + IMGUI_API void DebugNodeFont(ImFont* font); + IMGUI_API void DebugNodeFontGlyph(ImFont* font, const ImFontGlyph* glyph); + IMGUI_API void DebugNodeStorage(ImGuiStorage* storage, const char* label); + IMGUI_API void DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label); + IMGUI_API void DebugNodeTable(ImGuiTable* table); + IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings* settings); + IMGUI_API void DebugNodeInputTextState(ImGuiInputTextState* state); + IMGUI_API void DebugNodeTypingSelectState(ImGuiTypingSelectState* state); + IMGUI_API void DebugNodeWindow(ImGuiWindow* window, const char* label); + IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings* settings); + IMGUI_API void DebugNodeWindowsList(ImVector* windows, const char* label); + IMGUI_API void DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack); + IMGUI_API void DebugNodeViewport(ImGuiViewportP* viewport); + IMGUI_API void DebugRenderKeyboardPreview(ImDrawList* draw_list); + IMGUI_API void DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb); + + // Obsolete functions +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + inline void SetItemUsingMouseWheel() { SetItemKeyOwner(ImGuiKey_MouseWheelY); } // Changed in 1.89 + inline bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0) { return TreeNodeUpdateNextOpen(id, flags); } // Renamed in 1.89 + + // Refactored focus/nav/tabbing system in 1.82 and 1.84. If you have old/custom copy-and-pasted widgets which used FocusableItemRegister(): + // (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool tab_focused = FocusableItemRegister(...)' + // (Old) IMGUI_VERSION_NUM >= 18209: using 'ItemAdd(..., ImGuiItemAddFlags_Focusable)' and 'bool tab_focused = (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_Focused) != 0' + // (New) IMGUI_VERSION_NUM >= 18413: using 'ItemAdd(..., ImGuiItemFlags_Inputable)' and 'bool tab_focused = (g.NavActivateId == id && (g.NavActivateFlags & ImGuiActivateFlags_PreferInput))' + //inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd() + //inline void FocusableItemUnregister(ImGuiWindow* window) // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem +#endif +#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO + inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { IM_ASSERT(IsNamedKey(key)); return IsKeyPressed(key, repeat); } // Removed in 1.87: Mapping from named key is always identity! +#endif + +} // namespace ImGui + + +//----------------------------------------------------------------------------- +// [SECTION] ImFontAtlas internal API +//----------------------------------------------------------------------------- + +// This structure is likely to evolve as we add support for incremental atlas updates +struct ImFontBuilderIO +{ + bool (*FontBuilder_Build)(ImFontAtlas* atlas); +}; + +// Helper for font builder +#ifdef IMGUI_ENABLE_STB_TRUETYPE +IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype(); +#endif +IMGUI_API void ImFontAtlasUpdateConfigDataPointers(ImFontAtlas* atlas); +IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas); +IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent); +IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque); +IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas); +IMGUI_API void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned char in_marker_pixel_value); +IMGUI_API void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned int in_marker_pixel_value); +IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor); +IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride); + +//----------------------------------------------------------------------------- +// [SECTION] Test Engine specific hooks (imgui_test_engine) +//----------------------------------------------------------------------------- + +#ifdef IMGUI_ENABLE_TEST_ENGINE +extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, ImGuiID id, const ImRect& bb, const ImGuiLastItemData* item_data); // item_data may be NULL +extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags); +extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...); +extern const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext* ctx, ImGuiID id); + +// In IMGUI_VERSION_NUM >= 18934: changed IMGUI_TEST_ENGINE_ITEM_ADD(bb,id) to IMGUI_TEST_ENGINE_ITEM_ADD(id,bb,item_data); +#define IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _ID, _BB, _ITEM_DATA) // Register item bounding box +#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional) +#define IMGUI_TEST_ENGINE_LOG(_FMT,...) if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log +#else +#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) ((void)0) +#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)g) +#endif + +//----------------------------------------------------------------------------- + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +#endif // #ifndef IMGUI_DISABLE diff --git a/include/imgui/imstb_rectpack.h b/include/imgui/imstb_rectpack.h new file mode 100644 index 00000000..f6917e7a --- /dev/null +++ b/include/imgui/imstb_rectpack.h @@ -0,0 +1,627 @@ +// [DEAR IMGUI] +// This is a slightly modified version of stb_rect_pack.h 1.01. +// Grep for [DEAR IMGUI] to find the changes. +// +// stb_rect_pack.h - v1.01 - public domain - rectangle packing +// Sean Barrett 2014 +// +// Useful for e.g. packing rectangular textures into an atlas. +// Does not do rotation. +// +// Before #including, +// +// #define STB_RECT_PACK_IMPLEMENTATION +// +// in the file that you want to have the implementation. +// +// Not necessarily the awesomest packing method, but better than +// the totally naive one in stb_truetype (which is primarily what +// this is meant to replace). +// +// Has only had a few tests run, may have issues. +// +// More docs to come. +// +// No memory allocations; uses qsort() and assert() from stdlib. +// Can override those by defining STBRP_SORT and STBRP_ASSERT. +// +// This library currently uses the Skyline Bottom-Left algorithm. +// +// Please note: better rectangle packers are welcome! Please +// implement them to the same API, but with a different init +// function. +// +// Credits +// +// Library +// Sean Barrett +// Minor features +// Martins Mozeiko +// github:IntellectualKitty +// +// Bugfixes / warning fixes +// Jeremy Jaussaud +// Fabian Giesen +// +// Version history: +// +// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section +// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles +// 0.99 (2019-02-07) warning fixes +// 0.11 (2017-03-03) return packing success/fail result +// 0.10 (2016-10-25) remove cast-away-const to avoid warnings +// 0.09 (2016-08-27) fix compiler warnings +// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0) +// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0) +// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort +// 0.05: added STBRP_ASSERT to allow replacing assert +// 0.04: fixed minor bug in STBRP_LARGE_RECTS support +// 0.01: initial release +// +// LICENSE +// +// See end of file for license information. + +////////////////////////////////////////////////////////////////////////////// +// +// INCLUDE SECTION +// + +#ifndef STB_INCLUDE_STB_RECT_PACK_H +#define STB_INCLUDE_STB_RECT_PACK_H + +#define STB_RECT_PACK_VERSION 1 + +#ifdef STBRP_STATIC +#define STBRP_DEF static +#else +#define STBRP_DEF extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stbrp_context stbrp_context; +typedef struct stbrp_node stbrp_node; +typedef struct stbrp_rect stbrp_rect; + +typedef int stbrp_coord; + +#define STBRP__MAXVAL 0x7fffffff +// Mostly for internal use, but this is the maximum supported coordinate value. + +STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects); +// Assign packed locations to rectangles. The rectangles are of type +// 'stbrp_rect' defined below, stored in the array 'rects', and there +// are 'num_rects' many of them. +// +// Rectangles which are successfully packed have the 'was_packed' flag +// set to a non-zero value and 'x' and 'y' store the minimum location +// on each axis (i.e. bottom-left in cartesian coordinates, top-left +// if you imagine y increasing downwards). Rectangles which do not fit +// have the 'was_packed' flag set to 0. +// +// You should not try to access the 'rects' array from another thread +// while this function is running, as the function temporarily reorders +// the array while it executes. +// +// To pack into another rectangle, you need to call stbrp_init_target +// again. To continue packing into the same rectangle, you can call +// this function again. Calling this multiple times with multiple rect +// arrays will probably produce worse packing results than calling it +// a single time with the full rectangle array, but the option is +// available. +// +// The function returns 1 if all of the rectangles were successfully +// packed and 0 otherwise. + +struct stbrp_rect +{ + // reserved for your use: + int id; + + // input: + stbrp_coord w, h; + + // output: + stbrp_coord x, y; + int was_packed; // non-zero if valid packing + +}; // 16 bytes, nominally + + +STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes); +// Initialize a rectangle packer to: +// pack a rectangle that is 'width' by 'height' in dimensions +// using temporary storage provided by the array 'nodes', which is 'num_nodes' long +// +// You must call this function every time you start packing into a new target. +// +// There is no "shutdown" function. The 'nodes' memory must stay valid for +// the following stbrp_pack_rects() call (or calls), but can be freed after +// the call (or calls) finish. +// +// Note: to guarantee best results, either: +// 1. make sure 'num_nodes' >= 'width' +// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1' +// +// If you don't do either of the above things, widths will be quantized to multiples +// of small integers to guarantee the algorithm doesn't run out of temporary storage. +// +// If you do #2, then the non-quantized algorithm will be used, but the algorithm +// may run out of temporary storage and be unable to pack some rectangles. + +STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem); +// Optionally call this function after init but before doing any packing to +// change the handling of the out-of-temp-memory scenario, described above. +// If you call init again, this will be reset to the default (false). + + +STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic); +// Optionally select which packing heuristic the library should use. Different +// heuristics will produce better/worse results for different data sets. +// If you call init again, this will be reset to the default. + +enum +{ + STBRP_HEURISTIC_Skyline_default=0, + STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default, + STBRP_HEURISTIC_Skyline_BF_sortHeight +}; + + +////////////////////////////////////////////////////////////////////////////// +// +// the details of the following structures don't matter to you, but they must +// be visible so you can handle the memory allocations for them + +struct stbrp_node +{ + stbrp_coord x,y; + stbrp_node *next; +}; + +struct stbrp_context +{ + int width; + int height; + int align; + int init_mode; + int heuristic; + int num_nodes; + stbrp_node *active_head; + stbrp_node *free_head; + stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2' +}; + +#ifdef __cplusplus +} +#endif + +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// IMPLEMENTATION SECTION +// + +#ifdef STB_RECT_PACK_IMPLEMENTATION +#ifndef STBRP_SORT +#include +#define STBRP_SORT qsort +#endif + +#ifndef STBRP_ASSERT +#include +#define STBRP_ASSERT assert +#endif + +#ifdef _MSC_VER +#define STBRP__NOTUSED(v) (void)(v) +#define STBRP__CDECL __cdecl +#else +#define STBRP__NOTUSED(v) (void)sizeof(v) +#define STBRP__CDECL +#endif + +enum +{ + STBRP__INIT_skyline = 1 +}; + +STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic) +{ + switch (context->init_mode) { + case STBRP__INIT_skyline: + STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight); + context->heuristic = heuristic; + break; + default: + STBRP_ASSERT(0); + } +} + +STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem) +{ + if (allow_out_of_mem) + // if it's ok to run out of memory, then don't bother aligning them; + // this gives better packing, but may fail due to OOM (even though + // the rectangles easily fit). @TODO a smarter approach would be to only + // quantize once we've hit OOM, then we could get rid of this parameter. + context->align = 1; + else { + // if it's not ok to run out of memory, then quantize the widths + // so that num_nodes is always enough nodes. + // + // I.e. num_nodes * align >= width + // align >= width / num_nodes + // align = ceil(width/num_nodes) + + context->align = (context->width + context->num_nodes-1) / context->num_nodes; + } +} + +STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes) +{ + int i; + + for (i=0; i < num_nodes-1; ++i) + nodes[i].next = &nodes[i+1]; + nodes[i].next = NULL; + context->init_mode = STBRP__INIT_skyline; + context->heuristic = STBRP_HEURISTIC_Skyline_default; + context->free_head = &nodes[0]; + context->active_head = &context->extra[0]; + context->width = width; + context->height = height; + context->num_nodes = num_nodes; + stbrp_setup_allow_out_of_mem(context, 0); + + // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly) + context->extra[0].x = 0; + context->extra[0].y = 0; + context->extra[0].next = &context->extra[1]; + context->extra[1].x = (stbrp_coord) width; + context->extra[1].y = (1<<30); + context->extra[1].next = NULL; +} + +// find minimum y position if it starts at x1 +static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste) +{ + stbrp_node *node = first; + int x1 = x0 + width; + int min_y, visited_width, waste_area; + + STBRP__NOTUSED(c); + + STBRP_ASSERT(first->x <= x0); + + #if 0 + // skip in case we're past the node + while (node->next->x <= x0) + ++node; + #else + STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency + #endif + + STBRP_ASSERT(node->x <= x0); + + min_y = 0; + waste_area = 0; + visited_width = 0; + while (node->x < x1) { + if (node->y > min_y) { + // raise min_y higher. + // we've accounted for all waste up to min_y, + // but we'll now add more waste for everything we've visted + waste_area += visited_width * (node->y - min_y); + min_y = node->y; + // the first time through, visited_width might be reduced + if (node->x < x0) + visited_width += node->next->x - x0; + else + visited_width += node->next->x - node->x; + } else { + // add waste area + int under_width = node->next->x - node->x; + if (under_width + visited_width > width) + under_width = width - visited_width; + waste_area += under_width * (min_y - node->y); + visited_width += under_width; + } + node = node->next; + } + + *pwaste = waste_area; + return min_y; +} + +typedef struct +{ + int x,y; + stbrp_node **prev_link; +} stbrp__findresult; + +static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height) +{ + int best_waste = (1<<30), best_x, best_y = (1 << 30); + stbrp__findresult fr; + stbrp_node **prev, *node, *tail, **best = NULL; + + // align to multiple of c->align + width = (width + c->align - 1); + width -= width % c->align; + STBRP_ASSERT(width % c->align == 0); + + // if it can't possibly fit, bail immediately + if (width > c->width || height > c->height) { + fr.prev_link = NULL; + fr.x = fr.y = 0; + return fr; + } + + node = c->active_head; + prev = &c->active_head; + while (node->x + width <= c->width) { + int y,waste; + y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste); + if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL + // bottom left + if (y < best_y) { + best_y = y; + best = prev; + } + } else { + // best-fit + if (y + height <= c->height) { + // can only use it if it first vertically + if (y < best_y || (y == best_y && waste < best_waste)) { + best_y = y; + best_waste = waste; + best = prev; + } + } + } + prev = &node->next; + node = node->next; + } + + best_x = (best == NULL) ? 0 : (*best)->x; + + // if doing best-fit (BF), we also have to try aligning right edge to each node position + // + // e.g, if fitting + // + // ____________________ + // |____________________| + // + // into + // + // | | + // | ____________| + // |____________| + // + // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned + // + // This makes BF take about 2x the time + + if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) { + tail = c->active_head; + node = c->active_head; + prev = &c->active_head; + // find first node that's admissible + while (tail->x < width) + tail = tail->next; + while (tail) { + int xpos = tail->x - width; + int y,waste; + STBRP_ASSERT(xpos >= 0); + // find the left position that matches this + while (node->next->x <= xpos) { + prev = &node->next; + node = node->next; + } + STBRP_ASSERT(node->next->x > xpos && node->x <= xpos); + y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste); + if (y + height <= c->height) { + if (y <= best_y) { + if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) { + best_x = xpos; + //STBRP_ASSERT(y <= best_y); [DEAR IMGUI] + best_y = y; + best_waste = waste; + best = prev; + } + } + } + tail = tail->next; + } + } + + fr.prev_link = best; + fr.x = best_x; + fr.y = best_y; + return fr; +} + +static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height) +{ + // find best position according to heuristic + stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height); + stbrp_node *node, *cur; + + // bail if: + // 1. it failed + // 2. the best node doesn't fit (we don't always check this) + // 3. we're out of memory + if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) { + res.prev_link = NULL; + return res; + } + + // on success, create new node + node = context->free_head; + node->x = (stbrp_coord) res.x; + node->y = (stbrp_coord) (res.y + height); + + context->free_head = node->next; + + // insert the new node into the right starting point, and + // let 'cur' point to the remaining nodes needing to be + // stiched back in + + cur = *res.prev_link; + if (cur->x < res.x) { + // preserve the existing one, so start testing with the next one + stbrp_node *next = cur->next; + cur->next = node; + cur = next; + } else { + *res.prev_link = node; + } + + // from here, traverse cur and free the nodes, until we get to one + // that shouldn't be freed + while (cur->next && cur->next->x <= res.x + width) { + stbrp_node *next = cur->next; + // move the current node to the free list + cur->next = context->free_head; + context->free_head = cur; + cur = next; + } + + // stitch the list back in + node->next = cur; + + if (cur->x < res.x + width) + cur->x = (stbrp_coord) (res.x + width); + +#ifdef _DEBUG + cur = context->active_head; + while (cur->x < context->width) { + STBRP_ASSERT(cur->x < cur->next->x); + cur = cur->next; + } + STBRP_ASSERT(cur->next == NULL); + + { + int count=0; + cur = context->active_head; + while (cur) { + cur = cur->next; + ++count; + } + cur = context->free_head; + while (cur) { + cur = cur->next; + ++count; + } + STBRP_ASSERT(count == context->num_nodes+2); + } +#endif + + return res; +} + +static int STBRP__CDECL rect_height_compare(const void *a, const void *b) +{ + const stbrp_rect *p = (const stbrp_rect *) a; + const stbrp_rect *q = (const stbrp_rect *) b; + if (p->h > q->h) + return -1; + if (p->h < q->h) + return 1; + return (p->w > q->w) ? -1 : (p->w < q->w); +} + +static int STBRP__CDECL rect_original_order(const void *a, const void *b) +{ + const stbrp_rect *p = (const stbrp_rect *) a; + const stbrp_rect *q = (const stbrp_rect *) b; + return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed); +} + +STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects) +{ + int i, all_rects_packed = 1; + + // we use the 'was_packed' field internally to allow sorting/unsorting + for (i=0; i < num_rects; ++i) { + rects[i].was_packed = i; + } + + // sort according to heuristic + STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare); + + for (i=0; i < num_rects; ++i) { + if (rects[i].w == 0 || rects[i].h == 0) { + rects[i].x = rects[i].y = 0; // empty rect needs no space + } else { + stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h); + if (fr.prev_link) { + rects[i].x = (stbrp_coord) fr.x; + rects[i].y = (stbrp_coord) fr.y; + } else { + rects[i].x = rects[i].y = STBRP__MAXVAL; + } + } + } + + // unsort + STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order); + + // set was_packed flags and all_rects_packed status + for (i=0; i < num_rects; ++i) { + rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL); + if (!rects[i].was_packed) + all_rects_packed = 0; + } + + // return the all_rects_packed status + return all_rects_packed; +} +#endif + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ diff --git a/include/imgui/imstb_textedit.h b/include/imgui/imstb_textedit.h new file mode 100644 index 00000000..459d386c --- /dev/null +++ b/include/imgui/imstb_textedit.h @@ -0,0 +1,1441 @@ +// [DEAR IMGUI] +// This is a slightly modified version of stb_textedit.h 1.14. +// Those changes would need to be pushed into nothings/stb: +// - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321) +// - Fix in stb_textedit_find_charpos to handle last line (see https://github.com/ocornut/imgui/issues/6000 + #6783) +// Grep for [DEAR IMGUI] to find the changes. +// - Also renamed macros used or defined outside of IMSTB_TEXTEDIT_IMPLEMENTATION block from STB_TEXTEDIT_* to IMSTB_TEXTEDIT_* + +// stb_textedit.h - v1.14 - public domain - Sean Barrett +// Development of this library was sponsored by RAD Game Tools +// +// This C header file implements the guts of a multi-line text-editing +// widget; you implement display, word-wrapping, and low-level string +// insertion/deletion, and stb_textedit will map user inputs into +// insertions & deletions, plus updates to the cursor position, +// selection state, and undo state. +// +// It is intended for use in games and other systems that need to build +// their own custom widgets and which do not have heavy text-editing +// requirements (this library is not recommended for use for editing large +// texts, as its performance does not scale and it has limited undo). +// +// Non-trivial behaviors are modelled after Windows text controls. +// +// +// LICENSE +// +// See end of file for license information. +// +// +// DEPENDENCIES +// +// Uses the C runtime function 'memmove', which you can override +// by defining IMSTB_TEXTEDIT_memmove before the implementation. +// Uses no other functions. Performs no runtime allocations. +// +// +// VERSION HISTORY +// +// 1.14 (2021-07-11) page up/down, various fixes +// 1.13 (2019-02-07) fix bug in undo size management +// 1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash +// 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield +// 1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual +// 1.9 (2016-08-27) customizable move-by-word +// 1.8 (2016-04-02) better keyboard handling when mouse Structure is down +// 1.7 (2015-09-13) change y range handling in case baseline is non-0 +// 1.6 (2015-04-15) allow STB_TEXTEDIT_memmove +// 1.5 (2014-09-10) add support for secondary keys for OS X +// 1.4 (2014-08-17) fix signed/unsigned warnings +// 1.3 (2014-06-19) fix mouse clicking to round to nearest char boundary +// 1.2 (2014-05-27) fix some RAD types that had crept into the new code +// 1.1 (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE ) +// 1.0 (2012-07-26) improve documentation, initial public release +// 0.3 (2012-02-24) bugfixes, single-line mode; insert mode +// 0.2 (2011-11-28) fixes to undo/redo +// 0.1 (2010-07-08) initial version +// +// ADDITIONAL CONTRIBUTORS +// +// Ulf Winklemann: move-by-word in 1.1 +// Fabian Giesen: secondary key inputs in 1.5 +// Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6 +// Louis Schnellbach: page up/down in 1.14 +// +// Bugfixes: +// Scott Graham +// Daniel Keller +// Omar Cornut +// Dan Thompson +// +// USAGE +// +// This file behaves differently depending on what symbols you define +// before including it. +// +// +// Header-file mode: +// +// If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this, +// it will operate in "header file" mode. In this mode, it declares a +// single public symbol, STB_TexteditState, which encapsulates the current +// state of a text widget (except for the string, which you will store +// separately). +// +// To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a +// primitive type that defines a single character (e.g. char, wchar_t, etc). +// +// To save space or increase undo-ability, you can optionally define the +// following things that are used by the undo system: +// +// STB_TEXTEDIT_POSITIONTYPE small int type encoding a valid cursor position +// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow +// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer +// +// If you don't define these, they are set to permissive types and +// moderate sizes. The undo system does no memory allocations, so +// it grows STB_TexteditState by the worst-case storage which is (in bytes): +// +// [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATECOUNT +// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHARCOUNT +// +// +// Implementation mode: +// +// If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it +// will compile the implementation of the text edit widget, depending +// on a large number of symbols which must be defined before the include. +// +// The implementation is defined only as static functions. You will then +// need to provide your own APIs in the same file which will access the +// static functions. +// +// The basic concept is that you provide a "string" object which +// behaves like an array of characters. stb_textedit uses indices to +// refer to positions in the string, implicitly representing positions +// in the displayed textedit. This is true for both plain text and +// rich text; even with rich text stb_truetype interacts with your +// code as if there was an array of all the displayed characters. +// +// Symbols that must be the same in header-file and implementation mode: +// +// STB_TEXTEDIT_CHARTYPE the character type +// STB_TEXTEDIT_POSITIONTYPE small type that is a valid cursor position +// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow +// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer +// +// Symbols you must define for implementation mode: +// +// STB_TEXTEDIT_STRING the type of object representing a string being edited, +// typically this is a wrapper object with other data you need +// +// STB_TEXTEDIT_STRINGLEN(obj) the length of the string (ideally O(1)) +// STB_TEXTEDIT_LAYOUTROW(&r,obj,n) returns the results of laying out a line of characters +// starting from character #n (see discussion below) +// STB_TEXTEDIT_GETWIDTH(obj,n,i) returns the pixel delta from the xpos of the i'th character +// to the xpos of the i+1'th char for a line of characters +// starting at character #n (i.e. accounts for kerning +// with previous char) +// STB_TEXTEDIT_KEYTOTEXT(k) maps a keyboard input to an insertable character +// (return type is int, -1 means not valid to insert) +// STB_TEXTEDIT_GETCHAR(obj,i) returns the i'th character of obj, 0-based +// STB_TEXTEDIT_NEWLINE the character returned by _GETCHAR() we recognize +// as manually wordwrapping for end-of-line positioning +// +// STB_TEXTEDIT_DELETECHARS(obj,i,n) delete n characters starting at i +// STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n) insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*) +// +// STB_TEXTEDIT_K_SHIFT a power of two that is or'd in to a keyboard input to represent the shift key +// +// STB_TEXTEDIT_K_LEFT keyboard input to move cursor left +// STB_TEXTEDIT_K_RIGHT keyboard input to move cursor right +// STB_TEXTEDIT_K_UP keyboard input to move cursor up +// STB_TEXTEDIT_K_DOWN keyboard input to move cursor down +// STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page +// STB_TEXTEDIT_K_PGDOWN keyboard input to move cursor down a page +// STB_TEXTEDIT_K_LINESTART keyboard input to move cursor to start of line // e.g. HOME +// STB_TEXTEDIT_K_LINEEND keyboard input to move cursor to end of line // e.g. END +// STB_TEXTEDIT_K_TEXTSTART keyboard input to move cursor to start of text // e.g. ctrl-HOME +// STB_TEXTEDIT_K_TEXTEND keyboard input to move cursor to end of text // e.g. ctrl-END +// STB_TEXTEDIT_K_DELETE keyboard input to delete selection or character under cursor +// STB_TEXTEDIT_K_BACKSPACE keyboard input to delete selection or character left of cursor +// STB_TEXTEDIT_K_UNDO keyboard input to perform undo +// STB_TEXTEDIT_K_REDO keyboard input to perform redo +// +// Optional: +// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode +// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'), +// required for default WORDLEFT/WORDRIGHT handlers +// STB_TEXTEDIT_MOVEWORDLEFT(obj,i) custom handler for WORDLEFT, returns index to move cursor to +// STB_TEXTEDIT_MOVEWORDRIGHT(obj,i) custom handler for WORDRIGHT, returns index to move cursor to +// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT +// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT +// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line +// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line +// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text +// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text +// +// Keyboard input must be encoded as a single integer value; e.g. a character code +// and some bitflags that represent shift states. to simplify the interface, SHIFT must +// be a bitflag, so we can test the shifted state of cursor movements to allow selection, +// i.e. (STB_TEXTEDIT_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow. +// +// You can encode other things, such as CONTROL or ALT, in additional bits, and +// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example, +// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN +// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit, +// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the +// API below. The control keys will only match WM_KEYDOWN events because of the +// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN +// bit so it only decodes WM_CHAR events. +// +// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed +// row of characters assuming they start on the i'th character--the width and +// the height and the number of characters consumed. This allows this library +// to traverse the entire layout incrementally. You need to compute word-wrapping +// here. +// +// Each textfield keeps its own insert mode state, which is not how normal +// applications work. To keep an app-wide insert mode, update/copy the +// "insert_mode" field of STB_TexteditState before/after calling API functions. +// +// API +// +// void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) +// +// void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state) +// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len) +// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key) +// +// Each of these functions potentially updates the string and updates the +// state. +// +// initialize_state: +// set the textedit state to a known good default state when initially +// constructing the textedit. +// +// click: +// call this with the mouse x,y on a mouse down; it will update the cursor +// and reset the selection start/end to the cursor point. the x,y must +// be relative to the text widget, with (0,0) being the top left. +// +// drag: +// call this with the mouse x,y on a mouse drag/up; it will update the +// cursor and the selection end point +// +// cut: +// call this to delete the current selection; returns true if there was +// one. you should FIRST copy the current selection to the system paste buffer. +// (To copy, just copy the current selection out of the string yourself.) +// +// paste: +// call this to paste text at the current cursor point or over the current +// selection if there is one. +// +// key: +// call this for keyboard inputs sent to the textfield. you can use it +// for "key down" events or for "translated" key events. if you need to +// do both (as in Win32), or distinguish Unicode characters from control +// inputs, set a high bit to distinguish the two; then you can define the +// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit +// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is +// clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to +// anything other type you wante before including. +// +// +// When rendering, you can read the cursor position and selection state from +// the STB_TexteditState. +// +// +// Notes: +// +// This is designed to be usable in IMGUI, so it allows for the possibility of +// running in an IMGUI that has NOT cached the multi-line layout. For this +// reason, it provides an interface that is compatible with computing the +// layout incrementally--we try to make sure we make as few passes through +// as possible. (For example, to locate the mouse pointer in the text, we +// could define functions that return the X and Y positions of characters +// and binary search Y and then X, but if we're doing dynamic layout this +// will run the layout algorithm many times, so instead we manually search +// forward in one pass. Similar logic applies to e.g. up-arrow and +// down-arrow movement.) +// +// If it's run in a widget that *has* cached the layout, then this is less +// efficient, but it's not horrible on modern computers. But you wouldn't +// want to edit million-line files with it. + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//// +//// Header-file mode +//// +//// + +#ifndef INCLUDE_IMSTB_TEXTEDIT_H +#define INCLUDE_IMSTB_TEXTEDIT_H + +//////////////////////////////////////////////////////////////////////// +// +// STB_TexteditState +// +// Definition of STB_TexteditState which you should store +// per-textfield; it includes cursor position, selection state, +// and undo state. +// + +#ifndef IMSTB_TEXTEDIT_UNDOSTATECOUNT +#define IMSTB_TEXTEDIT_UNDOSTATECOUNT 99 +#endif +#ifndef IMSTB_TEXTEDIT_UNDOCHARCOUNT +#define IMSTB_TEXTEDIT_UNDOCHARCOUNT 999 +#endif +#ifndef IMSTB_TEXTEDIT_CHARTYPE +#define IMSTB_TEXTEDIT_CHARTYPE int +#endif +#ifndef IMSTB_TEXTEDIT_POSITIONTYPE +#define IMSTB_TEXTEDIT_POSITIONTYPE int +#endif + +typedef struct +{ + // private data + IMSTB_TEXTEDIT_POSITIONTYPE where; + IMSTB_TEXTEDIT_POSITIONTYPE insert_length; + IMSTB_TEXTEDIT_POSITIONTYPE delete_length; + int char_storage; +} StbUndoRecord; + +typedef struct +{ + // private data + StbUndoRecord undo_rec [IMSTB_TEXTEDIT_UNDOSTATECOUNT]; + IMSTB_TEXTEDIT_CHARTYPE undo_char[IMSTB_TEXTEDIT_UNDOCHARCOUNT]; + short undo_point, redo_point; + int undo_char_point, redo_char_point; +} StbUndoState; + +typedef struct +{ + ///////////////////// + // + // public data + // + + int cursor; + // position of the text cursor within the string + + int select_start; // selection start point + int select_end; + // selection start and end point in characters; if equal, no selection. + // note that start may be less than or greater than end (e.g. when + // dragging the mouse, start is where the initial click was, and you + // can drag in either direction) + + unsigned char insert_mode; + // each textfield keeps its own insert mode state. to keep an app-wide + // insert mode, copy this value in/out of the app state + + int row_count_per_page; + // page size in number of row. + // this value MUST be set to >0 for pageup or pagedown in multilines documents. + + ///////////////////// + // + // private data + // + unsigned char cursor_at_end_of_line; // not implemented yet + unsigned char initialized; + unsigned char has_preferred_x; + unsigned char single_line; + unsigned char padding1, padding2, padding3; + float preferred_x; // this determines where the cursor up/down tries to seek to along x + StbUndoState undostate; +} STB_TexteditState; + + +//////////////////////////////////////////////////////////////////////// +// +// StbTexteditRow +// +// Result of layout query, used by stb_textedit to determine where +// the text in each row is. + +// result of layout query +typedef struct +{ + float x0,x1; // starting x location, end x location (allows for align=right, etc) + float baseline_y_delta; // position of baseline relative to previous row's baseline + float ymin,ymax; // height of row above and below baseline + int num_chars; +} StbTexteditRow; +#endif //INCLUDE_IMSTB_TEXTEDIT_H + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +//// +//// Implementation mode +//// +//// + + +// implementation isn't include-guarded, since it might have indirectly +// included just the "header" portion +#ifdef IMSTB_TEXTEDIT_IMPLEMENTATION + +#ifndef IMSTB_TEXTEDIT_memmove +#include +#define IMSTB_TEXTEDIT_memmove memmove +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Mouse input handling +// + +// traverse the layout to locate the nearest character to a display position +static int stb_text_locate_coord(IMSTB_TEXTEDIT_STRING *str, float x, float y) +{ + StbTexteditRow r; + int n = STB_TEXTEDIT_STRINGLEN(str); + float base_y = 0, prev_x; + int i=0, k; + + r.x0 = r.x1 = 0; + r.ymin = r.ymax = 0; + r.num_chars = 0; + + // search rows to find one that straddles 'y' + while (i < n) { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (r.num_chars <= 0) + return n; + + if (i==0 && y < base_y + r.ymin) + return 0; + + if (y < base_y + r.ymax) + break; + + i += r.num_chars; + base_y += r.baseline_y_delta; + } + + // below all text, return 'after' last character + if (i >= n) + return n; + + // check if it's before the beginning of the line + if (x < r.x0) + return i; + + // check if it's before the end of the line + if (x < r.x1) { + // search characters in row for one that straddles 'x' + prev_x = r.x0; + for (k=0; k < r.num_chars; ++k) { + float w = STB_TEXTEDIT_GETWIDTH(str, i, k); + if (x < prev_x+w) { + if (x < prev_x+w/2) + return k+i; + else + return k+i+1; + } + prev_x += w; + } + // shouldn't happen, but if it does, fall through to end-of-line case + } + + // if the last character is a newline, return that. otherwise return 'after' the last character + if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE) + return i+r.num_chars-1; + else + return i+r.num_chars; +} + +// API click: on mouse down, move the cursor to the clicked location, and reset the selection +static void stb_textedit_click(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +{ + // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse + // goes off the top or bottom of the text + if( state->single_line ) + { + StbTexteditRow r; + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + y = r.ymin; + } + + state->cursor = stb_text_locate_coord(str, x, y); + state->select_start = state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; +} + +// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location +static void stb_textedit_drag(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y) +{ + int p = 0; + + // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse + // goes off the top or bottom of the text + if( state->single_line ) + { + StbTexteditRow r; + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + y = r.ymin; + } + + if (state->select_start == state->select_end) + state->select_start = state->cursor; + + p = stb_text_locate_coord(str, x, y); + state->cursor = state->select_end = p; +} + +///////////////////////////////////////////////////////////////////////////// +// +// Keyboard input handling +// + +// forward declarations +static void stb_text_undo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state); +static void stb_text_redo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state); +static void stb_text_makeundo_delete(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length); +static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length); +static void stb_text_makeundo_replace(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length); + +typedef struct +{ + float x,y; // position of n'th character + float height; // height of line + int first_char, length; // first char of row, and length + int prev_first; // first char of previous row +} StbFindState; + +// find the x/y location of a character, and remember info about the previous row in +// case we get a move-up event (for page up, we'll have to rescan) +static void stb_textedit_find_charpos(StbFindState *find, IMSTB_TEXTEDIT_STRING *str, int n, int single_line) +{ + StbTexteditRow r; + int prev_start = 0; + int z = STB_TEXTEDIT_STRINGLEN(str); + int i=0, first; + + if (n == z && single_line) { + // special case if it's at the end (may not be needed?) + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + find->y = 0; + find->first_char = 0; + find->length = z; + find->height = r.ymax - r.ymin; + find->x = r.x1; + return; + } + + // search rows to find the one that straddles character n + find->y = 0; + + for(;;) { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (n < i + r.num_chars) + break; + if (i + r.num_chars == z && z > 0 && STB_TEXTEDIT_GETCHAR(str, z - 1) != STB_TEXTEDIT_NEWLINE) // [DEAR IMGUI] special handling for last line + break; // [DEAR IMGUI] + prev_start = i; + i += r.num_chars; + find->y += r.baseline_y_delta; + if (i == z) // [DEAR IMGUI] + { + r.num_chars = 0; // [DEAR IMGUI] + break; // [DEAR IMGUI] + } + } + + find->first_char = first = i; + find->length = r.num_chars; + find->height = r.ymax - r.ymin; + find->prev_first = prev_start; + + // now scan to find xpos + find->x = r.x0; + for (i=0; first+i < n; ++i) + find->x += STB_TEXTEDIT_GETWIDTH(str, first, i); +} + +#define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end) + +// make the selection/cursor state valid if client altered the string +static void stb_textedit_clamp(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + int n = STB_TEXTEDIT_STRINGLEN(str); + if (STB_TEXT_HAS_SELECTION(state)) { + if (state->select_start > n) state->select_start = n; + if (state->select_end > n) state->select_end = n; + // if clamping forced them to be equal, move the cursor to match + if (state->select_start == state->select_end) + state->cursor = state->select_start; + } + if (state->cursor > n) state->cursor = n; +} + +// delete characters while updating undo +static void stb_textedit_delete(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len) +{ + stb_text_makeundo_delete(str, state, where, len); + STB_TEXTEDIT_DELETECHARS(str, where, len); + state->has_preferred_x = 0; +} + +// delete the section +static void stb_textedit_delete_selection(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + stb_textedit_clamp(str, state); + if (STB_TEXT_HAS_SELECTION(state)) { + if (state->select_start < state->select_end) { + stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start); + state->select_end = state->cursor = state->select_start; + } else { + stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end); + state->select_start = state->cursor = state->select_end; + } + state->has_preferred_x = 0; + } +} + +// canoncialize the selection so start <= end +static void stb_textedit_sortselection(STB_TexteditState *state) +{ + if (state->select_end < state->select_start) { + int temp = state->select_end; + state->select_end = state->select_start; + state->select_start = temp; + } +} + +// move cursor to first character of selection +static void stb_textedit_move_to_first(STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_sortselection(state); + state->cursor = state->select_start; + state->select_end = state->select_start; + state->has_preferred_x = 0; + } +} + +// move cursor to last character of selection +static void stb_textedit_move_to_last(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_sortselection(state); + stb_textedit_clamp(str, state); + state->cursor = state->select_end; + state->select_start = state->select_end; + state->has_preferred_x = 0; + } +} + +#ifdef STB_TEXTEDIT_IS_SPACE +static int is_word_boundary( IMSTB_TEXTEDIT_STRING *str, int idx ) +{ + return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1; +} + +#ifndef STB_TEXTEDIT_MOVEWORDLEFT +static int stb_textedit_move_to_word_previous( IMSTB_TEXTEDIT_STRING *str, int c ) +{ + --c; // always move at least one character + while( c >= 0 && !is_word_boundary( str, c ) ) + --c; + + if( c < 0 ) + c = 0; + + return c; +} +#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous +#endif + +#ifndef STB_TEXTEDIT_MOVEWORDRIGHT +static int stb_textedit_move_to_word_next( IMSTB_TEXTEDIT_STRING *str, int c ) +{ + const int len = STB_TEXTEDIT_STRINGLEN(str); + ++c; // always move at least one character + while( c < len && !is_word_boundary( str, c ) ) + ++c; + + if( c > len ) + c = len; + + return c; +} +#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next +#endif + +#endif + +// update selection and cursor to match each other +static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state) +{ + if (!STB_TEXT_HAS_SELECTION(state)) + state->select_start = state->select_end = state->cursor; + else + state->cursor = state->select_end; +} + +// API cut: delete selection +static int stb_textedit_cut(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + if (STB_TEXT_HAS_SELECTION(state)) { + stb_textedit_delete_selection(str,state); // implicitly clamps + state->has_preferred_x = 0; + return 1; + } + return 0; +} + +// API paste: replace existing selection with passed-in text +static int stb_textedit_paste_internal(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, IMSTB_TEXTEDIT_CHARTYPE *text, int len) +{ + // if there's a selection, the paste should delete it + stb_textedit_clamp(str, state); + stb_textedit_delete_selection(str,state); + // try to insert the characters + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) { + stb_text_makeundo_insert(state, state->cursor, len); + state->cursor += len; + state->has_preferred_x = 0; + return 1; + } + // note: paste failure will leave deleted selection, may be restored with an undo (see https://github.com/nothings/stb/issues/734 for details) + return 0; +} + +#ifndef STB_TEXTEDIT_KEYTYPE +#define STB_TEXTEDIT_KEYTYPE int +#endif + +// API key: process a keyboard input +static void stb_textedit_key(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key) +{ +retry: + switch (key) { + default: { + int c = STB_TEXTEDIT_KEYTOTEXT(key); + if (c > 0) { + IMSTB_TEXTEDIT_CHARTYPE ch = (IMSTB_TEXTEDIT_CHARTYPE) c; + + // can't add newline in single-line mode + if (c == '\n' && state->single_line) + break; + + if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) { + stb_text_makeundo_replace(str, state, state->cursor, 1, 1); + STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1); + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { + ++state->cursor; + state->has_preferred_x = 0; + } + } else { + stb_textedit_delete_selection(str,state); // implicitly clamps + if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) { + stb_text_makeundo_insert(state, state->cursor, 1); + ++state->cursor; + state->has_preferred_x = 0; + } + } + } + break; + } + +#ifdef STB_TEXTEDIT_K_INSERT + case STB_TEXTEDIT_K_INSERT: + state->insert_mode = !state->insert_mode; + break; +#endif + + case STB_TEXTEDIT_K_UNDO: + stb_text_undo(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_REDO: + stb_text_redo(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_LEFT: + // if currently there's a selection, move cursor to start of selection + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + else + if (state->cursor > 0) + --state->cursor; + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_RIGHT: + // if currently there's a selection, move cursor to end of selection + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + else + ++state->cursor; + stb_textedit_clamp(str, state); + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT: + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + // move selection left + if (state->select_end > 0) + --state->select_end; + state->cursor = state->select_end; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_MOVEWORDLEFT + case STB_TEXTEDIT_K_WORDLEFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + else { + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); + stb_textedit_clamp( str, state ); + } + break; + + case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT: + if( !STB_TEXT_HAS_SELECTION( state ) ) + stb_textedit_prep_selection_at_cursor(state); + + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor); + state->select_end = state->cursor; + + stb_textedit_clamp( str, state ); + break; +#endif + +#ifdef STB_TEXTEDIT_MOVEWORDRIGHT + case STB_TEXTEDIT_K_WORDRIGHT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + else { + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); + stb_textedit_clamp( str, state ); + } + break; + + case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT: + if( !STB_TEXT_HAS_SELECTION( state ) ) + stb_textedit_prep_selection_at_cursor(state); + + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor); + state->select_end = state->cursor; + + stb_textedit_clamp( str, state ); + break; +#endif + + case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + // move selection right + ++state->select_end; + stb_textedit_clamp(str, state); + state->cursor = state->select_end; + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_DOWN: + case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT: + case STB_TEXTEDIT_K_PGDOWN: + case STB_TEXTEDIT_K_PGDOWN | STB_TEXTEDIT_K_SHIFT: { + StbFindState find; + StbTexteditRow row; + int i, j, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; + int is_page = (key & ~STB_TEXTEDIT_K_SHIFT) == STB_TEXTEDIT_K_PGDOWN; + int row_count = is_page ? state->row_count_per_page : 1; + + if (!is_page && state->single_line) { + // on windows, up&down in single-line behave like left&right + key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT); + goto retry; + } + + if (sel) + stb_textedit_prep_selection_at_cursor(state); + else if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + + // compute current position of cursor point + stb_textedit_clamp(str, state); + stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); + + for (j = 0; j < row_count; ++j) { + float x, goal_x = state->has_preferred_x ? state->preferred_x : find.x; + int start = find.first_char + find.length; + + if (find.length == 0) + break; + + // [DEAR IMGUI] + // going down while being on the last line shouldn't bring us to that line end + if (STB_TEXTEDIT_GETCHAR(str, find.first_char + find.length - 1) != STB_TEXTEDIT_NEWLINE) + break; + + // now find character position down a row + state->cursor = start; + STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); + x = row.x0; + for (i=0; i < row.num_chars; ++i) { + float dx = STB_TEXTEDIT_GETWIDTH(str, start, i); + #ifdef IMSTB_TEXTEDIT_GETWIDTH_NEWLINE + if (dx == IMSTB_TEXTEDIT_GETWIDTH_NEWLINE) + break; + #endif + x += dx; + if (x > goal_x) + break; + ++state->cursor; + } + stb_textedit_clamp(str, state); + + state->has_preferred_x = 1; + state->preferred_x = goal_x; + + if (sel) + state->select_end = state->cursor; + + // go to next line + find.first_char = find.first_char + find.length; + find.length = row.num_chars; + } + break; + } + + case STB_TEXTEDIT_K_UP: + case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: + case STB_TEXTEDIT_K_PGUP: + case STB_TEXTEDIT_K_PGUP | STB_TEXTEDIT_K_SHIFT: { + StbFindState find; + StbTexteditRow row; + int i, j, prev_scan, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0; + int is_page = (key & ~STB_TEXTEDIT_K_SHIFT) == STB_TEXTEDIT_K_PGUP; + int row_count = is_page ? state->row_count_per_page : 1; + + if (!is_page && state->single_line) { + // on windows, up&down become left&right + key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT); + goto retry; + } + + if (sel) + stb_textedit_prep_selection_at_cursor(state); + else if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_first(state); + + // compute current position of cursor point + stb_textedit_clamp(str, state); + stb_textedit_find_charpos(&find, str, state->cursor, state->single_line); + + for (j = 0; j < row_count; ++j) { + float x, goal_x = state->has_preferred_x ? state->preferred_x : find.x; + + // can only go up if there's a previous row + if (find.prev_first == find.first_char) + break; + + // now find character position up a row + state->cursor = find.prev_first; + STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor); + x = row.x0; + for (i=0; i < row.num_chars; ++i) { + float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i); + #ifdef IMSTB_TEXTEDIT_GETWIDTH_NEWLINE + if (dx == IMSTB_TEXTEDIT_GETWIDTH_NEWLINE) + break; + #endif + x += dx; + if (x > goal_x) + break; + ++state->cursor; + } + stb_textedit_clamp(str, state); + + state->has_preferred_x = 1; + state->preferred_x = goal_x; + + if (sel) + state->select_end = state->cursor; + + // go to previous line + // (we need to scan previous line the hard way. maybe we could expose this as a new API function?) + prev_scan = find.prev_first > 0 ? find.prev_first - 1 : 0; + while (prev_scan > 0 && STB_TEXTEDIT_GETCHAR(str, prev_scan - 1) != STB_TEXTEDIT_NEWLINE) + --prev_scan; + find.first_char = find.prev_first; + find.prev_first = prev_scan; + } + break; + } + + case STB_TEXTEDIT_K_DELETE: + case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_delete_selection(str, state); + else { + int n = STB_TEXTEDIT_STRINGLEN(str); + if (state->cursor < n) + stb_textedit_delete(str, state, state->cursor, 1); + } + state->has_preferred_x = 0; + break; + + case STB_TEXTEDIT_K_BACKSPACE: + case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_delete_selection(str, state); + else { + stb_textedit_clamp(str, state); + if (state->cursor > 0) { + stb_textedit_delete(str, state, state->cursor-1, 1); + --state->cursor; + } + } + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTSTART2 + case STB_TEXTEDIT_K_TEXTSTART2: +#endif + case STB_TEXTEDIT_K_TEXTSTART: + state->cursor = state->select_start = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTEND2 + case STB_TEXTEDIT_K_TEXTEND2: +#endif + case STB_TEXTEDIT_K_TEXTEND: + state->cursor = STB_TEXTEDIT_STRINGLEN(str); + state->select_start = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTSTART2 + case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + state->cursor = state->select_end = 0; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_TEXTEND2 + case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT: + stb_textedit_prep_selection_at_cursor(state); + state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str); + state->has_preferred_x = 0; + break; + + +#ifdef STB_TEXTEDIT_K_LINESTART2 + case STB_TEXTEDIT_K_LINESTART2: +#endif + case STB_TEXTEDIT_K_LINESTART: + stb_textedit_clamp(str, state); + stb_textedit_move_to_first(state); + if (state->single_line) + state->cursor = 0; + else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) + --state->cursor; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_LINEEND2 + case STB_TEXTEDIT_K_LINEEND2: +#endif + case STB_TEXTEDIT_K_LINEEND: { + int n = STB_TEXTEDIT_STRINGLEN(str); + stb_textedit_clamp(str, state); + stb_textedit_move_to_first(state); + if (state->single_line) + state->cursor = n; + else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) + ++state->cursor; + state->has_preferred_x = 0; + break; + } + +#ifdef STB_TEXTEDIT_K_LINESTART2 + case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + if (state->single_line) + state->cursor = 0; + else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) + --state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; + break; + +#ifdef STB_TEXTEDIT_K_LINEEND2 + case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT: +#endif + case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: { + int n = STB_TEXTEDIT_STRINGLEN(str); + stb_textedit_clamp(str, state); + stb_textedit_prep_selection_at_cursor(state); + if (state->single_line) + state->cursor = n; + else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE) + ++state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; + break; + } + } +} + +///////////////////////////////////////////////////////////////////////////// +// +// Undo processing +// +// @OPTIMIZE: the undo/redo buffer should be circular + +static void stb_textedit_flush_redo(StbUndoState *state) +{ + state->redo_point = IMSTB_TEXTEDIT_UNDOSTATECOUNT; + state->redo_char_point = IMSTB_TEXTEDIT_UNDOCHARCOUNT; +} + +// discard the oldest entry in the undo list +static void stb_textedit_discard_undo(StbUndoState *state) +{ + if (state->undo_point > 0) { + // if the 0th undo state has characters, clean those up + if (state->undo_rec[0].char_storage >= 0) { + int n = state->undo_rec[0].insert_length, i; + // delete n characters from all other records + state->undo_char_point -= n; + IMSTB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(IMSTB_TEXTEDIT_CHARTYPE))); + for (i=0; i < state->undo_point; ++i) + if (state->undo_rec[i].char_storage >= 0) + state->undo_rec[i].char_storage -= n; // @OPTIMIZE: get rid of char_storage and infer it + } + --state->undo_point; + IMSTB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0]))); + } +} + +// discard the oldest entry in the redo list--it's bad if this +// ever happens, but because undo & redo have to store the actual +// characters in different cases, the redo character buffer can +// fill up even though the undo buffer didn't +static void stb_textedit_discard_redo(StbUndoState *state) +{ + int k = IMSTB_TEXTEDIT_UNDOSTATECOUNT-1; + + if (state->redo_point <= k) { + // if the k'th undo state has characters, clean those up + if (state->undo_rec[k].char_storage >= 0) { + int n = state->undo_rec[k].insert_length, i; + // move the remaining redo character data to the end of the buffer + state->redo_char_point += n; + IMSTB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((IMSTB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(IMSTB_TEXTEDIT_CHARTYPE))); + // adjust the position of all the other records to account for above memmove + for (i=state->redo_point; i < k; ++i) + if (state->undo_rec[i].char_storage >= 0) + state->undo_rec[i].char_storage += n; + } + // now move all the redo records towards the end of the buffer; the first one is at 'redo_point' + // [DEAR IMGUI] + size_t move_size = (size_t)((IMSTB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point - 1) * sizeof(state->undo_rec[0])); + const char* buf_begin = (char*)state->undo_rec; (void)buf_begin; + const char* buf_end = (char*)state->undo_rec + sizeof(state->undo_rec); (void)buf_end; + IM_ASSERT(((char*)(state->undo_rec + state->redo_point)) >= buf_begin); + IM_ASSERT(((char*)(state->undo_rec + state->redo_point + 1) + move_size) <= buf_end); + IMSTB_TEXTEDIT_memmove(state->undo_rec + state->redo_point+1, state->undo_rec + state->redo_point, move_size); + + // now move redo_point to point to the new one + ++state->redo_point; + } +} + +static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars) +{ + // any time we create a new undo record, we discard redo + stb_textedit_flush_redo(state); + + // if we have no free records, we have to make room, by sliding the + // existing records down + if (state->undo_point == IMSTB_TEXTEDIT_UNDOSTATECOUNT) + stb_textedit_discard_undo(state); + + // if the characters to store won't possibly fit in the buffer, we can't undo + if (numchars > IMSTB_TEXTEDIT_UNDOCHARCOUNT) { + state->undo_point = 0; + state->undo_char_point = 0; + return NULL; + } + + // if we don't have enough free characters in the buffer, we have to make room + while (state->undo_char_point + numchars > IMSTB_TEXTEDIT_UNDOCHARCOUNT) + stb_textedit_discard_undo(state); + + return &state->undo_rec[state->undo_point++]; +} + +static IMSTB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len) +{ + StbUndoRecord *r = stb_text_create_undo_record(state, insert_len); + if (r == NULL) + return NULL; + + r->where = pos; + r->insert_length = (IMSTB_TEXTEDIT_POSITIONTYPE) insert_len; + r->delete_length = (IMSTB_TEXTEDIT_POSITIONTYPE) delete_len; + + if (insert_len == 0) { + r->char_storage = -1; + return NULL; + } else { + r->char_storage = state->undo_char_point; + state->undo_char_point += insert_len; + return &state->undo_char[r->char_storage]; + } +} + +static void stb_text_undo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + StbUndoState *s = &state->undostate; + StbUndoRecord u, *r; + if (s->undo_point == 0) + return; + + // we need to do two things: apply the undo record, and create a redo record + u = s->undo_rec[s->undo_point-1]; + r = &s->undo_rec[s->redo_point-1]; + r->char_storage = -1; + + r->insert_length = u.delete_length; + r->delete_length = u.insert_length; + r->where = u.where; + + if (u.delete_length) { + // if the undo record says to delete characters, then the redo record will + // need to re-insert the characters that get deleted, so we need to store + // them. + + // there are three cases: + // there's enough room to store the characters + // characters stored for *redoing* don't leave room for redo + // characters stored for *undoing* don't leave room for redo + // if the last is true, we have to bail + + if (s->undo_char_point + u.delete_length >= IMSTB_TEXTEDIT_UNDOCHARCOUNT) { + // the undo records take up too much character space; there's no space to store the redo characters + r->insert_length = 0; + } else { + int i; + + // there's definitely room to store the characters eventually + while (s->undo_char_point + u.delete_length > s->redo_char_point) { + // should never happen: + if (s->redo_point == IMSTB_TEXTEDIT_UNDOSTATECOUNT) + return; + // there's currently not enough room, so discard a redo record + stb_textedit_discard_redo(s); + } + r = &s->undo_rec[s->redo_point-1]; + + r->char_storage = s->redo_char_point - u.delete_length; + s->redo_char_point = s->redo_char_point - u.delete_length; + + // now save the characters + for (i=0; i < u.delete_length; ++i) + s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i); + } + + // now we can carry out the deletion + STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length); + } + + // check type of recorded action: + if (u.insert_length) { + // easy case: was a deletion, so we need to insert n characters + STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length); + s->undo_char_point -= u.insert_length; + } + + state->cursor = u.where + u.insert_length; + + s->undo_point--; + s->redo_point--; +} + +static void stb_text_redo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state) +{ + StbUndoState *s = &state->undostate; + StbUndoRecord *u, r; + if (s->redo_point == IMSTB_TEXTEDIT_UNDOSTATECOUNT) + return; + + // we need to do two things: apply the redo record, and create an undo record + u = &s->undo_rec[s->undo_point]; + r = s->undo_rec[s->redo_point]; + + // we KNOW there must be room for the undo record, because the redo record + // was derived from an undo record + + u->delete_length = r.insert_length; + u->insert_length = r.delete_length; + u->where = r.where; + u->char_storage = -1; + + if (r.delete_length) { + // the redo record requires us to delete characters, so the undo record + // needs to store the characters + + if (s->undo_char_point + u->insert_length > s->redo_char_point) { + u->insert_length = 0; + u->delete_length = 0; + } else { + int i; + u->char_storage = s->undo_char_point; + s->undo_char_point = s->undo_char_point + u->insert_length; + + // now save the characters + for (i=0; i < u->insert_length; ++i) + s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i); + } + + STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length); + } + + if (r.insert_length) { + // easy case: need to insert n characters + STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length); + s->redo_char_point += r.insert_length; + } + + state->cursor = r.where + r.insert_length; + + s->undo_point++; + s->redo_point++; +} + +static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length) +{ + stb_text_createundo(&state->undostate, where, 0, length); +} + +static void stb_text_makeundo_delete(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length) +{ + int i; + IMSTB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0); + if (p) { + for (i=0; i < length; ++i) + p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); + } +} + +static void stb_text_makeundo_replace(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length) +{ + int i; + IMSTB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length); + if (p) { + for (i=0; i < old_length; ++i) + p[i] = STB_TEXTEDIT_GETCHAR(str, where+i); + } +} + +// reset the state to default +static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line) +{ + state->undostate.undo_point = 0; + state->undostate.undo_char_point = 0; + state->undostate.redo_point = IMSTB_TEXTEDIT_UNDOSTATECOUNT; + state->undostate.redo_char_point = IMSTB_TEXTEDIT_UNDOCHARCOUNT; + state->select_end = state->select_start = 0; + state->cursor = 0; + state->has_preferred_x = 0; + state->preferred_x = 0; + state->cursor_at_end_of_line = 0; + state->initialized = 1; + state->single_line = (unsigned char) is_single_line; + state->insert_mode = 0; + state->row_count_per_page = 0; +} + +// API initialize +static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line) +{ + stb_textedit_clear_state(state, is_single_line); +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" +#endif + +static int stb_textedit_paste(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState *state, IMSTB_TEXTEDIT_CHARTYPE const *ctext, int len) +{ + return stb_textedit_paste_internal(str, state, (IMSTB_TEXTEDIT_CHARTYPE *) ctext, len); +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#endif//IMSTB_TEXTEDIT_IMPLEMENTATION + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ diff --git a/include/imgui/imstb_truetype.h b/include/imgui/imstb_truetype.h new file mode 100644 index 00000000..63a8bd75 --- /dev/null +++ b/include/imgui/imstb_truetype.h @@ -0,0 +1,5085 @@ +// [DEAR IMGUI] +// This is a slightly modified version of stb_truetype.h 1.26. +// Mostly fixing for compiler and static analyzer warnings. +// Grep for [DEAR IMGUI] to find the changes. + +// stb_truetype.h - v1.26 - public domain +// authored from 2009-2021 by Sean Barrett / RAD Game Tools +// +// ======================================================================= +// +// NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES +// +// This library does no range checking of the offsets found in the file, +// meaning an attacker can use it to read arbitrary memory. +// +// ======================================================================= +// +// This library processes TrueType files: +// parse files +// extract glyph metrics +// extract glyph shapes +// render glyphs to one-channel bitmaps with antialiasing (box filter) +// render glyphs to one-channel SDF bitmaps (signed-distance field/function) +// +// Todo: +// non-MS cmaps +// crashproof on bad data +// hinting? (no longer patented) +// cleartype-style AA? +// optimize: use simple memory allocator for intermediates +// optimize: build edge-list directly from curves +// optimize: rasterize directly from curves? +// +// ADDITIONAL CONTRIBUTORS +// +// Mikko Mononen: compound shape support, more cmap formats +// Tor Andersson: kerning, subpixel rendering +// Dougall Johnson: OpenType / Type 2 font handling +// Daniel Ribeiro Maciel: basic GPOS-based kerning +// +// Misc other: +// Ryan Gordon +// Simon Glass +// github:IntellectualKitty +// Imanol Celaya +// Daniel Ribeiro Maciel +// +// Bug/warning reports/fixes: +// "Zer" on mollyrocket Fabian "ryg" Giesen github:NiLuJe +// Cass Everitt Martins Mozeiko github:aloucks +// stoiko (Haemimont Games) Cap Petschulat github:oyvindjam +// Brian Hook Omar Cornut github:vassvik +// Walter van Niftrik Ryan Griege +// David Gow Peter LaValle +// David Given Sergey Popov +// Ivan-Assen Ivanov Giumo X. Clanjor +// Anthony Pesch Higor Euripedes +// Johan Duparc Thomas Fields +// Hou Qiming Derek Vinyard +// Rob Loach Cort Stratton +// Kenney Phillis Jr. Brian Costabile +// Ken Voskuil (kaesve) +// +// VERSION HISTORY +// +// 1.26 (2021-08-28) fix broken rasterizer +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning +// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() +// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod +// 1.18 (2018-01-29) add missing function +// 1.17 (2017-07-23) make more arguments const; doc fix +// 1.16 (2017-07-12) SDF support +// 1.15 (2017-03-03) make more arguments const +// 1.14 (2017-01-16) num-fonts-in-TTC function +// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// variant PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// +// Full history can be found at the end of this file. +// +// LICENSE +// +// See end of file for license information. +// +// USAGE +// +// Include this file in whatever places need to refer to it. In ONE C/C++ +// file, write: +// #define STB_TRUETYPE_IMPLEMENTATION +// before the #include of this file. This expands out the actual +// implementation into that C/C++ file. +// +// To make the implementation private to the file that generates the implementation, +// #define STBTT_STATIC +// +// Simple 3D API (don't ship this, but it's fine for tools and quick start) +// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture +// stbtt_GetBakedQuad() -- compute quad to draw for a given char +// +// Improved 3D API (more shippable): +// #include "stb_rect_pack.h" -- optional, but you really want it +// stbtt_PackBegin() +// stbtt_PackSetOversampling() -- for improved quality on small fonts +// stbtt_PackFontRanges() -- pack and renders +// stbtt_PackEnd() +// stbtt_GetPackedQuad() +// +// "Load" a font file from a memory buffer (you have to keep the buffer loaded) +// stbtt_InitFont() +// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections +// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections +// +// Renderer a unicode codepoint to a bitmap +// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap +// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide +// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be +// +// Character advance/positioning +// stbtt_GetCodepointHMetrics() +// stbtt_GetFontVMetrics() +// stbtt_GetFontVMetricsOS2() +// stbtt_GetCodepointKernAdvance() +// +// Starting with version 1.06, the rasterizer was replaced with a new, +// faster and generally-more-precise rasterizer. The new rasterizer more +// accurately measures pixel coverage for anti-aliasing, except in the case +// where multiple shapes overlap, in which case it overestimates the AA pixel +// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If +// this turns out to be a problem, you can re-enable the old rasterizer with +// #define STBTT_RASTERIZER_VERSION 1 +// which will incur about a 15% speed hit. +// +// ADDITIONAL DOCUMENTATION +// +// Immediately after this block comment are a series of sample programs. +// +// After the sample programs is the "header file" section. This section +// includes documentation for each API function. +// +// Some important concepts to understand to use this library: +// +// Codepoint +// Characters are defined by unicode codepoints, e.g. 65 is +// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is +// the hiragana for "ma". +// +// Glyph +// A visual character shape (every codepoint is rendered as +// some glyph) +// +// Glyph index +// A font-specific integer ID representing a glyph +// +// Baseline +// Glyph shapes are defined relative to a baseline, which is the +// bottom of uppercase characters. Characters extend both above +// and below the baseline. +// +// Current Point +// As you draw text to the screen, you keep track of a "current point" +// which is the origin of each character. The current point's vertical +// position is the baseline. Even "baked fonts" use this model. +// +// Vertical Font Metrics +// The vertical qualities of the font, used to vertically position +// and space the characters. See docs for stbtt_GetFontVMetrics. +// +// Font Size in Pixels or Points +// The preferred interface for specifying font sizes in stb_truetype +// is to specify how tall the font's vertical extent should be in pixels. +// If that sounds good enough, skip the next paragraph. +// +// Most font APIs instead use "points", which are a common typographic +// measurement for describing font size, defined as 72 points per inch. +// stb_truetype provides a point API for compatibility. However, true +// "per inch" conventions don't make much sense on computer displays +// since different monitors have different number of pixels per +// inch. For example, Windows traditionally uses a convention that +// there are 96 pixels per inch, thus making 'inch' measurements have +// nothing to do with inches, and thus effectively defining a point to +// be 1.333 pixels. Additionally, the TrueType font data provides +// an explicit scale factor to scale a given font's glyphs to points, +// but the author has observed that this scale factor is often wrong +// for non-commercial fonts, thus making fonts scaled in points +// according to the TrueType spec incoherently sized in practice. +// +// DETAILED USAGE: +// +// Scale: +// Select how high you want the font to be, in points or pixels. +// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute +// a scale factor SF that will be used by all other functions. +// +// Baseline: +// You need to select a y-coordinate that is the baseline of where +// your text will appear. Call GetFontBoundingBox to get the baseline-relative +// bounding box for all characters. SF*-y0 will be the distance in pixels +// that the worst-case character could extend above the baseline, so if +// you want the top edge of characters to appear at the top of the +// screen where y=0, then you would set the baseline to SF*-y0. +// +// Current point: +// Set the current point where the first character will appear. The +// first character could extend left of the current point; this is font +// dependent. You can either choose a current point that is the leftmost +// point and hope, or add some padding, or check the bounding box or +// left-side-bearing of the first character to be displayed and set +// the current point based on that. +// +// Displaying a character: +// Compute the bounding box of the character. It will contain signed values +// relative to . I.e. if it returns x0,y0,x1,y1, +// then the character should be displayed in the rectangle from +// to = 32 && *text < 128) { + stbtt_aligned_quad q; + stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 + glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y0); + glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y0); + glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y1); + glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y1); + } + ++text; + } + glEnd(); +} +#endif +// +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program (this compiles): get a single bitmap, print as ASCII art +// +#if 0 +#include +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +char ttf_buffer[1<<25]; + +int main(int argc, char **argv) +{ + stbtt_fontinfo font; + unsigned char *bitmap; + int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); + + fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); + + stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); + bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); + + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) + putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); + putchar('\n'); + } + return 0; +} +#endif +// +// Output: +// +// .ii. +// @@@@@@. +// V@Mio@@o +// :i. V@V +// :oM@@M +// :@@@MM@M +// @@o o@M +// :@@. M@M +// @@@o@@@@ +// :M@@V:@@. +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program: print "Hello World!" banner, with bugs +// +#if 0 +char buffer[24<<20]; +unsigned char screen[20][79]; + +int main(int arg, char **argv) +{ + stbtt_fontinfo font; + int i,j,ascent,baseline,ch=0; + float scale, xpos=2; // leave a little padding in case the character extends left + char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness + + fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); + stbtt_InitFont(&font, buffer, 0); + + scale = stbtt_ScaleForPixelHeight(&font, 15); + stbtt_GetFontVMetrics(&font, &ascent,0,0); + baseline = (int) (ascent*scale); + + while (text[ch]) { + int advance,lsb,x0,y0,x1,y1; + float x_shift = xpos - (float) floor(xpos); + stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); + stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); + stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); + // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong + // because this API is really for baking character bitmaps into textures. if you want to render + // a sequence of characters, you really need to render each bitmap to a temp buffer, then + // "alpha blend" that into the working buffer + xpos += (advance * scale); + if (text[ch+1]) + xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); + ++ch; + } + + for (j=0; j < 20; ++j) { + for (i=0; i < 78; ++i) + putchar(" .:ioVM@"[screen[j][i]>>5]); + putchar('\n'); + } + + return 0; +} +#endif + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// INTEGRATION WITH YOUR CODEBASE +//// +//// The following sections allow you to supply alternate definitions +//// of C library functions used by stb_truetype, e.g. if you don't +//// link with the C runtime library. + +#ifdef STB_TRUETYPE_IMPLEMENTATION + // #define your own (u)stbtt_int8/16/32 before including to override this + #ifndef stbtt_uint8 + typedef unsigned char stbtt_uint8; + typedef signed char stbtt_int8; + typedef unsigned short stbtt_uint16; + typedef signed short stbtt_int16; + typedef unsigned int stbtt_uint32; + typedef signed int stbtt_int32; + #endif + + typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; + typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; + + // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h + #ifndef STBTT_ifloor + #include + #define STBTT_ifloor(x) ((int) floor(x)) + #define STBTT_iceil(x) ((int) ceil(x)) + #endif + + #ifndef STBTT_sqrt + #include + #define STBTT_sqrt(x) sqrt(x) + #define STBTT_pow(x,y) pow(x,y) + #endif + + #ifndef STBTT_fmod + #include + #define STBTT_fmod(x,y) fmod(x,y) + #endif + + #ifndef STBTT_cos + #include + #define STBTT_cos(x) cos(x) + #define STBTT_acos(x) acos(x) + #endif + + #ifndef STBTT_fabs + #include + #define STBTT_fabs(x) fabs(x) + #endif + + // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h + #ifndef STBTT_malloc + #include + #define STBTT_malloc(x,u) ((void)(u),malloc(x)) + #define STBTT_free(x,u) ((void)(u),free(x)) + #endif + + #ifndef STBTT_assert + #include + #define STBTT_assert(x) assert(x) + #endif + + #ifndef STBTT_strlen + #include + #define STBTT_strlen(x) strlen(x) + #endif + + #ifndef STBTT_memcpy + #include + #define STBTT_memcpy memcpy + #define STBTT_memset memset + #endif +#endif + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// INTERFACE +//// +//// + +#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ +#define __STB_INCLUDE_STB_TRUETYPE_H__ + +#ifdef STBTT_STATIC +#define STBTT_DEF static +#else +#define STBTT_DEF extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// private structure +typedef struct +{ + unsigned char *data; + int cursor; + int size; +} stbtt__buf; + +////////////////////////////////////////////////////////////////////////////// +// +// TEXTURE BAKING API +// +// If you use this API, you only have to call two functions ever. +// + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; +} stbtt_bakedchar; + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata); // you allocate this, it's num_chars long +// if return is positive, the first unused row of the bitmap +// if return is negative, returns the negative of the number of characters that fit +// if return is 0, no characters fit and no rows were used +// This uses a very crappy packing. + +typedef struct +{ + float x0,y0,s0,t0; // top-left + float x1,y1,s1,t1; // bottom-right +} stbtt_aligned_quad; + +STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier +// Call GetBakedQuad with char_index = 'character - first_char', and it +// creates the quad you need to draw and advances the current position. +// +// The coordinate system used assumes y increases downwards. +// +// Characters will extend both above and below the current position; +// see discussion of "BASELINE" above. +// +// It's inefficient; you might want to c&p it and optimize it. + +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap); +// Query the font vertical metrics without having to create a font first. + + +////////////////////////////////////////////////////////////////////////////// +// +// NEW TEXTURE BAKING API +// +// This provides options for packing multiple fonts into one atlas, not +// perfectly but better than nothing. + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; + float xoff2,yoff2; +} stbtt_packedchar; + +typedef struct stbtt_pack_context stbtt_pack_context; +typedef struct stbtt_fontinfo stbtt_fontinfo; +#ifndef STB_RECT_PACK_VERSION +typedef struct stbrp_rect stbrp_rect; +#endif + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context); +// Initializes a packing context stored in the passed-in stbtt_pack_context. +// Future calls using this context will pack characters into the bitmap passed +// in here: a 1-channel bitmap that is width * height. stride_in_bytes is +// the distance from one row to the next (or 0 to mean they are packed tightly +// together). "padding" is the amount of padding to leave between each +// character (normally you want '1' for bitmaps you'll use as textures with +// bilinear filtering). +// +// Returns 0 on failure, 1 on success. + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); +// Cleans up the packing context and frees all memory. + +#define STBTT_POINT_SIZE(x) (-(x)) + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, + int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); +// Creates character bitmaps from the font_index'th font found in fontdata (use +// font_index=0 if you don't know what that is). It creates num_chars_in_range +// bitmaps for characters with unicode values starting at first_unicode_char_in_range +// and increasing. Data for how to render them is stored in chardata_for_range; +// pass these to stbtt_GetPackedQuad to get back renderable quads. +// +// font_size is the full height of the character from ascender to descender, +// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed +// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE() +// and pass that result as 'font_size': +// ..., 20 , ... // font max minus min y is 20 pixels tall +// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall + +typedef struct +{ + float font_size; + int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint + int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints + int num_chars; + stbtt_packedchar *chardata_for_range; // output + unsigned char h_oversample, v_oversample; // don't set these, they're used internally +} stbtt_pack_range; + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges); +// Creates character bitmaps from multiple ranges of characters stored in +// ranges. This will usually create a better-packed bitmap than multiple +// calls to stbtt_PackFontRange. Note that you can call this multiple +// times within a single PackBegin/PackEnd. + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample); +// Oversampling a font increases the quality by allowing higher-quality subpixel +// positioning, and is especially valuable at smaller text sizes. +// +// This function sets the amount of oversampling for all following calls to +// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given +// pack context. The default (no oversampling) is achieved by h_oversample=1 +// and v_oversample=1. The total number of pixels required is +// h_oversample*v_oversample larger than the default; for example, 2x2 +// oversampling requires 4x the storage of 1x1. For best results, render +// oversampled textures with bilinear filtering. Look at the readme in +// stb/tests/oversample for information about oversampled fonts +// +// To use with PackFontRangesGather etc., you must set it before calls +// call to PackFontRangesGatherRects. + +STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip); +// If skip != 0, this tells stb_truetype to skip any codepoints for which +// there is no corresponding glyph. If skip=0, which is the default, then +// codepoints without a glyph recived the font's "missing character" glyph, +// typically an empty box by convention. + +STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int align_to_integer); + +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects); +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +// Calling these functions in sequence is roughly equivalent to calling +// stbtt_PackFontRanges(). If you more control over the packing of multiple +// fonts, or if you want to pack custom data into a font texture, take a look +// at the source to of stbtt_PackFontRanges() and create a custom version +// using these functions, e.g. call GatherRects multiple times, +// building up a single array of rects, then call PackRects once, +// then call RenderIntoRects repeatedly. This may result in a +// better packing than calling PackFontRanges multiple times +// (or it may not). + +// this is an opaque structure that you shouldn't mess with which holds +// all the context needed from PackBegin to PackEnd. +struct stbtt_pack_context { + void *user_allocator_context; + void *pack_info; + int width; + int height; + int stride_in_bytes; + int padding; + int skip_missing; + unsigned int h_oversample, v_oversample; + unsigned char *pixels; + void *nodes; +}; + +////////////////////////////////////////////////////////////////////////////// +// +// FONT LOADING +// +// + +STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data); +// This function will determine the number of fonts in a font file. TrueType +// collection (.ttc) files may contain multiple fonts, while TrueType font +// (.ttf) files only contain one font. The number of fonts can be used for +// indexing with the previous function where the index is between zero and one +// less than the total fonts. If an error occurs, -1 is returned. + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); +// Each .ttf/.ttc file may have more than one font. Each font has a sequential +// index number starting from 0. Call this function to get the font offset for +// a given index; it returns -1 if the index is out of range. A regular .ttf +// file will only define one font and it always be at offset 0, so it will +// return '0' for index 0, and -1 for all other indices. + +// The following structure is defined publicly so you can declare one on +// the stack or as a global or etc, but you should treat it as opaque. +struct stbtt_fontinfo +{ + void * userdata; + unsigned char * data; // pointer to .ttf file + int fontstart; // offset of start of font + + int numGlyphs; // number of glyphs, needed for range checking + + int loca,head,glyf,hhea,hmtx,kern,gpos,svg; // table locations as offset from start of .ttf + int index_map; // a cmap mapping for our chosen character encoding + int indexToLocFormat; // format needed to map from glyph index to glyph + + stbtt__buf cff; // cff font data + stbtt__buf charstrings; // the charstring index + stbtt__buf gsubrs; // global charstring subroutines index + stbtt__buf subrs; // private charstring subroutines index + stbtt__buf fontdicts; // array of font dicts + stbtt__buf fdselect; // map from glyph to fontdict +}; + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); +// Given an offset into the file that defines a font, this function builds +// the necessary cached info for the rest of the system. You must allocate +// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't +// need to do anything special to free it, because the contents are pure +// value data with no additional data structures. Returns 0 on failure. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER TO GLYPH-INDEX CONVERSIOn + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); +// If you're going to perform multiple operations on the same character +// and you want a speed-up, call this function with the character you're +// going to process, then use glyph-based functions instead of the +// codepoint-based functions. +// Returns 0 if the character codepoint is not defined in the font. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER PROPERTIES +// + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose "height" is 'pixels' tall. +// Height is measured as the distance from the highest ascender to the lowest +// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics +// and computing: +// scale = pixels / (ascent - descent) +// so if you prefer to measure height by the ascent only, use a similar calculation. + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose EM size is mapped to +// 'pixels' tall. This is probably what traditional APIs compute, but +// I'm not positive. + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); +// ascent is the coordinate above the baseline the font extends; descent +// is the coordinate below the baseline the font extends (i.e. it is typically negative) +// lineGap is the spacing between one row's descent and the next row's ascent... +// so you should advance the vertical position by "*ascent - *descent + *lineGap" +// these are expressed in unscaled coordinates, so you must multiply by +// the scale factor for a given size + +STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap); +// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2 +// table (specific to MS/Windows TTF files). +// +// Returns 1 on success (table present), 0 on failure. + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); +// the bounding box around all possible characters + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); +// leftSideBearing is the offset from the current horizontal position to the left edge of the character +// advanceWidth is the offset from the current horizontal position to the next horizontal position +// these are expressed in unscaled coordinates + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); +// an additional amount to add to the 'advance' value between ch1 and ch2 + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); +// Gets the bounding box of the visible part of the glyph, in unscaled coordinates + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); +// as above, but takes one or more glyph indices for greater efficiency + +typedef struct stbtt_kerningentry +{ + int glyph1; // use stbtt_FindGlyphIndex + int glyph2; + int advance; +} stbtt_kerningentry; + +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info); +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length); +// Retrieves a complete list of all of the kerning pairs provided by the font +// stbtt_GetKerningTable never writes more than table_length entries and returns how many entries it did write. +// The table will be sorted by (a.glyph1 == b.glyph1)?(a.glyph2 < b.glyph2):(a.glyph1 < b.glyph1) + +////////////////////////////////////////////////////////////////////////////// +// +// GLYPH SHAPES (you probably don't need these, but they have to go before +// the bitmaps for C declaration-order reasons) +// + +#ifndef STBTT_vmove // you can predefine these to use different values (but why?) + enum { + STBTT_vmove=1, + STBTT_vline, + STBTT_vcurve, + STBTT_vcubic + }; +#endif + +#ifndef stbtt_vertex // you can predefine this to use different values + // (we share this with other code at RAD) + #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file + typedef struct + { + stbtt_vertex_type x,y,cx,cy,cx1,cy1; + unsigned char type,padding; + } stbtt_vertex; +#endif + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); +// returns non-zero if nothing is drawn for this glyph + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); +// returns # of vertices and fills *vertices with the pointer to them +// these are expressed in "unscaled" coordinates +// +// The shape is a series of contours. Each one starts with +// a STBTT_moveto, then consists of a series of mixed +// STBTT_lineto and STBTT_curveto segments. A lineto +// draws a line from previous endpoint to its x,y; a curveto +// draws a quadratic bezier from previous endpoint to +// its x,y, using cx,cy as the bezier control point. + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); +// frees the data allocated above + +STBTT_DEF unsigned char *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl); +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg); +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg); +// fills svg with the character's SVG data. +// returns data size or 0 if SVG not found. + +////////////////////////////////////////////////////////////////////////////// +// +// BITMAP RENDERING +// + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); +// frees the bitmap allocated below + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// allocates a large-enough single-channel 8bpp bitmap and renders the +// specified character/glyph at the specified scale into it, with +// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). +// *width & *height are filled out with the width & height of the bitmap, +// which is stored left-to-right, top-to-bottom. +// +// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); +// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap +// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap +// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the +// width and height and positioning info for it first. + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); +// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint); +// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering +// is performed (see stbtt_PackSetOversampling) + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +// get the bbox of the bitmap centered around the glyph origin; so the +// bitmap width is ix1-ix0, height is iy1-iy0, and location to place +// the bitmap top left is (leftSideBearing*scale,iy0). +// (Note that the bitmap uses y-increases-down, but the shape uses +// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel +// shift for the character + +// the following functions are equivalent to the above functions, but operate +// on glyph indices instead of Unicode codepoints (for efficiency) +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph); +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); + + +// @TODO: don't expose this structure +typedef struct +{ + int w,h,stride; + unsigned char *pixels; +} stbtt__bitmap; + +// rasterize a shape with quadratic beziers into a bitmap +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into + float flatness_in_pixels, // allowable error of curve in pixels + stbtt_vertex *vertices, // array of vertices defining shape + int num_verts, // number of vertices in above array + float scale_x, float scale_y, // scale applied to input vertices + float shift_x, float shift_y, // translation applied to input vertices + int x_off, int y_off, // another translation applied to input + int invert, // if non-zero, vertically flip shape + void *userdata); // context for to STBTT_MALLOC + +////////////////////////////////////////////////////////////////////////////// +// +// Signed Distance Function (or Field) rendering + +STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata); +// frees the SDF bitmap allocated below + +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +// These functions compute a discretized SDF field for a single character, suitable for storing +// in a single-channel texture, sampling with bilinear filtering, and testing against +// larger than some threshold to produce scalable fonts. +// info -- the font +// scale -- controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap +// glyph/codepoint -- the character to generate the SDF for +// padding -- extra "pixels" around the character which are filled with the distance to the character (not 0), +// which allows effects like bit outlines +// onedge_value -- value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character) +// pixel_dist_scale -- what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale) +// if positive, > onedge_value is inside; if negative, < onedge_value is inside +// width,height -- output height & width of the SDF bitmap (including padding) +// xoff,yoff -- output origin of the character +// return value -- a 2D array of bytes 0..255, width*height in size +// +// pixel_dist_scale & onedge_value are a scale & bias that allows you to make +// optimal use of the limited 0..255 for your application, trading off precision +// and special effects. SDF values outside the range 0..255 are clamped to 0..255. +// +// Example: +// scale = stbtt_ScaleForPixelHeight(22) +// padding = 5 +// onedge_value = 180 +// pixel_dist_scale = 180/5.0 = 36.0 +// +// This will create an SDF bitmap in which the character is about 22 pixels +// high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled +// shape, sample the SDF at each pixel and fill the pixel if the SDF value +// is greater than or equal to 180/255. (You'll actually want to antialias, +// which is beyond the scope of this example.) Additionally, you can compute +// offset outlines (e.g. to stroke the character border inside & outside, +// or only outside). For example, to fill outside the character up to 3 SDF +// pixels, you would compare against (180-36.0*3)/255 = 72/255. The above +// choice of variables maps a range from 5 pixels outside the shape to +// 2 pixels inside the shape to 0..255; this is intended primarily for apply +// outside effects only (the interior range is needed to allow proper +// antialiasing of the font at *smaller* sizes) +// +// The function computes the SDF analytically at each SDF pixel, not by e.g. +// building a higher-res bitmap and approximating it. In theory the quality +// should be as high as possible for an SDF of this size & representation, but +// unclear if this is true in practice (perhaps building a higher-res bitmap +// and computing from that can allow drop-out prevention). +// +// The algorithm has not been optimized at all, so expect it to be slow +// if computing lots of characters or very large sizes. + + + +////////////////////////////////////////////////////////////////////////////// +// +// Finding the right font... +// +// You should really just solve this offline, keep your own tables +// of what font is what, and don't try to get it out of the .ttf file. +// That's because getting it out of the .ttf file is really hard, because +// the names in the file can appear in many possible encodings, in many +// possible languages, and e.g. if you need a case-insensitive comparison, +// the details of that depend on the encoding & language in a complex way +// (actually underspecified in truetype, but also gigantic). +// +// But you can use the provided functions in two possible ways: +// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on +// unicode-encoded names to try to find the font you want; +// you can run this before calling stbtt_InitFont() +// +// stbtt_GetFontNameString() lets you get any of the various strings +// from the file yourself and do your own comparisons on them. +// You have to have called stbtt_InitFont() first. + + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); +// returns the offset (not index) of the font that matches, or -1 if none +// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". +// if you use any other flag, use a font name like "Arial"; this checks +// the 'macStyle' header field; i don't know if fonts set this consistently +#define STBTT_MACSTYLE_DONTCARE 0 +#define STBTT_MACSTYLE_BOLD 1 +#define STBTT_MACSTYLE_ITALIC 2 +#define STBTT_MACSTYLE_UNDERSCORE 4 +#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); +// returns 1/0 whether the first string interpreted as utf8 is identical to +// the second string interpreted as big-endian utf16... useful for strings from next func + +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); +// returns the string (which may be big-endian double byte, e.g. for unicode) +// and puts the length in bytes in *length. +// +// some of the values for the IDs are below; for more see the truetype spec: +// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html +// http://www.microsoft.com/typography/otspec/name.htm + +enum { // platformID + STBTT_PLATFORM_ID_UNICODE =0, + STBTT_PLATFORM_ID_MAC =1, + STBTT_PLATFORM_ID_ISO =2, + STBTT_PLATFORM_ID_MICROSOFT =3 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_UNICODE + STBTT_UNICODE_EID_UNICODE_1_0 =0, + STBTT_UNICODE_EID_UNICODE_1_1 =1, + STBTT_UNICODE_EID_ISO_10646 =2, + STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, + STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT + STBTT_MS_EID_SYMBOL =0, + STBTT_MS_EID_UNICODE_BMP =1, + STBTT_MS_EID_SHIFTJIS =2, + STBTT_MS_EID_UNICODE_FULL =10 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes + STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, + STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, + STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, + STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 +}; + +enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... + // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs + STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, + STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, + STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, + STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, + STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, + STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D +}; + +enum { // languageID for STBTT_PLATFORM_ID_MAC + STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, + STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, + STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, + STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , + STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , + STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, + STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 +}; + +#ifdef __cplusplus +} +#endif + +#endif // __STB_INCLUDE_STB_TRUETYPE_H__ + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// IMPLEMENTATION +//// +//// + +#ifdef STB_TRUETYPE_IMPLEMENTATION + +#ifndef STBTT_MAX_OVERSAMPLE +#define STBTT_MAX_OVERSAMPLE 8 +#endif + +#if STBTT_MAX_OVERSAMPLE > 255 +#error "STBTT_MAX_OVERSAMPLE cannot be > 255" +#endif + +typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1]; + +#ifndef STBTT_RASTERIZER_VERSION +#define STBTT_RASTERIZER_VERSION 2 +#endif + +#ifdef _MSC_VER +#define STBTT__NOTUSED(v) (void)(v) +#else +#define STBTT__NOTUSED(v) (void)sizeof(v) +#endif + +////////////////////////////////////////////////////////////////////////// +// +// stbtt__buf helpers to parse data from file +// + +static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b) +{ + if (b->cursor >= b->size) + return 0; + return b->data[b->cursor++]; +} + +static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b) +{ + if (b->cursor >= b->size) + return 0; + return b->data[b->cursor]; +} + +static void stbtt__buf_seek(stbtt__buf *b, int o) +{ + STBTT_assert(!(o > b->size || o < 0)); + b->cursor = (o > b->size || o < 0) ? b->size : o; +} + +static void stbtt__buf_skip(stbtt__buf *b, int o) +{ + stbtt__buf_seek(b, b->cursor + o); +} + +static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n) +{ + stbtt_uint32 v = 0; + int i; + STBTT_assert(n >= 1 && n <= 4); + for (i = 0; i < n; i++) + v = (v << 8) | stbtt__buf_get8(b); + return v; +} + +static stbtt__buf stbtt__new_buf(const void *p, size_t size) +{ + stbtt__buf r; + STBTT_assert(size < 0x40000000); + r.data = (stbtt_uint8*) p; + r.size = (int) size; + r.cursor = 0; + return r; +} + +#define stbtt__buf_get16(b) stbtt__buf_get((b), 2) +#define stbtt__buf_get32(b) stbtt__buf_get((b), 4) + +static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s) +{ + stbtt__buf r = stbtt__new_buf(NULL, 0); + if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r; + r.data = b->data + o; + r.size = s; + return r; +} + +static stbtt__buf stbtt__cff_get_index(stbtt__buf *b) +{ + int count, start, offsize; + start = b->cursor; + count = stbtt__buf_get16(b); + if (count) { + offsize = stbtt__buf_get8(b); + STBTT_assert(offsize >= 1 && offsize <= 4); + stbtt__buf_skip(b, offsize * count); + stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1); + } + return stbtt__buf_range(b, start, b->cursor - start); +} + +static stbtt_uint32 stbtt__cff_int(stbtt__buf *b) +{ + int b0 = stbtt__buf_get8(b); + if (b0 >= 32 && b0 <= 246) return b0 - 139; + else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108; + else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108; + else if (b0 == 28) return stbtt__buf_get16(b); + else if (b0 == 29) return stbtt__buf_get32(b); + STBTT_assert(0); + return 0; +} + +static void stbtt__cff_skip_operand(stbtt__buf *b) { + int v, b0 = stbtt__buf_peek8(b); + STBTT_assert(b0 >= 28); + if (b0 == 30) { + stbtt__buf_skip(b, 1); + while (b->cursor < b->size) { + v = stbtt__buf_get8(b); + if ((v & 0xF) == 0xF || (v >> 4) == 0xF) + break; + } + } else { + stbtt__cff_int(b); + } +} + +static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key) +{ + stbtt__buf_seek(b, 0); + while (b->cursor < b->size) { + int start = b->cursor, end, op; + while (stbtt__buf_peek8(b) >= 28) + stbtt__cff_skip_operand(b); + end = b->cursor; + op = stbtt__buf_get8(b); + if (op == 12) op = stbtt__buf_get8(b) | 0x100; + if (op == key) return stbtt__buf_range(b, start, end-start); + } + return stbtt__buf_range(b, 0, 0); +} + +static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out) +{ + int i; + stbtt__buf operands = stbtt__dict_get(b, key); + for (i = 0; i < outcount && operands.cursor < operands.size; i++) + out[i] = stbtt__cff_int(&operands); +} + +static int stbtt__cff_index_count(stbtt__buf *b) +{ + stbtt__buf_seek(b, 0); + return stbtt__buf_get16(b); +} + +static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i) +{ + int count, offsize, start, end; + stbtt__buf_seek(&b, 0); + count = stbtt__buf_get16(&b); + offsize = stbtt__buf_get8(&b); + STBTT_assert(i >= 0 && i < count); + STBTT_assert(offsize >= 1 && offsize <= 4); + stbtt__buf_skip(&b, i*offsize); + start = stbtt__buf_get(&b, offsize); + end = stbtt__buf_get(&b, offsize); + return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start); +} + +////////////////////////////////////////////////////////////////////////// +// +// accessors to parse data from file +// + +// on platforms that don't allow misaligned reads, if we want to allow +// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE + +#define ttBYTE(p) (* (stbtt_uint8 *) (p)) +#define ttCHAR(p) (* (stbtt_int8 *) (p)) +#define ttFixed(p) ttLONG(p) + +static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } +static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } + +#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) +#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) + +static int stbtt__isfont(stbtt_uint8 *font) +{ + // check the version number + if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 + if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! + if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF + if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 + if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts + return 0; +} + +// @OPTIMIZE: binary search +static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) +{ + stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); + stbtt_uint32 tabledir = fontstart + 12; + stbtt_int32 i; + for (i=0; i < num_tables; ++i) { + stbtt_uint32 loc = tabledir + 16*i; + if (stbtt_tag(data+loc+0, tag)) + return ttULONG(data+loc+8); + } + return 0; +} + +static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index) +{ + // if it's just a font, there's only one valid index + if (stbtt__isfont(font_collection)) + return index == 0 ? 0 : -1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + stbtt_int32 n = ttLONG(font_collection+8); + if (index >= n) + return -1; + return ttULONG(font_collection+12+index*4); + } + } + return -1; +} + +static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection) +{ + // if it's just a font, there's only one valid font + if (stbtt__isfont(font_collection)) + return 1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + return ttLONG(font_collection+8); + } + } + return 0; +} + +static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict) +{ + stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 }; + stbtt__buf pdict; + stbtt__dict_get_ints(&fontdict, 18, 2, private_loc); + if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0); + pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]); + stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff); + if (!subrsoff) return stbtt__new_buf(NULL, 0); + stbtt__buf_seek(&cff, private_loc[1]+subrsoff); + return stbtt__cff_get_index(&cff); +} + +// since most people won't use this, find this table the first time it's needed +static int stbtt__get_svg(stbtt_fontinfo *info) +{ + stbtt_uint32 t; + if (info->svg < 0) { + t = stbtt__find_table(info->data, info->fontstart, "SVG "); + if (t) { + stbtt_uint32 offset = ttULONG(info->data + t + 2); + info->svg = t + offset; + } else { + info->svg = 0; + } + } + return info->svg; +} + +static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) +{ + stbtt_uint32 cmap, t; + stbtt_int32 i,numTables; + + info->data = data; + info->fontstart = fontstart; + info->cff = stbtt__new_buf(NULL, 0); + + cmap = stbtt__find_table(data, fontstart, "cmap"); // required + info->loca = stbtt__find_table(data, fontstart, "loca"); // required + info->head = stbtt__find_table(data, fontstart, "head"); // required + info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required + info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required + info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required + info->kern = stbtt__find_table(data, fontstart, "kern"); // not required + info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required + + if (!cmap || !info->head || !info->hhea || !info->hmtx) + return 0; + if (info->glyf) { + // required for truetype + if (!info->loca) return 0; + } else { + // initialization for CFF / Type2 fonts (OTF) + stbtt__buf b, topdict, topdictidx; + stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0; + stbtt_uint32 cff; + + cff = stbtt__find_table(data, fontstart, "CFF "); + if (!cff) return 0; + + info->fontdicts = stbtt__new_buf(NULL, 0); + info->fdselect = stbtt__new_buf(NULL, 0); + + // @TODO this should use size from table (not 512MB) + info->cff = stbtt__new_buf(data+cff, 512*1024*1024); + b = info->cff; + + // read the header + stbtt__buf_skip(&b, 2); + stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize + + // @TODO the name INDEX could list multiple fonts, + // but we just use the first one. + stbtt__cff_get_index(&b); // name INDEX + topdictidx = stbtt__cff_get_index(&b); + topdict = stbtt__cff_index_get(topdictidx, 0); + stbtt__cff_get_index(&b); // string INDEX + info->gsubrs = stbtt__cff_get_index(&b); + + stbtt__dict_get_ints(&topdict, 17, 1, &charstrings); + stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype); + stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff); + stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff); + info->subrs = stbtt__get_subrs(b, topdict); + + // we only support Type 2 charstrings + if (cstype != 2) return 0; + if (charstrings == 0) return 0; + + if (fdarrayoff) { + // looks like a CID font + if (!fdselectoff) return 0; + stbtt__buf_seek(&b, fdarrayoff); + info->fontdicts = stbtt__cff_get_index(&b); + info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff); + } + + stbtt__buf_seek(&b, charstrings); + info->charstrings = stbtt__cff_get_index(&b); + } + + t = stbtt__find_table(data, fontstart, "maxp"); + if (t) + info->numGlyphs = ttUSHORT(data+t+4); + else + info->numGlyphs = 0xffff; + + info->svg = -1; + + // find a cmap encoding table we understand *now* to avoid searching + // later. (todo: could make this installable) + // the same regardless of glyph. + numTables = ttUSHORT(data + cmap + 2); + info->index_map = 0; + for (i=0; i < numTables; ++i) { + stbtt_uint32 encoding_record = cmap + 4 + 8 * i; + // find an encoding we understand: + switch(ttUSHORT(data+encoding_record)) { + case STBTT_PLATFORM_ID_MICROSOFT: + switch (ttUSHORT(data+encoding_record+2)) { + case STBTT_MS_EID_UNICODE_BMP: + case STBTT_MS_EID_UNICODE_FULL: + // MS/Unicode + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + break; + case STBTT_PLATFORM_ID_UNICODE: + // Mac/iOS has these + // all the encodingIDs are unicode, so we don't bother to check it + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + } + if (info->index_map == 0) + return 0; + + info->indexToLocFormat = ttUSHORT(data+info->head + 50); + return 1; +} + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) +{ + stbtt_uint8 *data = info->data; + stbtt_uint32 index_map = info->index_map; + + stbtt_uint16 format = ttUSHORT(data + index_map + 0); + if (format == 0) { // apple byte encoding + stbtt_int32 bytes = ttUSHORT(data + index_map + 2); + if (unicode_codepoint < bytes-6) + return ttBYTE(data + index_map + 6 + unicode_codepoint); + return 0; + } else if (format == 6) { + stbtt_uint32 first = ttUSHORT(data + index_map + 6); + stbtt_uint32 count = ttUSHORT(data + index_map + 8); + if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) + return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); + return 0; + } else if (format == 2) { + STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean + return 0; + } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges + stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; + stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; + stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); + stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; + + // do a binary search of the segments + stbtt_uint32 endCount = index_map + 14; + stbtt_uint32 search = endCount; + + if (unicode_codepoint > 0xffff) + return 0; + + // they lie from endCount .. endCount + segCount + // but searchRange is the nearest power of two, so... + if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) + search += rangeShift*2; + + // now decrement to bias correctly to find smallest + search -= 2; + while (entrySelector) { + stbtt_uint16 end; + searchRange >>= 1; + end = ttUSHORT(data + search + searchRange*2); + if (unicode_codepoint > end) + search += searchRange*2; + --entrySelector; + } + search += 2; + + { + stbtt_uint16 offset, start, last; + stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); + + start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); + last = ttUSHORT(data + endCount + 2*item); + if (unicode_codepoint < start || unicode_codepoint > last) + return 0; + + offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); + if (offset == 0) + return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); + + return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); + } + } else if (format == 12 || format == 13) { + stbtt_uint32 ngroups = ttULONG(data+index_map+12); + stbtt_int32 low,high; + low = 0; high = (stbtt_int32)ngroups; + // Binary search the right group. + while (low < high) { + stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high + stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); + stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); + if ((stbtt_uint32) unicode_codepoint < start_char) + high = mid; + else if ((stbtt_uint32) unicode_codepoint > end_char) + low = mid+1; + else { + stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); + if (format == 12) + return start_glyph + unicode_codepoint-start_char; + else // format == 13 + return start_glyph; + } + } + return 0; // not found + } + // @TODO + STBTT_assert(0); + return 0; +} + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) +{ + return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); +} + +static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) +{ + v->type = type; + v->x = (stbtt_int16) x; + v->y = (stbtt_int16) y; + v->cx = (stbtt_int16) cx; + v->cy = (stbtt_int16) cy; +} + +static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) +{ + int g1,g2; + + STBTT_assert(!info->cff.size); + + if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range + if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format + + if (info->indexToLocFormat == 0) { + g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; + g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; + } else { + g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); + g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); + } + + return g1==g2 ? -1 : g1; // if length is 0, return -1 +} + +static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); + +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + if (info->cff.size) { + stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1); + } else { + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 0; + + if (x0) *x0 = ttSHORT(info->data + g + 2); + if (y0) *y0 = ttSHORT(info->data + g + 4); + if (x1) *x1 = ttSHORT(info->data + g + 6); + if (y1) *y1 = ttSHORT(info->data + g + 8); + } + return 1; +} + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) +{ + return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); +} + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt_int16 numberOfContours; + int g; + if (info->cff.size) + return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0; + g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 1; + numberOfContours = ttSHORT(info->data + g); + return numberOfContours == 0; +} + +static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, + stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) +{ + if (start_off) { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); + } + return num_vertices; +} + +static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + stbtt_int16 numberOfContours; + stbtt_uint8 *endPtsOfContours; + stbtt_uint8 *data = info->data; + stbtt_vertex *vertices=0; + int num_vertices=0; + int g = stbtt__GetGlyfOffset(info, glyph_index); + + *pvertices = NULL; + + if (g < 0) return 0; + + numberOfContours = ttSHORT(data + g); + + if (numberOfContours > 0) { + stbtt_uint8 flags=0,flagcount; + stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; + stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; + stbtt_uint8 *points; + endPtsOfContours = (data + g + 10); + ins = ttUSHORT(data + g + 10 + numberOfContours * 2); + points = data + g + 10 + numberOfContours * 2 + 2 + ins; + + n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); + + m = n + 2*numberOfContours; // a loose bound on how many vertices we might need + vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); + if (vertices == 0) + return 0; + + next_move = 0; + flagcount=0; + + // in first pass, we load uninterpreted data into the allocated array + // above, shifted to the end of the array so we won't overwrite it when + // we create our final data starting from the front + + off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated + + // first load flags + + for (i=0; i < n; ++i) { + if (flagcount == 0) { + flags = *points++; + if (flags & 8) + flagcount = *points++; + } else + --flagcount; + vertices[off+i].type = flags; + } + + // now load x coordinates + x=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 2) { + stbtt_int16 dx = *points++; + x += (flags & 16) ? dx : -dx; // ??? + } else { + if (!(flags & 16)) { + x = x + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].x = (stbtt_int16) x; + } + + // now load y coordinates + y=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 4) { + stbtt_int16 dy = *points++; + y += (flags & 32) ? dy : -dy; // ??? + } else { + if (!(flags & 32)) { + y = y + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].y = (stbtt_int16) y; + } + + // now convert them to our format + num_vertices=0; + sx = sy = cx = cy = scx = scy = 0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + x = (stbtt_int16) vertices[off+i].x; + y = (stbtt_int16) vertices[off+i].y; + + if (next_move == i) { + if (i != 0) + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + + // now start the new one + start_off = !(flags & 1); + if (start_off) { + // if we start off with an off-curve point, then when we need to find a point on the curve + // where we can start, and we need to save some state for when we wraparound. + scx = x; + scy = y; + if (!(vertices[off+i+1].type & 1)) { + // next point is also a curve point, so interpolate an on-point curve + sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; + sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; + } else { + // otherwise just use the next point as our start point + sx = (stbtt_int32) vertices[off+i+1].x; + sy = (stbtt_int32) vertices[off+i+1].y; + ++i; // we're using point i+1 as the starting point, so skip it + } + } else { + sx = x; + sy = y; + } + stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); + was_off = 0; + next_move = 1 + ttUSHORT(endPtsOfContours+j*2); + ++j; + } else { + if (!(flags & 1)) { // if it's a curve + if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); + cx = x; + cy = y; + was_off = 1; + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); + was_off = 0; + } + } + } + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + } else if (numberOfContours < 0) { + // Compound shapes. + int more = 1; + stbtt_uint8 *comp = data + g + 10; + num_vertices = 0; + vertices = 0; + while (more) { + stbtt_uint16 flags, gidx; + int comp_num_verts = 0, i; + stbtt_vertex *comp_verts = 0, *tmp = 0; + float mtx[6] = {1,0,0,1,0,0}, m, n; + + flags = ttSHORT(comp); comp+=2; + gidx = ttSHORT(comp); comp+=2; + + if (flags & 2) { // XY values + if (flags & 1) { // shorts + mtx[4] = ttSHORT(comp); comp+=2; + mtx[5] = ttSHORT(comp); comp+=2; + } else { + mtx[4] = ttCHAR(comp); comp+=1; + mtx[5] = ttCHAR(comp); comp+=1; + } + } + else { + // @TODO handle matching point + STBTT_assert(0); + } + if (flags & (1<<3)) { // WE_HAVE_A_SCALE + mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } + + // Find transformation scales. + m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); + n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); + + // Get indexed glyph. + comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); + if (comp_num_verts > 0) { + // Transform vertices. + for (i = 0; i < comp_num_verts; ++i) { + stbtt_vertex* v = &comp_verts[i]; + stbtt_vertex_type x,y; + x=v->x; y=v->y; + v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + x=v->cx; y=v->cy; + v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + } + // Append vertices. + tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); + if (!tmp) { + if (vertices) STBTT_free(vertices, info->userdata); + if (comp_verts) STBTT_free(comp_verts, info->userdata); + return 0; + } + if (num_vertices > 0 && vertices) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); + STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); + if (vertices) STBTT_free(vertices, info->userdata); + vertices = tmp; + STBTT_free(comp_verts, info->userdata); + num_vertices += comp_num_verts; + } + // More components ? + more = flags & (1<<5); + } + } else { + // numberOfCounters == 0, do nothing + } + + *pvertices = vertices; + return num_vertices; +} + +typedef struct +{ + int bounds; + int started; + float first_x, first_y; + float x, y; + stbtt_int32 min_x, max_x, min_y, max_y; + + stbtt_vertex *pvertices; + int num_vertices; +} stbtt__csctx; + +#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0} + +static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y) +{ + if (x > c->max_x || !c->started) c->max_x = x; + if (y > c->max_y || !c->started) c->max_y = y; + if (x < c->min_x || !c->started) c->min_x = x; + if (y < c->min_y || !c->started) c->min_y = y; + c->started = 1; +} + +static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1) +{ + if (c->bounds) { + stbtt__track_vertex(c, x, y); + if (type == STBTT_vcubic) { + stbtt__track_vertex(c, cx, cy); + stbtt__track_vertex(c, cx1, cy1); + } + } else { + stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy); + c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1; + c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1; + } + c->num_vertices++; +} + +static void stbtt__csctx_close_shape(stbtt__csctx *ctx) +{ + if (ctx->first_x != ctx->x || ctx->first_y != ctx->y) + stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy) +{ + stbtt__csctx_close_shape(ctx); + ctx->first_x = ctx->x = ctx->x + dx; + ctx->first_y = ctx->y = ctx->y + dy; + stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy) +{ + ctx->x += dx; + ctx->y += dy; + stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3) +{ + float cx1 = ctx->x + dx1; + float cy1 = ctx->y + dy1; + float cx2 = cx1 + dx2; + float cy2 = cy1 + dy2; + ctx->x = cx2 + dx3; + ctx->y = cy2 + dy3; + stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2); +} + +static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n) +{ + int count = stbtt__cff_index_count(&idx); + int bias = 107; + if (count >= 33900) + bias = 32768; + else if (count >= 1240) + bias = 1131; + n += bias; + if (n < 0 || n >= count) + return stbtt__new_buf(NULL, 0); + return stbtt__cff_index_get(idx, n); +} + +static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt__buf fdselect = info->fdselect; + int nranges, start, end, v, fmt, fdselector = -1, i; + + stbtt__buf_seek(&fdselect, 0); + fmt = stbtt__buf_get8(&fdselect); + if (fmt == 0) { + // untested + stbtt__buf_skip(&fdselect, glyph_index); + fdselector = stbtt__buf_get8(&fdselect); + } else if (fmt == 3) { + nranges = stbtt__buf_get16(&fdselect); + start = stbtt__buf_get16(&fdselect); + for (i = 0; i < nranges; i++) { + v = stbtt__buf_get8(&fdselect); + end = stbtt__buf_get16(&fdselect); + if (glyph_index >= start && glyph_index < end) { + fdselector = v; + break; + } + start = end; + } + } + if (fdselector == -1) return stbtt__new_buf(NULL, 0); // [DEAR IMGUI] fixed, see #6007 and nothings/stb#1422 + return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector)); +} + +static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c) +{ + int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0; + int has_subrs = 0, clear_stack; + float s[48]; + stbtt__buf subr_stack[10], subrs = info->subrs, b; + float f; + +#define STBTT__CSERR(s) (0) + + // this currently ignores the initial width value, which isn't needed if we have hmtx + b = stbtt__cff_index_get(info->charstrings, glyph_index); + while (b.cursor < b.size) { + i = 0; + clear_stack = 1; + b0 = stbtt__buf_get8(&b); + switch (b0) { + // @TODO implement hinting + case 0x13: // hintmask + case 0x14: // cntrmask + if (in_header) + maskbits += (sp / 2); // implicit "vstem" + in_header = 0; + stbtt__buf_skip(&b, (maskbits + 7) / 8); + break; + + case 0x01: // hstem + case 0x03: // vstem + case 0x12: // hstemhm + case 0x17: // vstemhm + maskbits += (sp / 2); + break; + + case 0x15: // rmoveto + in_header = 0; + if (sp < 2) return STBTT__CSERR("rmoveto stack"); + stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]); + break; + case 0x04: // vmoveto + in_header = 0; + if (sp < 1) return STBTT__CSERR("vmoveto stack"); + stbtt__csctx_rmove_to(c, 0, s[sp-1]); + break; + case 0x16: // hmoveto + in_header = 0; + if (sp < 1) return STBTT__CSERR("hmoveto stack"); + stbtt__csctx_rmove_to(c, s[sp-1], 0); + break; + + case 0x05: // rlineto + if (sp < 2) return STBTT__CSERR("rlineto stack"); + for (; i + 1 < sp; i += 2) + stbtt__csctx_rline_to(c, s[i], s[i+1]); + break; + + // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical + // starting from a different place. + + case 0x07: // vlineto + if (sp < 1) return STBTT__CSERR("vlineto stack"); + goto vlineto; + case 0x06: // hlineto + if (sp < 1) return STBTT__CSERR("hlineto stack"); + for (;;) { + if (i >= sp) break; + stbtt__csctx_rline_to(c, s[i], 0); + i++; + vlineto: + if (i >= sp) break; + stbtt__csctx_rline_to(c, 0, s[i]); + i++; + } + break; + + case 0x1F: // hvcurveto + if (sp < 4) return STBTT__CSERR("hvcurveto stack"); + goto hvcurveto; + case 0x1E: // vhcurveto + if (sp < 4) return STBTT__CSERR("vhcurveto stack"); + for (;;) { + if (i + 3 >= sp) break; + stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f); + i += 4; + hvcurveto: + if (i + 3 >= sp) break; + stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]); + i += 4; + } + break; + + case 0x08: // rrcurveto + if (sp < 6) return STBTT__CSERR("rcurveline stack"); + for (; i + 5 < sp; i += 6) + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + break; + + case 0x18: // rcurveline + if (sp < 8) return STBTT__CSERR("rcurveline stack"); + for (; i + 5 < sp - 2; i += 6) + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack"); + stbtt__csctx_rline_to(c, s[i], s[i+1]); + break; + + case 0x19: // rlinecurve + if (sp < 8) return STBTT__CSERR("rlinecurve stack"); + for (; i + 1 < sp - 6; i += 2) + stbtt__csctx_rline_to(c, s[i], s[i+1]); + if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack"); + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + break; + + case 0x1A: // vvcurveto + case 0x1B: // hhcurveto + if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack"); + f = 0.0; + if (sp & 1) { f = s[i]; i++; } + for (; i + 3 < sp; i += 4) { + if (b0 == 0x1B) + stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0); + else + stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]); + f = 0.0; + } + break; + + case 0x0A: // callsubr + if (!has_subrs) { + if (info->fdselect.size) + subrs = stbtt__cid_get_glyph_subrs(info, glyph_index); + has_subrs = 1; + } + // FALLTHROUGH + case 0x1D: // callgsubr + if (sp < 1) return STBTT__CSERR("call(g|)subr stack"); + v = (int) s[--sp]; + if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit"); + subr_stack[subr_stack_height++] = b; + b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v); + if (b.size == 0) return STBTT__CSERR("subr not found"); + b.cursor = 0; + clear_stack = 0; + break; + + case 0x0B: // return + if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr"); + b = subr_stack[--subr_stack_height]; + clear_stack = 0; + break; + + case 0x0E: // endchar + stbtt__csctx_close_shape(c); + return 1; + + case 0x0C: { // two-byte escape + float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; + float dx, dy; + int b1 = stbtt__buf_get8(&b); + switch (b1) { + // @TODO These "flex" implementations ignore the flex-depth and resolution, + // and always draw beziers. + case 0x22: // hflex + if (sp < 7) return STBTT__CSERR("hflex stack"); + dx1 = s[0]; + dx2 = s[1]; + dy2 = s[2]; + dx3 = s[3]; + dx4 = s[4]; + dx5 = s[5]; + dx6 = s[6]; + stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0); + stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0); + break; + + case 0x23: // flex + if (sp < 13) return STBTT__CSERR("flex stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dy3 = s[5]; + dx4 = s[6]; + dy4 = s[7]; + dx5 = s[8]; + dy5 = s[9]; + dx6 = s[10]; + dy6 = s[11]; + //fd is s[12] + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); + stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); + break; + + case 0x24: // hflex1 + if (sp < 9) return STBTT__CSERR("hflex1 stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dx4 = s[5]; + dx5 = s[6]; + dy5 = s[7]; + dx6 = s[8]; + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0); + stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5)); + break; + + case 0x25: // flex1 + if (sp < 11) return STBTT__CSERR("flex1 stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dy3 = s[5]; + dx4 = s[6]; + dy4 = s[7]; + dx5 = s[8]; + dy5 = s[9]; + dx6 = dy6 = s[10]; + dx = dx1+dx2+dx3+dx4+dx5; + dy = dy1+dy2+dy3+dy4+dy5; + if (STBTT_fabs(dx) > STBTT_fabs(dy)) + dy6 = -dy; + else + dx6 = -dx; + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); + stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); + break; + + default: + return STBTT__CSERR("unimplemented"); + } + } break; + + default: + if (b0 != 255 && b0 != 28 && b0 < 32) + return STBTT__CSERR("reserved operator"); + + // push immediate + if (b0 == 255) { + f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; + } else { + stbtt__buf_skip(&b, -1); + f = (float)(stbtt_int16)stbtt__cff_int(&b); + } + if (sp >= 48) return STBTT__CSERR("push stack overflow"); + s[sp++] = f; + clear_stack = 0; + break; + } + if (clear_stack) sp = 0; + } + return STBTT__CSERR("no endchar"); + +#undef STBTT__CSERR +} + +static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + // runs the charstring twice, once to count and once to output (to avoid realloc) + stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1); + stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0); + if (stbtt__run_charstring(info, glyph_index, &count_ctx)) { + *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata); + output_ctx.pvertices = *pvertices; + if (stbtt__run_charstring(info, glyph_index, &output_ctx)) { + STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices); + return output_ctx.num_vertices; + } + } + *pvertices = NULL; + return 0; +} + +static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + stbtt__csctx c = STBTT__CSCTX_INIT(1); + int r = stbtt__run_charstring(info, glyph_index, &c); + if (x0) *x0 = r ? c.min_x : 0; + if (y0) *y0 = r ? c.min_y : 0; + if (x1) *x1 = r ? c.max_x : 0; + if (y1) *y1 = r ? c.max_y : 0; + return r ? c.num_vertices : 0; +} + +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + if (!info->cff.size) + return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices); + else + return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices); +} + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) +{ + stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); + if (glyph_index < numOfLongHorMetrics) { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); + } else { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); + } +} + +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info) +{ + stbtt_uint8 *data = info->data + info->kern; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + return ttUSHORT(data+10); +} + +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length) +{ + stbtt_uint8 *data = info->data + info->kern; + int k, length; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + length = ttUSHORT(data+10); + if (table_length < length) + length = table_length; + + for (k = 0; k < length; k++) + { + table[k].glyph1 = ttUSHORT(data+18+(k*6)); + table[k].glyph2 = ttUSHORT(data+20+(k*6)); + table[k].advance = ttSHORT(data+22+(k*6)); + } + + return length; +} + +static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint8 *data = info->data + info->kern; + stbtt_uint32 needle, straw; + int l, r, m; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + l = 0; + r = ttUSHORT(data+10) - 1; + needle = glyph1 << 16 | glyph2; + while (l <= r) { + m = (l + r) >> 1; + straw = ttULONG(data+18+(m*6)); // note: unaligned read + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else + return ttSHORT(data+22+(m*6)); + } + return 0; +} + +static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) +{ + stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); + switch (coverageFormat) { + case 1: { + stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); + + // Binary search. + stbtt_int32 l=0, r=glyphCount-1, m; + int straw, needle=glyph; + while (l <= r) { + stbtt_uint8 *glyphArray = coverageTable + 4; + stbtt_uint16 glyphID; + m = (l + r) >> 1; + glyphID = ttUSHORT(glyphArray + 2 * m); + straw = glyphID; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + return m; + } + } + break; + } + + case 2: { + stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); + stbtt_uint8 *rangeArray = coverageTable + 4; + + // Binary search. + stbtt_int32 l=0, r=rangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *rangeRecord; + m = (l + r) >> 1; + rangeRecord = rangeArray + 6 * m; + strawStart = ttUSHORT(rangeRecord); + strawEnd = ttUSHORT(rangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else { + stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); + return startCoverageIndex + glyph - strawStart; + } + } + break; + } + + default: return -1; // unsupported + } + + return -1; +} + +static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph) +{ + stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); + switch (classDefFormat) + { + case 1: { + stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); + stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); + stbtt_uint8 *classDef1ValueArray = classDefTable + 6; + + if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) + return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); + break; + } + + case 2: { + stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); + stbtt_uint8 *classRangeRecords = classDefTable + 4; + + // Binary search. + stbtt_int32 l=0, r=classRangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *classRangeRecord; + m = (l + r) >> 1; + classRangeRecord = classRangeRecords + 6 * m; + strawStart = ttUSHORT(classRangeRecord); + strawEnd = ttUSHORT(classRangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else + return (stbtt_int32)ttUSHORT(classRangeRecord + 4); + } + break; + } + + default: + return -1; // Unsupported definition type, return an error. + } + + // "All glyphs not assigned to a class fall into class 0". (OpenType spec) + return 0; +} + +// Define to STBTT_assert(x) if you want to break on unimplemented formats. +#define STBTT_GPOS_TODO_assert(x) + +static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint16 lookupListOffset; + stbtt_uint8 *lookupList; + stbtt_uint16 lookupCount; + stbtt_uint8 *data; + stbtt_int32 i, sti; + + if (!info->gpos) return 0; + + data = info->data + info->gpos; + + if (ttUSHORT(data+0) != 1) return 0; // Major version 1 + if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 + + lookupListOffset = ttUSHORT(data+8); + lookupList = data + lookupListOffset; + lookupCount = ttUSHORT(lookupList); + + for (i=0; i= pairSetCount) return 0; + + needle=glyph2; + r=pairValueCount-1; + l=0; + + // Binary search. + while (l <= r) { + stbtt_uint16 secondGlyph; + stbtt_uint8 *pairValue; + m = (l + r) >> 1; + pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; + secondGlyph = ttUSHORT(pairValue); + straw = secondGlyph; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + stbtt_int16 xAdvance = ttSHORT(pairValue + 2); + return xAdvance; + } + } + } else + return 0; + break; + } + + case 2: { + stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); + stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); + if (valueFormat1 == 4 && valueFormat2 == 0) { // Support more formats? + stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); + stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); + int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); + int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); + + stbtt_uint16 class1Count = ttUSHORT(table + 12); + stbtt_uint16 class2Count = ttUSHORT(table + 14); + stbtt_uint8 *class1Records, *class2Records; + stbtt_int16 xAdvance; + + if (glyph1class < 0 || glyph1class >= class1Count) return 0; // malformed + if (glyph2class < 0 || glyph2class >= class2Count) return 0; // malformed + + class1Records = table + 16; + class2Records = class1Records + 2 * (glyph1class * class2Count); + xAdvance = ttSHORT(class2Records + 2 * glyph2class); + return xAdvance; + } else + return 0; + break; + } + + default: + return 0; // Unsupported position format + } + } + } + + return 0; +} + +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2) +{ + int xAdvance = 0; + + if (info->gpos) + xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2); + else if (info->kern) + xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2); + + return xAdvance; +} + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) +{ + if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs + return 0; + return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); +} + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) +{ + stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); +} + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) +{ + if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); + if (descent) *descent = ttSHORT(info->data+info->hhea + 6); + if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); +} + +STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap) +{ + int tab = stbtt__find_table(info->data, info->fontstart, "OS/2"); + if (!tab) + return 0; + if (typoAscent ) *typoAscent = ttSHORT(info->data+tab + 68); + if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70); + if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72); + return 1; +} + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) +{ + *x0 = ttSHORT(info->data + info->head + 36); + *y0 = ttSHORT(info->data + info->head + 38); + *x1 = ttSHORT(info->data + info->head + 40); + *y1 = ttSHORT(info->data + info->head + 42); +} + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) +{ + int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); + return (float) height / fheight; +} + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) +{ + int unitsPerEm = ttUSHORT(info->data + info->head + 18); + return pixels / unitsPerEm; +} + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) +{ + STBTT_free(v, info->userdata); +} + +STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl) +{ + int i; + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info); + + int numEntries = ttUSHORT(svg_doc_list); + stbtt_uint8 *svg_docs = svg_doc_list + 2; + + for(i=0; i= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2))) + return svg_doc; + } + return 0; +} + +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg) +{ + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc; + + if (info->svg == 0) + return 0; + + svg_doc = stbtt_FindSVGDoc(info, gl); + if (svg_doc != NULL) { + *svg = (char *) data + info->svg + ttULONG(svg_doc + 4); + return ttULONG(svg_doc + 8); + } else { + return 0; + } +} + +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg) +{ + return stbtt_GetGlyphSVG(info, stbtt_FindGlyphIndex(info, unicode_codepoint), svg); +} + +////////////////////////////////////////////////////////////////////////////// +// +// antialiasing software rasterizer +// + +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning + if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { + // e.g. space character + if (ix0) *ix0 = 0; + if (iy0) *iy0 = 0; + if (ix1) *ix1 = 0; + if (iy1) *iy1 = 0; + } else { + // move to integral bboxes (treating pixels as little squares, what pixels get touched)? + if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x); + if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y); + if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x); + if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y); + } +} + +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); +} + +////////////////////////////////////////////////////////////////////////////// +// +// Rasterizer + +typedef struct stbtt__hheap_chunk +{ + struct stbtt__hheap_chunk *next; +} stbtt__hheap_chunk; + +typedef struct stbtt__hheap +{ + struct stbtt__hheap_chunk *head; + void *first_free; + int num_remaining_in_head_chunk; +} stbtt__hheap; + +static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata) +{ + if (hh->first_free) { + void *p = hh->first_free; + hh->first_free = * (void **) p; + return p; + } else { + if (hh->num_remaining_in_head_chunk == 0) { + int count = (size < 32 ? 2000 : size < 128 ? 800 : 100); + stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata); + if (c == NULL) + return NULL; + c->next = hh->head; + hh->head = c; + hh->num_remaining_in_head_chunk = count; + } + --hh->num_remaining_in_head_chunk; + return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk; + } +} + +static void stbtt__hheap_free(stbtt__hheap *hh, void *p) +{ + *(void **) p = hh->first_free; + hh->first_free = p; +} + +static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) +{ + stbtt__hheap_chunk *c = hh->head; + while (c) { + stbtt__hheap_chunk *n = c->next; + STBTT_free(c, userdata); + c = n; + } +} + +typedef struct stbtt__edge { + float x0,y0, x1,y1; + int invert; +} stbtt__edge; + + +typedef struct stbtt__active_edge +{ + struct stbtt__active_edge *next; + #if STBTT_RASTERIZER_VERSION==1 + int x,dx; + float ey; + int direction; + #elif STBTT_RASTERIZER_VERSION==2 + float fx,fdx,fdy; + float direction; + float sy; + float ey; + #else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" + #endif +} stbtt__active_edge; + +#if STBTT_RASTERIZER_VERSION == 1 +#define STBTT_FIXSHIFT 10 +#define STBTT_FIX (1 << STBTT_FIXSHIFT) +#define STBTT_FIXMASK (STBTT_FIX-1) + +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + if (!z) return z; + + // round dx down to avoid overshooting + if (dxdy < 0) + z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy); + else + z->dx = STBTT_ifloor(STBTT_FIX * dxdy); + + z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount + z->x -= off_x * STBTT_FIX; + + z->ey = e->y1; + z->next = 0; + z->direction = e->invert ? 1 : -1; + return z; +} +#elif STBTT_RASTERIZER_VERSION == 2 +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + //STBTT_assert(e->y0 <= start_point); + if (!z) return z; + z->fdx = dxdy; + z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; + z->fx = e->x0 + dxdy * (start_point - e->y0); + z->fx -= off_x; + z->direction = e->invert ? 1.0f : -1.0f; + z->sy = e->y0; + z->ey = e->y1; + z->next = 0; + return z; +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#if STBTT_RASTERIZER_VERSION == 1 +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) +{ + // non-zero winding fill + int x0=0, w=0; + + while (e) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->direction; + } else { + int x1 = e->x; w += e->direction; + // if we went to zero, we need to draw + if (w == 0) { + int i = x0 >> STBTT_FIXSHIFT; + int j = x1 >> STBTT_FIXSHIFT; + + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] = scanline[i] + (stbtt_uint8) max_weight; + } + } + } + } + + e = e->next; + } +} + +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0; + int max_weight = (255 / vsubsample); // weight per vertical scanline + int s; // vertical subsample index + unsigned char scanline_data[512], *scanline; + + if (result->w > 512) + scanline = (unsigned char *) STBTT_malloc(result->w, userdata); + else + scanline = scanline_data; + + y = off_y * vsubsample; + e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; + + while (j < result->h) { + STBTT_memset(scanline, 0, result->w); + for (s=0; s < vsubsample; ++s) { + // find center of pixel for this scanline + float scan_y = y + 0.5f; + stbtt__active_edge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for(;;) { + int changed=0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + stbtt__active_edge *t = *step; + stbtt__active_edge *q = t->next; + + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e->y0 <= scan_y) { + if (e->y1 > scan_y) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata); + if (z != NULL) { + // find insertion point + if (active == NULL) + active = z; + else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + stbtt__active_edge *p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + } + ++e; + } + + // now process all active edges in XOR fashion + if (active) + stbtt__fill_active_edges(scanline, result->w, active, max_weight); + + ++y; + } + STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} + +#elif STBTT_RASTERIZER_VERSION == 2 + +// the edge passed in here does not cross the vertical line at x or the vertical line at x+1 +// (i.e. it has already been clipped to those) +static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) +{ + if (y0 == y1) return; + STBTT_assert(y0 < y1); + STBTT_assert(e->sy <= e->ey); + if (y0 > e->ey) return; + if (y1 < e->sy) return; + if (y0 < e->sy) { + x0 += (x1-x0) * (e->sy - y0) / (y1-y0); + y0 = e->sy; + } + if (y1 > e->ey) { + x1 += (x1-x0) * (e->ey - y1) / (y1-y0); + y1 = e->ey; + } + + if (x0 == x) + STBTT_assert(x1 <= x+1); + else if (x0 == x+1) + STBTT_assert(x1 >= x); + else if (x0 <= x) + STBTT_assert(x1 <= x); + else if (x0 >= x+1) + STBTT_assert(x1 >= x+1); + else + STBTT_assert(x1 >= x && x1 <= x+1); + + if (x0 <= x && x1 <= x) + scanline[x] += e->direction * (y1-y0); + else if (x0 >= x+1 && x1 >= x+1) + ; + else { + STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1); + scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position + } +} + +static float stbtt__sized_trapezoid_area(float height, float top_width, float bottom_width) +{ + STBTT_assert(top_width >= 0); + STBTT_assert(bottom_width >= 0); + return (top_width + bottom_width) / 2.0f * height; +} + +static float stbtt__position_trapezoid_area(float height, float tx0, float tx1, float bx0, float bx1) +{ + return stbtt__sized_trapezoid_area(height, tx1 - tx0, bx1 - bx0); +} + +static float stbtt__sized_triangle_area(float height, float width) +{ + return height * width / 2; +} + +static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) +{ + float y_bottom = y_top+1; + + while (e) { + // brute force every pixel + + // compute intersection points with top & bottom + STBTT_assert(e->ey >= y_top); + + if (e->fdx == 0) { + float x0 = e->fx; + if (x0 < len) { + if (x0 >= 0) { + stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); + stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom); + } else { + stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom); + } + } + } else { + float x0 = e->fx; + float dx = e->fdx; + float xb = x0 + dx; + float x_top, x_bottom; + float sy0,sy1; + float dy = e->fdy; + STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); + + // compute endpoints of line segment clipped to this scanline (if the + // line segment starts on this scanline. x0 is the intersection of the + // line with y_top, but that may be off the line segment. + if (e->sy > y_top) { + x_top = x0 + dx * (e->sy - y_top); + sy0 = e->sy; + } else { + x_top = x0; + sy0 = y_top; + } + if (e->ey < y_bottom) { + x_bottom = x0 + dx * (e->ey - y_top); + sy1 = e->ey; + } else { + x_bottom = xb; + sy1 = y_bottom; + } + + if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) { + // from here on, we don't have to range check x values + + if ((int) x_top == (int) x_bottom) { + float height; + // simple case, only spans one pixel + int x = (int) x_top; + height = (sy1 - sy0) * e->direction; + STBTT_assert(x >= 0 && x < len); + scanline[x] += stbtt__position_trapezoid_area(height, x_top, x+1.0f, x_bottom, x+1.0f); + scanline_fill[x] += height; // everything right of this pixel is filled + } else { + int x,x1,x2; + float y_crossing, y_final, step, sign, area; + // covers 2+ pixels + if (x_top > x_bottom) { + // flip scanline vertically; signed area is the same + float t; + sy0 = y_bottom - (sy0 - y_top); + sy1 = y_bottom - (sy1 - y_top); + t = sy0, sy0 = sy1, sy1 = t; + t = x_bottom, x_bottom = x_top, x_top = t; + dx = -dx; + dy = -dy; + t = x0, x0 = xb, xb = t; + } + STBTT_assert(dy >= 0); + STBTT_assert(dx >= 0); + + x1 = (int) x_top; + x2 = (int) x_bottom; + // compute intersection with y axis at x1+1 + y_crossing = y_top + dy * (x1+1 - x0); + + // compute intersection with y axis at x2 + y_final = y_top + dy * (x2 - x0); + + // x1 x_top x2 x_bottom + // y_top +------|-----+------------+------------+--------|---+------------+ + // | | | | | | + // | | | | | | + // sy0 | Txxxxx|............|............|............|............| + // y_crossing | *xxxxx.......|............|............|............| + // | | xxxxx..|............|............|............| + // | | /- xx*xxxx........|............|............| + // | | dy < | xxxxxx..|............|............| + // y_final | | \- | xx*xxx.........|............| + // sy1 | | | | xxxxxB...|............| + // | | | | | | + // | | | | | | + // y_bottom +------------+------------+------------+------------+------------+ + // + // goal is to measure the area covered by '.' in each pixel + + // if x2 is right at the right edge of x1, y_crossing can blow up, github #1057 + // @TODO: maybe test against sy1 rather than y_bottom? + if (y_crossing > y_bottom) + y_crossing = y_bottom; + + sign = e->direction; + + // area of the rectangle covered from sy0..y_crossing + area = sign * (y_crossing-sy0); + + // area of the triangle (x_top,sy0), (x1+1,sy0), (x1+1,y_crossing) + scanline[x1] += stbtt__sized_triangle_area(area, x1+1 - x_top); + + // check if final y_crossing is blown up; no test case for this + if (y_final > y_bottom) { + int denom = (x2 - (x1+1)); + y_final = y_bottom; + if (denom != 0) { // [DEAR IMGUI] Avoid div by zero (https://github.com/nothings/stb/issues/1316) + dy = (y_final - y_crossing ) / denom; // if denom=0, y_final = y_crossing, so y_final <= y_bottom + } + } + + // in second pixel, area covered by line segment found in first pixel + // is always a rectangle 1 wide * the height of that line segment; this + // is exactly what the variable 'area' stores. it also gets a contribution + // from the line segment within it. the THIRD pixel will get the first + // pixel's rectangle contribution, the second pixel's rectangle contribution, + // and its own contribution. the 'own contribution' is the same in every pixel except + // the leftmost and rightmost, a trapezoid that slides down in each pixel. + // the second pixel's contribution to the third pixel will be the + // rectangle 1 wide times the height change in the second pixel, which is dy. + + step = sign * dy * 1; // dy is dy/dx, change in y for every 1 change in x, + // which multiplied by 1-pixel-width is how much pixel area changes for each step in x + // so the area advances by 'step' every time + + for (x = x1+1; x < x2; ++x) { + scanline[x] += area + step/2; // area of trapezoid is 1*step/2 + area += step; + } + STBTT_assert(STBTT_fabs(area) <= 1.01f); // accumulated error from area += step unless we round step down + STBTT_assert(sy1 > y_final-0.01f); + + // area covered in the last pixel is the rectangle from all the pixels to the left, + // plus the trapezoid filled by the line segment in this pixel all the way to the right edge + scanline[x2] += area + sign * stbtt__position_trapezoid_area(sy1-y_final, (float) x2, x2+1.0f, x_bottom, x2+1.0f); + + // the rest of the line is filled based on the total height of the line segment in this pixel + scanline_fill[x2] += sign * (sy1-sy0); + } + } else { + // if edge goes outside of box we're drawing, we require + // clipping logic. since this does not match the intended use + // of this library, we use a different, very slow brute + // force implementation + // note though that this does happen some of the time because + // x_top and x_bottom can be extrapolated at the top & bottom of + // the shape and actually lie outside the bounding box + int x; + for (x=0; x < len; ++x) { + // cases: + // + // there can be up to two intersections with the pixel. any intersection + // with left or right edges can be handled by splitting into two (or three) + // regions. intersections with top & bottom do not necessitate case-wise logic. + // + // the old way of doing this found the intersections with the left & right edges, + // then used some simple logic to produce up to three segments in sorted order + // from top-to-bottom. however, this had a problem: if an x edge was epsilon + // across the x border, then the corresponding y position might not be distinct + // from the other y segment, and it might ignored as an empty segment. to avoid + // that, we need to explicitly produce segments based on x positions. + + // rename variables to clearly-defined pairs + float y0 = y_top; + float x1 = (float) (x); + float x2 = (float) (x+1); + float x3 = xb; + float y3 = y_bottom; + + // x = e->x + e->dx * (y-y_top) + // (y-y_top) = (x - e->x) / e->dx + // y = (x - e->x) / e->dx + y_top + float y1 = (x - x0) / dx + y_top; + float y2 = (x+1 - x0) / dx + y_top; + + if (x0 < x1 && x3 > x2) { // three segments descending down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x1 && x0 > x2) { // three segments descending down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else { // one segment + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3); + } + } + } + } + e = e->next; + } +} + +// directly AA rasterize edges w/o supersampling +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0, i; + float scanline_data[129], *scanline, *scanline2; + + STBTT__NOTUSED(vsubsample); + + if (result->w > 64) + scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); + else + scanline = scanline_data; + + scanline2 = scanline + result->w; + + y = off_y; + e[n].y0 = (float) (off_y + result->h) + 1; + + while (j < result->h) { + // find center of pixel for this scanline + float scan_y_top = y + 0.0f; + float scan_y_bottom = y + 1.0f; + stbtt__active_edge **step = &active; + + STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); + STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0])); + + // update all active edges; + // remove all active edges that terminate before the top of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y_top) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + step = &((*step)->next); // advance through list + } + } + + // insert all edges that start before the bottom of this scanline + while (e->y0 <= scan_y_bottom) { + if (e->y0 != e->y1) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata); + if (z != NULL) { + if (j == 0 && off_y != 0) { + if (z->ey < scan_y_top) { + // this can happen due to subpixel positioning and some kind of fp rounding error i think + z->ey = scan_y_top; + } + } + STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds + // insert at front + z->next = active; + active = z; + } + } + ++e; + } + + // now process all active edges + if (active) + stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); + + { + float sum = 0; + for (i=0; i < result->w; ++i) { + float k; + int m; + sum += scanline2[i]; + k = scanline[i] + sum; + k = (float) STBTT_fabs(k)*255 + 0.5f; + m = (int) k; + if (m > 255) m = 255; + result->pixels[j*result->stride + i] = (unsigned char) m; + } + } + // advance all the edges + step = &active; + while (*step) { + stbtt__active_edge *z = *step; + z->fx += z->fdx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + + ++y; + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0) + +static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n) +{ + int i,j; + for (i=1; i < n; ++i) { + stbtt__edge t = p[i], *a = &t; + j = i; + while (j > 0) { + stbtt__edge *b = &p[j-1]; + int c = STBTT__COMPARE(a,b); + if (!c) break; + p[j] = p[j-1]; + --j; + } + if (i != j) + p[j] = t; + } +} + +static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n) +{ + /* threshold for transitioning to insertion sort */ + while (n > 12) { + stbtt__edge t; + int c01,c12,c,m,i,j; + + /* compute median of three */ + m = n >> 1; + c01 = STBTT__COMPARE(&p[0],&p[m]); + c12 = STBTT__COMPARE(&p[m],&p[n-1]); + /* if 0 >= mid >= end, or 0 < mid < end, then use mid */ + if (c01 != c12) { + /* otherwise, we'll need to swap something else to middle */ + int z; + c = STBTT__COMPARE(&p[0],&p[n-1]); + /* 0>mid && midn => n; 0 0 */ + /* 0n: 0>n => 0; 0 n */ + z = (c == c12) ? 0 : n-1; + t = p[z]; + p[z] = p[m]; + p[m] = t; + } + /* now p[m] is the median-of-three */ + /* swap it to the beginning so it won't move around */ + t = p[0]; + p[0] = p[m]; + p[m] = t; + + /* partition loop */ + i=1; + j=n-1; + for(;;) { + /* handling of equality is crucial here */ + /* for sentinels & efficiency with duplicates */ + for (;;++i) { + if (!STBTT__COMPARE(&p[i], &p[0])) break; + } + for (;;--j) { + if (!STBTT__COMPARE(&p[0], &p[j])) break; + } + /* make sure we haven't crossed */ + if (i >= j) break; + t = p[i]; + p[i] = p[j]; + p[j] = t; + + ++i; + --j; + } + /* recurse on smaller side, iterate on larger */ + if (j < (n-i)) { + stbtt__sort_edges_quicksort(p,j); + p = p+i; + n = n-i; + } else { + stbtt__sort_edges_quicksort(p+i, n-i); + n = j; + } + } +} + +static void stbtt__sort_edges(stbtt__edge *p, int n) +{ + stbtt__sort_edges_quicksort(p, n); + stbtt__sort_edges_ins_sort(p, n); +} + +typedef struct +{ + float x,y; +} stbtt__point; + +static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) +{ + float y_scale_inv = invert ? -scale_y : scale_y; + stbtt__edge *e; + int n,i,j,k,m; +#if STBTT_RASTERIZER_VERSION == 1 + int vsubsample = result->h < 8 ? 15 : 5; +#elif STBTT_RASTERIZER_VERSION == 2 + int vsubsample = 1; +#else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + // vsubsample should divide 255 evenly; otherwise we won't reach full opacity + + // now we have to blow out the windings into explicit edge lists + n = 0; + for (i=0; i < windings; ++i) + n += wcount[i]; + + e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel + if (e == 0) return; + n = 0; + + m=0; + for (i=0; i < windings; ++i) { + stbtt__point *p = pts + m; + m += wcount[i]; + j = wcount[i]-1; + for (k=0; k < wcount[i]; j=k++) { + int a=k,b=j; + // skip the edge if horizontal + if (p[j].y == p[k].y) + continue; + // add edge from j to k to the list + e[n].invert = 0; + if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { + e[n].invert = 1; + a=j,b=k; + } + e[n].x0 = p[a].x * scale_x + shift_x; + e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample; + e[n].x1 = p[b].x * scale_x + shift_x; + e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample; + ++n; + } + } + + // now sort the edges by their highest point (should snap to integer, and then by x) + //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); + stbtt__sort_edges(e, n); + + // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule + stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); + + STBTT_free(e, userdata); +} + +static void stbtt__add_point(stbtt__point *points, int n, float x, float y) +{ + if (!points) return; // during first pass, it's unallocated + points[n].x = x; + points[n].y = y; +} + +// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching +static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) +{ + // midpoint + float mx = (x0 + 2*x1 + x2)/4; + float my = (y0 + 2*y1 + y2)/4; + // versus directly drawn line + float dx = (x0+x2)/2 - mx; + float dy = (y0+y2)/2 - my; + if (n > 16) // 65536 segments on one curve better be enough! + return 1; + if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA + stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x2,y2); + *num_points = *num_points+1; + } + return 1; +} + +static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n) +{ + // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough + float dx0 = x1-x0; + float dy0 = y1-y0; + float dx1 = x2-x1; + float dy1 = y2-y1; + float dx2 = x3-x2; + float dy2 = y3-y2; + float dx = x3-x0; + float dy = y3-y0; + float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); + float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy); + float flatness_squared = longlen*longlen-shortlen*shortlen; + + if (n > 16) // 65536 segments on one curve better be enough! + return; + + if (flatness_squared > objspace_flatness_squared) { + float x01 = (x0+x1)/2; + float y01 = (y0+y1)/2; + float x12 = (x1+x2)/2; + float y12 = (y1+y2)/2; + float x23 = (x2+x3)/2; + float y23 = (y2+y3)/2; + + float xa = (x01+x12)/2; + float ya = (y01+y12)/2; + float xb = (x12+x23)/2; + float yb = (y12+y23)/2; + + float mx = (xa+xb)/2; + float my = (ya+yb)/2; + + stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x3,y3); + *num_points = *num_points+1; + } +} + +// returns number of contours +static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) +{ + stbtt__point *points=0; + int num_points=0; + + float objspace_flatness_squared = objspace_flatness * objspace_flatness; + int i,n=0,start=0, pass; + + // count how many "moves" there are to get the contour count + for (i=0; i < num_verts; ++i) + if (vertices[i].type == STBTT_vmove) + ++n; + + *num_contours = n; + if (n == 0) return 0; + + *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); + + if (*contour_lengths == 0) { + *num_contours = 0; + return 0; + } + + // make two passes through the points so we don't need to realloc + for (pass=0; pass < 2; ++pass) { + float x=0,y=0; + if (pass == 1) { + points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); + if (points == NULL) goto error; + } + num_points = 0; + n= -1; + for (i=0; i < num_verts; ++i) { + switch (vertices[i].type) { + case STBTT_vmove: + // start the next contour + if (n >= 0) + (*contour_lengths)[n] = num_points - start; + ++n; + start = num_points; + + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x,y); + break; + case STBTT_vline: + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x, y); + break; + case STBTT_vcurve: + stbtt__tesselate_curve(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + case STBTT_vcubic: + stbtt__tesselate_cubic(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].cx1, vertices[i].cy1, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + } + } + (*contour_lengths)[n] = num_points - start; + } + + return points; +error: + STBTT_free(points, userdata); + STBTT_free(*contour_lengths, userdata); + *contour_lengths = 0; + *num_contours = 0; + return NULL; +} + +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) +{ + float scale = scale_x > scale_y ? scale_y : scale_x; + int winding_count = 0; + int *winding_lengths = NULL; + stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); + if (windings) { + stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); + STBTT_free(winding_lengths, userdata); + STBTT_free(windings, userdata); + } +} + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + int ix0,iy0,ix1,iy1; + stbtt__bitmap gbm; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + + if (scale_x == 0) scale_x = scale_y; + if (scale_y == 0) { + if (scale_x == 0) { + STBTT_free(vertices, info->userdata); + return NULL; + } + scale_y = scale_x; + } + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); + + // now we get the size + gbm.w = (ix1 - ix0); + gbm.h = (iy1 - iy0); + gbm.pixels = NULL; // in case we error + + if (width ) *width = gbm.w; + if (height) *height = gbm.h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + if (gbm.w && gbm.h) { + gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); + if (gbm.pixels) { + gbm.stride = gbm.w; + + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); + } + } + STBTT_free(vertices, info->userdata); + return gbm.pixels; +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); +} + +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) +{ + int ix0,iy0; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + stbtt__bitmap gbm; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); + gbm.pixels = output; + gbm.w = out_w; + gbm.h = out_h; + gbm.stride = out_stride; + + if (gbm.w && gbm.h) + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); + + STBTT_free(vertices, info->userdata); +} + +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) +{ + stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); +} + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-CRAPPY packing to keep source code small + +static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata) +{ + float scale; + int x,y,bottom_y, i; + stbtt_fontinfo f; + f.userdata = NULL; + if (!stbtt_InitFont(&f, data, offset)) + return -1; + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + x=y=1; + bottom_y = 1; + + scale = stbtt_ScaleForPixelHeight(&f, pixel_height); + + for (i=0; i < num_chars; ++i) { + int advance, lsb, x0,y0,x1,y1,gw,gh; + int g = stbtt_FindGlyphIndex(&f, first_char + i); + stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); + stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); + gw = x1-x0; + gh = y1-y0; + if (x + gw + 1 >= pw) + y = bottom_y, x = 1; // advance to next row + if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row + return -i; + STBTT_assert(x+gw < pw); + STBTT_assert(y+gh < ph); + stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); + chardata[i].x0 = (stbtt_int16) x; + chardata[i].y0 = (stbtt_int16) y; + chardata[i].x1 = (stbtt_int16) (x + gw); + chardata[i].y1 = (stbtt_int16) (y + gh); + chardata[i].xadvance = scale * advance; + chardata[i].xoff = (float) x0; + chardata[i].yoff = (float) y0; + x = x + gw + 1; + if (y+gh+1 > bottom_y) + bottom_y = y+gh+1; + } + return bottom_y; +} + +STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) +{ + float d3d_bias = opengl_fillrule ? 0 : -0.5f; + float ipw = 1.0f / pw, iph = 1.0f / ph; + const stbtt_bakedchar *b = chardata + char_index; + int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); + int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); + + q->x0 = round_x + d3d_bias; + q->y0 = round_y + d3d_bias; + q->x1 = round_x + b->x1 - b->x0 + d3d_bias; + q->y1 = round_y + b->y1 - b->y0 + d3d_bias; + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// rectangle packing replacement routines if you don't have stb_rect_pack.h +// + +#ifndef STB_RECT_PACK_VERSION + +typedef int stbrp_coord; + +//////////////////////////////////////////////////////////////////////////////////// +// // +// // +// COMPILER WARNING ?!?!? // +// // +// // +// if you get a compile warning due to these symbols being defined more than // +// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" // +// // +//////////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + int width,height; + int x,y,bottom_y; +} stbrp_context; + +typedef struct +{ + unsigned char x; +} stbrp_node; + +struct stbrp_rect +{ + stbrp_coord x,y; + int id,w,h,was_packed; +}; + +static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes) +{ + con->width = pw; + con->height = ph; + con->x = 0; + con->y = 0; + con->bottom_y = 0; + STBTT__NOTUSED(nodes); + STBTT__NOTUSED(num_nodes); +} + +static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects) +{ + int i; + for (i=0; i < num_rects; ++i) { + if (con->x + rects[i].w > con->width) { + con->x = 0; + con->y = con->bottom_y; + } + if (con->y + rects[i].h > con->height) + break; + rects[i].x = con->x; + rects[i].y = con->y; + rects[i].was_packed = 1; + con->x += rects[i].w; + if (con->y + rects[i].h > con->bottom_y) + con->bottom_y = con->y + rects[i].h; + } + for ( ; i < num_rects; ++i) + rects[i].was_packed = 0; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If +// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy. + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context) +{ + stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context); + int num_nodes = pw - padding; + stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context); + + if (context == NULL || nodes == NULL) { + if (context != NULL) STBTT_free(context, alloc_context); + if (nodes != NULL) STBTT_free(nodes , alloc_context); + return 0; + } + + spc->user_allocator_context = alloc_context; + spc->width = pw; + spc->height = ph; + spc->pixels = pixels; + spc->pack_info = context; + spc->nodes = nodes; + spc->padding = padding; + spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw; + spc->h_oversample = 1; + spc->v_oversample = 1; + spc->skip_missing = 0; + + stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes); + + if (pixels) + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + + return 1; +} + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc) +{ + STBTT_free(spc->nodes , spc->user_allocator_context); + STBTT_free(spc->pack_info, spc->user_allocator_context); +} + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample) +{ + STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE); + STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE); + if (h_oversample <= STBTT_MAX_OVERSAMPLE) + spc->h_oversample = h_oversample; + if (v_oversample <= STBTT_MAX_OVERSAMPLE) + spc->v_oversample = v_oversample; +} + +STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip) +{ + spc->skip_missing = skip; +} + +#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1) + +static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_w = w - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < h; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < w; ++i) { + STBTT_assert(pixels[i] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i] = (unsigned char) (total / kernel_width); + } + + pixels += stride_in_bytes; + } +} + +static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_h = h - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < w; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < h; ++i) { + STBTT_assert(pixels[i*stride_in_bytes] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + + pixels += 1; + } +} + +static float stbtt__oversample_shift(int oversample) +{ + if (!oversample) + return 0.0f; + + // The prefilter is a box filter of width "oversample", + // which shifts phase by (oversample - 1)/2 pixels in + // oversampled space. We want to shift in the opposite + // direction to counter this. + return (float)-(oversample - 1) / (2.0f * (float)oversample); +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k; + int missing_glyph_added = 0; + + k=0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + ranges[i].h_oversample = (unsigned char) spc->h_oversample; + ranges[i].v_oversample = (unsigned char) spc->v_oversample; + for (j=0; j < ranges[i].num_chars; ++j) { + int x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + if (glyph == 0 && (spc->skip_missing || missing_glyph_added)) { + rects[k].w = rects[k].h = 0; + } else { + stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + &x0,&y0,&x1,&y1); + rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); + rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); + if (glyph == 0) + missing_glyph_added = 1; + } + ++k; + } + } + + return k; +} + +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, + output, + out_w - (prefilter_x - 1), + out_h - (prefilter_y - 1), + out_stride, + scale_x, + scale_y, + shift_x, + shift_y, + glyph); + + if (prefilter_x > 1) + stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x); + + if (prefilter_y > 1) + stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y); + + *sub_x = stbtt__oversample_shift(prefilter_x); + *sub_y = stbtt__oversample_shift(prefilter_y); +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k, missing_glyph = -1, return_value = 1; + + // save current values + int old_h_over = spc->h_oversample; + int old_v_over = spc->v_oversample; + + k = 0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + float recip_h,recip_v,sub_x,sub_y; + spc->h_oversample = ranges[i].h_oversample; + spc->v_oversample = ranges[i].v_oversample; + recip_h = 1.0f / spc->h_oversample; + recip_v = 1.0f / spc->v_oversample; + sub_x = stbtt__oversample_shift(spc->h_oversample); + sub_y = stbtt__oversample_shift(spc->v_oversample); + for (j=0; j < ranges[i].num_chars; ++j) { + stbrp_rect *r = &rects[k]; + if (r->was_packed && r->w != 0 && r->h != 0) { + stbtt_packedchar *bc = &ranges[i].chardata_for_range[j]; + int advance, lsb, x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + stbrp_coord pad = (stbrp_coord) spc->padding; + + // pad on left and top + r->x += pad; + r->y += pad; + r->w -= pad; + r->h -= pad; + stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb); + stbtt_GetGlyphBitmapBox(info, glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + &x0,&y0,&x1,&y1); + stbtt_MakeGlyphBitmapSubpixel(info, + spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w - spc->h_oversample+1, + r->h - spc->v_oversample+1, + spc->stride_in_bytes, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + glyph); + + if (spc->h_oversample > 1) + stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->h_oversample); + + if (spc->v_oversample > 1) + stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->v_oversample); + + bc->x0 = (stbtt_int16) r->x; + bc->y0 = (stbtt_int16) r->y; + bc->x1 = (stbtt_int16) (r->x + r->w); + bc->y1 = (stbtt_int16) (r->y + r->h); + bc->xadvance = scale * advance; + bc->xoff = (float) x0 * recip_h + sub_x; + bc->yoff = (float) y0 * recip_v + sub_y; + bc->xoff2 = (x0 + r->w) * recip_h + sub_x; + bc->yoff2 = (y0 + r->h) * recip_v + sub_y; + + if (glyph == 0) + missing_glyph = j; + } else if (spc->skip_missing) { + return_value = 0; + } else if (r->was_packed && r->w == 0 && r->h == 0 && missing_glyph >= 0) { + ranges[i].chardata_for_range[j] = ranges[i].chardata_for_range[missing_glyph]; + } else { + return_value = 0; // if any fail, report failure + } + + ++k; + } + } + + // restore original values + spc->h_oversample = old_h_over; + spc->v_oversample = old_v_over; + + return return_value; +} + +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects) +{ + stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects); +} + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) +{ + stbtt_fontinfo info; + int i, j, n, return_value; // [DEAR IMGUI] removed = 1; + //stbrp_context *context = (stbrp_context *) spc->pack_info; + stbrp_rect *rects; + + // flag all characters as NOT packed + for (i=0; i < num_ranges; ++i) + for (j=0; j < ranges[i].num_chars; ++j) + ranges[i].chardata_for_range[j].x0 = + ranges[i].chardata_for_range[j].y0 = + ranges[i].chardata_for_range[j].x1 = + ranges[i].chardata_for_range[j].y1 = 0; + + n = 0; + for (i=0; i < num_ranges; ++i) + n += ranges[i].num_chars; + + rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context); + if (rects == NULL) + return 0; + + info.userdata = spc->user_allocator_context; + stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index)); + + n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects); + + stbtt_PackFontRangesPackRects(spc, rects, n); + + return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects); + + STBTT_free(rects, spc->user_allocator_context); + return return_value; +} + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, + int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) +{ + stbtt_pack_range range; + range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range; + range.array_of_unicode_codepoints = NULL; + range.num_chars = num_chars_in_range; + range.chardata_for_range = chardata_for_range; + range.font_size = font_size; + return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); +} + +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap) +{ + int i_ascent, i_descent, i_lineGap; + float scale; + stbtt_fontinfo info; + stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index)); + scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size); + stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap); + *ascent = (float) i_ascent * scale; + *descent = (float) i_descent * scale; + *lineGap = (float) i_lineGap * scale; +} + +STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) +{ + float ipw = 1.0f / pw, iph = 1.0f / ph; + const stbtt_packedchar *b = chardata + char_index; + + if (align_to_integer) { + float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); + float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); + q->x0 = x; + q->y0 = y; + q->x1 = x + b->xoff2 - b->xoff; + q->y1 = y + b->yoff2 - b->yoff; + } else { + q->x0 = *xpos + b->xoff; + q->y0 = *ypos + b->yoff; + q->x1 = *xpos + b->xoff2; + q->y1 = *ypos + b->yoff2; + } + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// sdf computation +// + +#define STBTT_min(a,b) ((a) < (b) ? (a) : (b)) +#define STBTT_max(a,b) ((a) < (b) ? (b) : (a)) + +static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2]) +{ + float q0perp = q0[1]*ray[0] - q0[0]*ray[1]; + float q1perp = q1[1]*ray[0] - q1[0]*ray[1]; + float q2perp = q2[1]*ray[0] - q2[0]*ray[1]; + float roperp = orig[1]*ray[0] - orig[0]*ray[1]; + + float a = q0perp - 2*q1perp + q2perp; + float b = q1perp - q0perp; + float c = q0perp - roperp; + + float s0 = 0., s1 = 0.; + int num_s = 0; + + if (a != 0.0) { + float discr = b*b - a*c; + if (discr > 0.0) { + float rcpna = -1 / a; + float d = (float) STBTT_sqrt(discr); + s0 = (b+d) * rcpna; + s1 = (b-d) * rcpna; + if (s0 >= 0.0 && s0 <= 1.0) + num_s = 1; + if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) { + if (num_s == 0) s0 = s1; + ++num_s; + } + } + } else { + // 2*b*s + c = 0 + // s = -c / (2*b) + s0 = c / (-2 * b); + if (s0 >= 0.0 && s0 <= 1.0) + num_s = 1; + } + + if (num_s == 0) + return 0; + else { + float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); + float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; + + float q0d = q0[0]*rayn_x + q0[1]*rayn_y; + float q1d = q1[0]*rayn_x + q1[1]*rayn_y; + float q2d = q2[0]*rayn_x + q2[1]*rayn_y; + float rod = orig[0]*rayn_x + orig[1]*rayn_y; + + float q10d = q1d - q0d; + float q20d = q2d - q0d; + float q0rd = q0d - rod; + + hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d; + hits[0][1] = a*s0+b; + + if (num_s > 1) { + hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d; + hits[1][1] = a*s1+b; + return 2; + } else { + return 1; + } + } +} + +static int equal(float *a, float *b) +{ + return (a[0] == b[0] && a[1] == b[1]); +} + +static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts) +{ + int i; + float orig[2], ray[2] = { 1, 0 }; + float y_frac; + int winding = 0; + + // make sure y never passes through a vertex of the shape + y_frac = (float) STBTT_fmod(y, 1.0f); + if (y_frac < 0.01f) + y += 0.01f; + else if (y_frac > 0.99f) + y -= 0.01f; + + orig[0] = x; + orig[1] = y; + + // test a ray from (-infinity,y) to (x,y) + for (i=0; i < nverts; ++i) { + if (verts[i].type == STBTT_vline) { + int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y; + int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y; + if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + if (x_inter < x) + winding += (y0 < y1) ? 1 : -1; + } + } + if (verts[i].type == STBTT_vcurve) { + int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ; + int x1 = (int) verts[i ].cx, y1 = (int) verts[i ].cy; + int x2 = (int) verts[i ].x , y2 = (int) verts[i ].y ; + int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2)); + int by = STBTT_max(y0,STBTT_max(y1,y2)); + if (y > ay && y < by && x > ax) { + float q0[2],q1[2],q2[2]; + float hits[2][2]; + q0[0] = (float)x0; + q0[1] = (float)y0; + q1[0] = (float)x1; + q1[1] = (float)y1; + q2[0] = (float)x2; + q2[1] = (float)y2; + if (equal(q0,q1) || equal(q1,q2)) { + x0 = (int)verts[i-1].x; + y0 = (int)verts[i-1].y; + x1 = (int)verts[i ].x; + y1 = (int)verts[i ].y; + if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + if (x_inter < x) + winding += (y0 < y1) ? 1 : -1; + } + } else { + int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits); + if (num_hits >= 1) + if (hits[0][0] < 0) + winding += (hits[0][1] < 0 ? -1 : 1); + if (num_hits >= 2) + if (hits[1][0] < 0) + winding += (hits[1][1] < 0 ? -1 : 1); + } + } + } + } + return winding; +} + +static float stbtt__cuberoot( float x ) +{ + if (x<0) + return -(float) STBTT_pow(-x,1.0f/3.0f); + else + return (float) STBTT_pow( x,1.0f/3.0f); +} + +// x^3 + a*x^2 + b*x + c = 0 +static int stbtt__solve_cubic(float a, float b, float c, float* r) +{ + float s = -a / 3; + float p = b - a*a / 3; + float q = a * (2*a*a - 9*b) / 27 + c; + float p3 = p*p*p; + float d = q*q + 4*p3 / 27; + if (d >= 0) { + float z = (float) STBTT_sqrt(d); + float u = (-q + z) / 2; + float v = (-q - z) / 2; + u = stbtt__cuberoot(u); + v = stbtt__cuberoot(v); + r[0] = s + u + v; + return 1; + } else { + float u = (float) STBTT_sqrt(-p/3); + float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative + float m = (float) STBTT_cos(v); + float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; + r[0] = s + u * 2 * m; + r[1] = s - u * (m + n); + r[2] = s - u * (m - n); + + //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe? + //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f); + //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f); + return 3; + } +} + +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +{ + float scale_x = scale, scale_y = scale; + int ix0,iy0,ix1,iy1; + int w,h; + unsigned char *data; + + if (scale == 0) return NULL; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); + + // if empty, return NULL + if (ix0 == ix1 || iy0 == iy1) + return NULL; + + ix0 -= padding; + iy0 -= padding; + ix1 += padding; + iy1 += padding; + + w = (ix1 - ix0); + h = (iy1 - iy0); + + if (width ) *width = w; + if (height) *height = h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + // invert for y-downwards bitmaps + scale_y = -scale_y; + + { + int x,y,i,j; + float *precompute; + stbtt_vertex *verts; + int num_verts = stbtt_GetGlyphShape(info, glyph, &verts); + data = (unsigned char *) STBTT_malloc(w * h, info->userdata); + precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata); + + for (i=0,j=num_verts-1; i < num_verts; j=i++) { + if (verts[i].type == STBTT_vline) { + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; + float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); + precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist; + } else if (verts[i].type == STBTT_vcurve) { + float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; + float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; + float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float len2 = bx*bx + by*by; + if (len2 != 0.0f) + precompute[i] = 1.0f / (bx*bx + by*by); + else + precompute[i] = 0.0f; + } else + precompute[i] = 0.0f; + } + + for (y=iy0; y < iy1; ++y) { + for (x=ix0; x < ix1; ++x) { + float val; + float min_dist = 999999.0f; + float sx = (float) x + 0.5f; + float sy = (float) y + 0.5f; + float x_gspace = (sx / scale_x); + float y_gspace = (sy / scale_y); + + int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path + + for (i=0; i < num_verts; ++i) { + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + + if (verts[i].type == STBTT_vline && precompute[i] != 0.0f) { + float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; + + float dist,dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + + // coarse culling against bbox + //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && + // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) + dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; + STBTT_assert(i != 0); + if (dist < min_dist) { + // check position along line + // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0) + // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy) + float dx = x1-x0, dy = y1-y0; + float px = x0-sx, py = y0-sy; + // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy + // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve + float t = -(px*dx + py*dy) / (dx*dx + dy*dy); + if (t >= 0.0f && t <= 1.0f) + min_dist = dist; + } + } else if (verts[i].type == STBTT_vcurve) { + float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; + float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; + float box_x0 = STBTT_min(STBTT_min(x0,x1),x2); + float box_y0 = STBTT_min(STBTT_min(y0,y1),y2); + float box_x1 = STBTT_max(STBTT_max(x0,x1),x2); + float box_y1 = STBTT_max(STBTT_max(y0,y1),y2); + // coarse culling against bbox to avoid computing cubic unnecessarily + if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) { + int num=0; + float ax = x1-x0, ay = y1-y0; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float mx = x0 - sx, my = y0 - sy; + float res[3] = {0.f,0.f,0.f}; + float px,py,t,it,dist2; + float a_inv = precompute[i]; + if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula + float a = 3*(ax*bx + ay*by); + float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); + float c = mx*ax+my*ay; + if (a == 0.0) { // if a is 0, it's linear + if (b != 0.0) { + res[num++] = -c/b; + } + } else { + float discriminant = b*b - 4*a*c; + if (discriminant < 0) + num = 0; + else { + float root = (float) STBTT_sqrt(discriminant); + res[0] = (-b - root)/(2*a); + res[1] = (-b + root)/(2*a); + num = 2; // don't bother distinguishing 1-solution case, as code below will still work + } + } + } else { + float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point + float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; + float d = (mx*ax+my*ay) * a_inv; + num = stbtt__solve_cubic(b, c, d, res); + } + dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + + if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { + t = res[0], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) { + t = res[1], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) { + t = res[2], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + } + } + } + if (winding == 0) + min_dist = -min_dist; // if outside the shape, value is negative + val = onedge_value + pixel_dist_scale * min_dist; + if (val < 0) + val = 0; + else if (val > 255) + val = 255; + data[(y-iy0)*w+(x-ix0)] = (unsigned char) val; + } + } + STBTT_free(precompute, info->userdata); + STBTT_free(verts, info->userdata); + } + return data; +} + +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff); +} + +STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +////////////////////////////////////////////////////////////////////////////// +// +// font name matching -- recommended not to use this +// + +// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string +static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) +{ + stbtt_int32 i=0; + + // convert utf16 to utf8 and compare the results while converting + while (len2) { + stbtt_uint16 ch = s2[0]*256 + s2[1]; + if (ch < 0x80) { + if (i >= len1) return -1; + if (s1[i++] != ch) return -1; + } else if (ch < 0x800) { + if (i+1 >= len1) return -1; + if (s1[i++] != 0xc0 + (ch >> 6)) return -1; + if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; + } else if (ch >= 0xd800 && ch < 0xdc00) { + stbtt_uint32 c; + stbtt_uint16 ch2 = s2[2]*256 + s2[3]; + if (i+3 >= len1) return -1; + c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; + if (s1[i++] != 0xf0 + (c >> 18)) return -1; + if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; + s2 += 2; // plus another 2 below + len2 -= 2; + } else if (ch >= 0xdc00 && ch < 0xe000) { + return -1; + } else { + if (i+2 >= len1) return -1; + if (s1[i++] != 0xe0 + (ch >> 12)) return -1; + if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; + } + s2 += 2; + len2 -= 2; + } + return i; +} + +static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) +{ + return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2); +} + +// returns results in whatever encoding you request... but note that 2-byte encodings +// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) +{ + stbtt_int32 i,count,stringOffset; + stbtt_uint8 *fc = font->data; + stbtt_uint32 offset = font->fontstart; + stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return NULL; + + count = ttUSHORT(fc+nm+2); + stringOffset = nm + ttUSHORT(fc+nm+4); + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) + && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { + *length = ttUSHORT(fc+loc+8); + return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); + } + } + return NULL; +} + +static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) +{ + stbtt_int32 i; + stbtt_int32 count = ttUSHORT(fc+nm+2); + stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); + + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + stbtt_int32 id = ttUSHORT(fc+loc+6); + if (id == target_id) { + // find the encoding + stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); + + // is this a Unicode encoding? + if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { + stbtt_int32 slen = ttUSHORT(fc+loc+8); + stbtt_int32 off = ttUSHORT(fc+loc+10); + + // check if there's a prefix match + stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); + if (matchlen >= 0) { + // check for target_id+1 immediately following, with same encoding & language + if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { + slen = ttUSHORT(fc+loc+12+8); + off = ttUSHORT(fc+loc+12+10); + if (slen == 0) { + if (matchlen == nlen) + return 1; + } else if (matchlen < nlen && name[matchlen] == ' ') { + ++matchlen; + if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) + return 1; + } + } else { + // if nothing immediately following + if (matchlen == nlen) + return 1; + } + } + } + + // @TODO handle other encodings + } + } + return 0; +} + +static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) +{ + stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); + stbtt_uint32 nm,hd; + if (!stbtt__isfont(fc+offset)) return 0; + + // check italics/bold/underline flags in macStyle... + if (flags) { + hd = stbtt__find_table(fc, offset, "head"); + if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; + } + + nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return 0; + + if (flags) { + // if we checked the macStyle flags, then just check the family and ignore the subfamily + if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } else { + if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } + + return 0; +} + +static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags) +{ + stbtt_int32 i; + for (i=0;;++i) { + stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); + if (off < 0) return off; + if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) + return off; + } +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" +#endif + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, + float pixel_height, unsigned char *pixels, int pw, int ph, + int first_char, int num_chars, stbtt_bakedchar *chardata) +{ + return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); +} + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index) +{ + return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index); +} + +STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data) +{ + return stbtt_GetNumberOfFonts_internal((unsigned char *) data); +} + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset) +{ + return stbtt_InitFont_internal(info, (unsigned char *) data, offset); +} + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags) +{ + return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags); +} + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) +{ + return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2); +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#endif // STB_TRUETYPE_IMPLEMENTATION + + +// FULL VERSION HISTORY +// +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning +// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() +// 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod +// 1.18 (2018-01-29) add missing function +// 1.17 (2017-07-23) make more arguments const; doc fix +// 1.16 (2017-07-12) SDF support +// 1.15 (2017-03-03) make more arguments const +// 1.14 (2017-01-16) num-fonts-in-TTC function +// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) allow user-defined fabs() replacement +// fix memory leak if fontsize=0.0 +// fix warning from duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// allow PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine) +// also more precise AA rasterizer, except if shapes overlap +// remove need for STBTT_sort +// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC +// 1.04 (2015-04-15) typo in example +// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes +// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++ +// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match +// non-oversampled; STBTT_POINT_SIZE for packed case only +// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling +// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg) +// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID +// 0.8b (2014-07-07) fix a warning +// 0.8 (2014-05-25) fix a few more warnings +// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back +// 0.6c (2012-07-24) improve documentation +// 0.6b (2012-07-20) fix a few more warnings +// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, +// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty +// 0.5 (2011-12-09) bugfixes: +// subpixel glyph renderer computed wrong bounding box +// first vertex of shape can be off-curve (FreeSans) +// 0.4b (2011-12-03) fixed an error in the font baking example +// 0.4 (2011-12-01) kerning, subpixel rendering (tor) +// bugfixes for: +// codepoint-to-glyph conversion using table fmt=12 +// codepoint-to-glyph conversion using table fmt=4 +// stbtt_GetBakedQuad with non-square texture (Zer) +// updated Hello World! sample to use kerning and subpixel +// fixed some warnings +// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) +// userdata, malloc-from-userdata, non-zero fill (stb) +// 0.2 (2009-03-11) Fix unsigned/signed char warnings +// 0.1 (2009-03-09) First public release +// + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ diff --git a/include/pch.hpp b/include/pch.hpp index 09dfe5c2..194373d7 100644 --- a/include/pch.hpp +++ b/include/pch.hpp @@ -6,6 +6,7 @@ #include #include #include + #include #include #include @@ -18,6 +19,9 @@ #include +//suppose to be "GL/glut", yet GLUT/glut on mac +//#include + #include #include #include diff --git a/latex/Makefile b/latex/Makefile new file mode 100644 index 00000000..7f829721 --- /dev/null +++ b/latex/Makefile @@ -0,0 +1,27 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + latex_count=$(LATEX_COUNT) ; \ + while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/latex/doxygen.sty b/latex/doxygen.sty new file mode 100644 index 00000000..4bfc17fa --- /dev/null +++ b/latex/doxygen.sty @@ -0,0 +1,694 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
     ... 
    +\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used by description lists (using
    ...
    ) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcounter{subsubsubsection}[subsubsection] +\newcounter{subsubsubsubsection}[subsubsubsection] +\newcounter{subsubsubsubsubsection}[subsubsubsubsection] +\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] +\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} +\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} +\newcommand{\subsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsubsectionmark}[1]{} +\def\toclevel@subsubsubsection{4} +\def\toclevel@subsubsubsubsection{5} +\def\toclevel@subsubsubsubsubsection{6} +\def\toclevel@subsubsubsubsubsubsection{7} +\def\toclevel@paragraph{8} +\def\toclevel@subparagraph{9} + +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} + +\newcommand\l@subsubsubsection{\@dottedtocline{4}{6.1em}{7.8em}} +\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{6.1em}{9.4em}} +\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{6.1em}{11em}} +\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{6.1em}{12.6em}} +\renewcommand\l@paragraph{\@dottedtocline{8}{6.1em}{14.2em}} +\renewcommand\l@subparagraph{\@dottedtocline{9}{6.1em}{15.8em}} +\makeatother +% the sectsty doesn't look to be maintained but gives, in our case, some warning like: +% LaTeX Warning: Command \underline has changed. +% Check if current package is valid. +% unfortunately had to copy the relevant part +\newcommand*{\doxypartfont} [1] + {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxychapterfont} [1] + {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxysectionfont} [1] + {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsectionfont} [1] + {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsubsectionfont} [1] + {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyparagraphfont} [1] + {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubparagraphfont} [1] + {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyminisecfont} [1] + {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} +\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% + \doxychapterfont{#1}% + \doxysectionfont{#1}% + \doxysubsectionfont{#1}% + \doxysubsubsectionfont{#1}% + \doxyparagraphfont{#1}% + \doxysubparagraphfont{#1}% + \doxyminisecfont{#1}}% +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/latex/etoc_doxygen.sty b/latex/etoc_doxygen.sty new file mode 100644 index 00000000..5f7e1274 --- /dev/null +++ b/latex/etoc_doxygen.sty @@ -0,0 +1,2178 @@ +%% +%% This is file etoc_doxygen.sty +%% +%% Apart from this header notice and the renaming from etoc to +%% etoc_doxygen (also in \ProvidesPackage) it is an identical +%% copy of +%% +%% etoc.sty +%% +%% at version 1.2b of 2023/07/01. +%% +%% This file has been provided to Doxygen team courtesy of the +%% author for benefit of users having a LaTeX installation not +%% yet providing version 1.2a or later of etoc, whose +%% deeplevels feature is required. +%% +%% The original source etoc.dtx (only of the latest version at +%% any given time) is available at +%% +%% https://ctan.org/pkg/etoc +%% +%% and contains the terms for copying and modification as well +%% as author contact information. +%% +%% In brief any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% Package: etoc +%% Version: 1.2b +%% License: LPPL 1.3c +%% Copyright (C) 2012-2023 Jean-Francois B. +\NeedsTeXFormat{LaTeX2e}[2003/12/01] +\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)] +\newif\ifEtoc@oldLaTeX +\@ifl@t@r\fmtversion{2020/10/01} + {} + {\Etoc@oldLaTeXtrue + \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak + Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak + as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak + and used to require it (from 1.1a to 1.2).\MessageBreak + This etoc (1.2b) does not *require* it, but has not been\MessageBreak + tested thoroughly on old LaTeX (especially if document\MessageBreak + does not use hyperref) and retrofitting was done only\MessageBreak + on basis of author partial remembrances of old context.\MessageBreak + Reported}} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=Etoc@} +\newif\ifEtoc@lof +\DeclareVoidOption{lof}{\Etoc@loftrue + \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak + Barely tested, use at own risk}% +} +\newif\ifEtoc@lot +\DeclareVoidOption{lot}{\Etoc@lottrue + \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak + Barely tested, use at own risk}% +} +\@ifclassloaded{memoir}{ +\PackageInfo{etoc} + {As this is with memoir class, all `...totoc' options\MessageBreak + are set true by default. Reported} +\DeclareBoolOption[true]{maintoctotoc} +\DeclareBoolOption[true]{localtoctotoc} +\DeclareBoolOption[true]{localloftotoc} +\DeclareBoolOption[true]{locallottotoc} +}{ +\DeclareBoolOption[false]{maintoctotoc} +\DeclareBoolOption[false]{localtoctotoc} +\DeclareBoolOption[false]{localloftotoc} +\DeclareBoolOption[false]{locallottotoc} +} +\DeclareBoolOption[true]{ouroboros} +\DeclareBoolOption[false]{deeplevels} +\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessKeyvalOptions* +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels} +\def\etocsetup#1{\setkeys{etoc}{#1}} +\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocalloftotoc{\ifEtoc@localloftotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocallottotoc{\ifEtoc@locallottotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\RequirePackage{multicol} +\def\etoc@{\etoc@} +\long\def\Etoc@gobtoetoc@ #1\etoc@{} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}} +\let\Etoc@global\@empty +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@numbered +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standardlines +\newif\ifEtoc@etocstyle +\newif\ifEtoc@classstyle +\newif\ifEtoc@keeporiginaltoc +\newif\ifEtoc@skipprefix +\newif\ifEtoc@isfirst +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\newif\ifEtoc@isemptytoc +\newif\ifEtoc@checksemptiness +\def\etocchecksemptiness {\Etoc@checksemptinesstrue } +\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse } +\newif\ifEtoc@notocifnotoc +\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue } +\newcounter{etoc@tocid} +\def\Etoc@tocext{toc} +\def\Etoc@lofext{lof} +\def\Etoc@lotext{lot} +\let\Etoc@currext\Etoc@tocext +\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi + } +\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@} +\expandafter\let\csname Etoc@-1@@\endcsname \m@ne +\expandafter\let\csname Etoc@0@@\endcsname \z@ +\expandafter\let\csname Etoc@1@@\endcsname \@ne +\expandafter\let\csname Etoc@2@@\endcsname \tw@ +\expandafter\let\csname Etoc@3@@\endcsname \thr@@ +\expandafter\chardef\csname Etoc@4@@\endcsname 4 +\expandafter\chardef\csname Etoc@5@@\endcsname 5 +\expandafter\chardef\csname Etoc@6@@\endcsname 6 +\ifEtoc@deeplevels + \expandafter\chardef\csname Etoc@7@@\endcsname 7 + \expandafter\chardef\csname Etoc@8@@\endcsname 8 + \expandafter\chardef\csname Etoc@9@@\endcsname 9 + \expandafter\chardef\csname Etoc@10@@\endcsname 10 + \expandafter\chardef\csname Etoc@11@@\endcsname 11 + \expandafter\chardef\csname Etoc@12@@\endcsname 12 +\fi +\expandafter\let\expandafter\Etoc@maxlevel + \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname +\edef\etocthemaxlevel{\number\Etoc@maxlevel} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\let\Etoc@none@@ \Etoc@minf +\expandafter\let\expandafter\Etoc@all@@ + \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname +\let\Etoc@dolevels\@empty +\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter + {\Etoc@dolevels\Etoc@do{#1}}} +\ifdefined\expanded + \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}% +\else + \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}% +\fi +\def\etoc@setlevel#1#2{% + \edef\Etoc@tmp{\the\numexpr#2}% + \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1% + \ifEtoc@deeplevels + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,% + .7,.8,.9,.10,.11,.12,}% + \else + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}% + \fi + \ifin@\else\if\@car#1\@nil @\in@true\fi\fi + \ifin@ + \PackageWarning{etoc} + {Sorry, but `#1' is forbidden as level name.\MessageBreak + \if\@car#1\@nil @% + (because of the @ as first character)\MessageBreak\fi + Reported}% + \else + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\Etoc@tmp @@\endcsname + \expandafter\edef\csname Etoc@@#1@@\endcsname + {\expandafter\noexpand\csname Etoc@#1@@\endcsname}% + \expandafter\edef\csname toclevel@@#1\endcsname + {\expandafter\noexpand\csname toclevel@#1\endcsname}% + \fi + \else + \PackageWarning{etoc} + {Argument `\detokenize{#2}' of \string\etocsetlevel\space should + represent one of\MessageBreak + \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi, + \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space + but evaluates to \Etoc@tmp.\MessageBreak + The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak + Tables of contents will ignore `#1' as long\MessageBreak + as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).% + \MessageBreak + Reported}% + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel + \fi +} +\def\etoclevel#1{\csname Etoc@#1@@\endcsname} +\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname} +\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}} +\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\ifdefined\c@chapter + \etocsetlevel{appendix}{0} +\else + \etocsetlevel{appendix}{1} +\fi +\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}} +\Etoc@dolevels +\let\Etoc@figure@@\Etoc@maxlevel +\let\Etoc@table@@ \Etoc@maxlevel +\let\Etoc@gobblethreeorfour\@gobblefour +\ifdefined\@gobblethree + \let\Etoc@gobblethree\@gobblethree +\else + \long\def\Etoc@gobblethree#1#2#3{}% +\fi +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref} + {\Etoc@hyperreftrue} + {\ifEtoc@oldLaTeX + \let\Etoc@gobblethreeorfour\Etoc@gobblethree + \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@ + \long\def\Etoc@etoccontentsline@#1#2#3{% + \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}% + }% + \fi + }% +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}} +\def\Etoc@stackofends{{-3}{}} +\def\Etoc@doendsandbegin{% + \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@ +} +\def\Etoc@traversestackofends#1{% + \ifnum#1>\Etoc@level + \csname Etoc@end@#1\endcsname + \expandafter\Etoc@traversestackofends + \else + \Etoc@traversestackofends@done{#1}% + \fi +} +\def\Etoc@traversestackofends@done#1#2{#2% + \ifnum#1<\Etoc@level + \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname + \Etoc@global\Etoc@isfirsttrue + \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}% + \else + \Etoc@global\Etoc@isfirstfalse + \let\Etoc@tmp\@empty + \fi + \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}% +} +\def\Etoc@etoccontentsline #1{% + \let\Etoc@next\Etoc@gobblethreeorfour + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \Etoc@skipthisonefalse + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \ifEtoc@skipthisone + \else + \unless\ifnum\Etoc@level>\c@tocdepth + \ifEtoc@standardlines + \let\Etoc@next\Etoc@savedcontentsline + \else + \let\Etoc@next\Etoc@etoccontentsline@ + \fi + \fi + \fi + \fi + \Etoc@next{#1}% +} +\def\Etoc@etoccontentsline@ #1#2#3#4{% + \Etoc@doendsandbegin + \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand + \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }% + \Etoc@global\edef\Etoc@contents{\expandafter\noexpand + \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }% + \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi + \global\Etoc@skipprefixfalse + \Etoc@lxyz{#2}{#3}{#4}% + \Etoc@prefix + \Etoc@contents +} +\def\Etoc@lxyz #1#2#3{% + \ifEtoc@hyperref + \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}% + \else + \Etoc@global\let\etocthelink\@firstofone + \fi + \Etoc@global\def\etocthepage {#2}% + \ifEtoc@hyperref + \ifx\etocthepage\@empty + \Etoc@global\let\etocthelinkedpage\@empty + \else + \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}% + \fi + \else + \Etoc@global\let\etocthelinkedpage\etocthepage + \fi + \Etoc@global\def\etocthename{#1}% + \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@ + \ifEtoc@hyperref + \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}% + \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname + \ifEtoc@numbered + \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber + \else + \Etoc@global\let\etocthelinkednumber\@empty + \fi + \else + \Etoc@global\let\etocthelinkedname \etocthename + \Etoc@global\let\etocthelinkednumber\etocthenumber + \fi + \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink + \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber + \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage + \ifEtoc@hyperref + \Etoc@lxyz@linktoc + \fi +} +\def\Etoc@lxyz@linktoc{% + \ifcase\Hy@linktoc + \or + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \or % page + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \else % all + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \fi +} +\def\Etoc@@getnb {% + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi + \Etoc@next +} +\def\Etoc@getnb #1{% + \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nmbrd + \else + \ifnum\Etoc@level=\m@ne + \let\Etoc@next\Etoc@@getit + \else + \let\Etoc@next\Etoc@getnb@nonbr + \fi + \in@{#1}{\nonumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nonumberline + \fi + \fi + \Etoc@next #1% +} +\def\Etoc@getnb@nmbrd #1#2{% + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#2}% + \Etoc@getnb@nmbrd@getname\@empty +}% +\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\def\Etoc@getnb@nonbr #1\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty +} +\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}% +} +\def\Etoc@@getit #1\hspace#2{% + \ifx\etoc@#2% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \else + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#1}% + \expandafter\Etoc@getit@getname \expandafter\@empty + \fi +} +\def\Etoc@getit@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@firstofone +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {\@firstofone} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected; run LaTeX again (cheers from `etoc')}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \gdef\Etoc@stackofends{{-3}{}}% + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \the\Etoc@toctoks + \ifEtoc@notactive + \else + \gdef\Etoc@level{-\thr@@}% + \Etoc@doendsandbegin + \fi +} +\def\Etoc@@startlocaltoc#1#2{% + \ifEtoc@localtoc + \ifnum #1=#2\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \etoclocaltableofcontentshook + \ifEtoc@etocstyle + \etocetoclocaltocmaketitle + \fi + \ifx\Etoc@aftertitlehook\@empty + \else + \ifEtoc@localtoctotoc + \ifEtoc@ouroboros + \else + \let\Etoc@tmp\contentsline + \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}% + \fi + \fi + \fi + \global\Etoc@notactivefalse + \fi + \fi +} +\let\etoc@startlocaltoc\@gobble +\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc +\let\Etoc@@startlocaltochook\@empty +\unless\ifEtoc@deeplevels + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or paragraph% + \or subparagraph% + \or empty% + \else\ifnum\numexpr#1<\m@ne + book% + \else + part% + \fi + \fi + } +\else + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or subsubsubsection% + \or subsubsubsubsection% + \or subsubsubsubsubsection% + \or subsubsubsubsubsubsection% + \or paragraph% + \or subparagraph% + \else\ifnum\numexpr#1>\z@ + empty% + \else\ifnum\numexpr#1=\m@ne + part% + \else + book% + \fi\fi + \fi + } +\fi +\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}} +\def\etocglobalheadtotoc{\addcontentsline{toc}} +\providecommand*\UseName{\@nameuse} +\def\etocetoclocaltocmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}% + \if@noskipsec\leavevmode\par\fi + \etociflocaltoctotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\localcontentsname}% + }% + }% + {}% +}% +\def\localcontentsname {\contentsname}% +\let\etoclocaltableofcontentshook\@empty +\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1% +\else +\AtBeginDocument{% + \let\Etoc@originaladdcontentsline\addcontentsline + \def\addcontentsline{\Etoc@hackedaddcontentsline}% +}% +\fi +\ifEtoc@lof + \ifEtoc@lot + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \fi +\else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} +\fi +\def\Etoc@hackedaddcontentsline@i#1#2#3{% + \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% +} +\unless\ifdefined\expanded + \def\Etoc@hackedaddcontentsline#1{% + {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}% + \Etoc@tmp + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}% + } + \def\Etoc@hackedaddcontentsline@i#1#2#3{% + {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}% + \Etoc@tmp{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% + } +\fi +\def\Etoc@@startlocallistof#1#2#3{% + \ifEtoc@localtoc + \ifnum #2=#3\relax + \global\let\etoclocaltop\Etoc@virtualtop + \global\Etoc@notactivefalse + \Etoc@@startlocaltochook + \csname etoclocallistof#1shook\endcsname + \ifEtoc@etocstyle + \csname etocetoclistof#1smaketitle\endcsname + \fi + \fi + \fi +} +\def\Etoc@@startlocallistof@setlevels#1{% + \ifnum\etoclocaltop<\z@ + \expandafter\let\csname Etoc@#1@@\endcsname\@ne + \else + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname + \fi + \def\Etoc@do##1{% + \ifnum\etoclevel{##1}>\etoclocaltop + \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel + \fi}% + \Etoc@dolevels +} +\def\etoclocallistoffigureshook{\etocstandardlines} +\def\etoclocallistoftableshook {\etocstandardlines} +\def\locallistfigurename{\listfigurename} +\def\locallisttablename {\listtablename} +\def\etocetoclistoffiguresmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocalloftotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallistfigurename}% + }% + }% + {}% +}% +\def\etocetoclistoftablesmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocallottotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallisttablename}% + }% + }% + {}% +}% +\let\Etoc@listofreset\@empty +\ifEtoc@lof + \def\locallistoffigures{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lofext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoffigures{% + \PackageError{etoc}{% + \string\locallistoffigures \on@line\space but\MessageBreak + package was loaded without `lof' option}% + {Try again with \string\usepackage[lof]{etoc}}% + } +\fi +\ifEtoc@lot + \def\locallistoftables{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lotext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoftables{% + \PackageError{etoc}{% + \string\locallistoftable \on@line\space but\MessageBreak + package was loaded without `lot' option}% + {Try again with \string\usepackage[lot]{etoc}}% + } +\fi +\def\Etoc@checkifempty {% + \global\Etoc@isemptytoctrue + \global\Etoc@stoptocfalse + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \gdef\Etoc@stackofends{{-3}{}}% + \begingroup + \ifEtoc@localtoc + \def\etoc@startlocaltoc##1{% + \ifnum##1=\Etoc@tocid\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \global\Etoc@notactivefalse + \fi + }% + \let\contentsline\Etoc@testingcontentslinelocal + \else + \let\contentsline\Etoc@testingcontentsline + \fi + \Etoc@storetocdepth + \let\Etoc@setlocaltop@doendsandbegin\@empty + \the\Etoc@toctoks + \Etoc@restoretocdepth + \endgroup +} +\DeclareRobustCommand*\etocifwasempty + {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } +\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname +\def\Etoc@testingcontentslinelocal #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@notactive + \else + \ifnum\Etoc@level>\etoclocaltop + \unless\ifnum\Etoc@level>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \else + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@testingcontentsline #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@localtableofcontents#1{% + \gdef\etoclocaltop{-\@m}% + \Etoc@localtoctrue + \global\Etoc@isemptytocfalse + \edef\Etoc@tocid{#1}% + \ifnum\Etoc@tocid<\@ne + \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}% + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\Etoc@gobtoetoc@ + \fi + \global\Etoc@notactivetrue + \ifEtoc@checksemptiness + \Etoc@checkifempty + \fi + \ifEtoc@isemptytoc + \ifEtoc@notactive + \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}% + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\expandafter\expandafter\Etoc@gobtoetoc@ + \fi + \else + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \edef\etoc@startlocaltoc##1% + {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}% + \Etoc@tableofcontents + \fi + \@gobble\etoc@ + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook +}% \Etoc@localtableofcontents +\def\Etoc@getref #1{% + \@ifundefined{r@#1} + {0} + {\expandafter\Etoc@getref@i\romannumeral-`0% + \expandafter\expandafter\expandafter + \@car\csname r@#1\endcsname0\@nil\@etoc + }% +} +\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@dothis #1#2\etoc@ {\fi #1} +\def\Etoc@t@bleofcontents{% + \gdef\etoclocaltop{-\@M}% + \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi + \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi + \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi + \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi + \global\Etoc@isemptytocfalse + \ifEtoc@checksemptiness\Etoc@checkifempty\fi + \ifEtoc@isemptytoc + \ifEtoc@notocifnotoc + \expandafter\expandafter\expandafter\@gobble + \fi + \fi + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook + \@gobble\etoc@ + }% \Etoc@t@bleofcontents +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}% +}% \etoctableofcontents +\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo + \fi} +\let\etocoriginaltableofcontents\tableofcontents +\let\tableofcontents\etoctableofcontents +\let\Etoc@listofhook\@empty +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \Etoc@listofhook + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}% +}% \localtableofcontents +\newcommand*\localtableofcontentswithrelativedepth[1]{% + \def\Etoc@@startlocaltochook{% + \global\c@tocdepth\numexpr\etoclocaltop+#1\relax + }% + \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty}% + \localtableofcontents +}% \localtableofcontentswithrelativedepth +\newcommand\etocsettocstyle[2]{% + \Etoc@etocstylefalse + \Etoc@classstylefalse + \def\Etoc@tableofcontents@user@before{#1}% + \def\Etoc@tableofcontents@user@after {#2}% +}% +\def\etocstoretocstyleinto#1{% +%% \@ifdefinable#1{% + \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse + \def\noexpand\Etoc@tableofcontents@user@before{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@before}% + }% + \def\noexpand\Etoc@tableofcontents@user@after{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@after}% + }% + }% +%% }% +}% +\def\Etoc@tableofcontents {% + \Etoc@tableofcontents@etoc@before + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@before + \Etoc@tableofcontents@contents + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@after + \Etoc@tableofcontents@etoc@after + \@gobble\etoc@ +} +\def\Etoc@tableofcontents@etoc@before{% + \ifnum\c@tocdepth>\Etoc@minf + \else + \expandafter\Etoc@gobtoetoc@ + \fi + \Etoc@par + \Etoc@beforetitlehook + \etocbeforetitlehook + \Etoc@storetocdepth + \let\Etoc@savedcontentsline\contentsline + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standardlines + \else + \def\Etoc@do##1{% + \expandafter\def\csname etocsaved##1tocline\endcsname + {\PackageError{etoc}{% + \expandafter\string\csname etocsaved##1tocline\endcsname\space + has been deprecated\MessageBreak + at 1.1a and is removed at 1.2.\MessageBreak + Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak + Reported \on@line}% + {I will use \expandafter\string + \csname l@##1\endcsname\space myself for this time.% + }% + \csname l@##1\endcsname + }% + }% + \Etoc@dolevels + \fi +}% +\def\Etoc@tableofcontents@contents{% + \Etoc@tocdepthset + \ifEtoc@parskip\parskip\z@skip\fi + \Etoc@aftertitlehook + \gdef\etoclocaltop{-\thr@@}% + \Etoc@toctoc + \etocaftercontentshook +}% +\def\Etoc@tableofcontents@etoc@after{% + \@nobreakfalse + \Etoc@restoretocdepth + \ifx\Etoc@global\global + \@ifundefined{tof@finish} + {} + {\ifx\tof@finish\@empty + \else + \global\let\contentsline\Etoc@savedcontentsline + \fi + }% + \fi +} +\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname + \expandafter\Etoc@setstyle@a + \else + \expandafter\Etoc@setstyle@error + \fi {#1}% +} +\def\Etoc@setstyle@error #1{% + \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak + forget some \string\etocsetlevel{#1}{}?\MessageBreak + Reported}% + \@gobblefour +} +\def\Etoc@setstyle@a #1{% + \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}% + \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi + \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1% + \Etoc@standardlinesfalse + \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp + \else + \ifnum\Etoc@tmp=\Etoc@maxlevel + \in@{.#1,}{.figure,.table,}% + \ifin@ + \PackageWarning{etoc} + {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak + Check the package documentation (in particular about\MessageBreak + \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)% + \MessageBreak on how to customize + figure and table entries in local\MessageBreak lists. Reported}% + \else + \PackageInfo{etoc} + {Attempt to set the style of `#1',\MessageBreak + whose level is currently the maximal one \etocthemaxlevel,\MessageBreak + which is never displayed. \space This will be ignored\MessageBreak + but note that we do quit compatibility mode.\MessageBreak + Reported}% + \Etoc@standardlinesfalse + \fi + \else + \PackageWarning{etoc}{This should not happen. Reported}% + \fi + \expandafter\@gobblefour + \fi +} +\long\def\Etoc@setstyle@b#1#2#3#4#5{% + \expandafter\def\csname Etoc@begin@#1\endcsname {#2}% + \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}% + \expandafter\def\csname Etoc@contents@#1\endcsname {#4}% + \expandafter\def\csname Etoc@end@#1\endcsname {#5}% +} +\def\Etoc@setstyle@e#1{% + \expandafter\let\csname Etoc@begin@#1\endcsname \@empty + \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty + \expandafter\let\csname Etoc@contents@#1\endcsname \@empty + \expandafter\let\csname Etoc@end@#1\endcsname \@empty +} +\def\Etoc@storelines@a#1{% + \noexpand\Etoc@setstyle@b{#1}% + {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}% +} +\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}} +\def\etocstorelinestylesinto#1{% + \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}% + \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}% + \Etoc@storelines@a {4}\Etoc@storelines@a {5}% + \ifEtoc@deeplevels + \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}% + \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}% + \fi + }% +} +\def\etocstorethislinestyleinto#1#2{% + \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}% +}% +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {Part} +\def\etocbookname {Book} +\def\etocdefaultlines{% + \Etoc@standardlinesfalse + \etocdefaultlines@setbook + \etocdefaultlines@setpart + \etocdefaultlines@setchapter + \etocdefaultlines@setsection + \etocdefaultlines@setsubsection + \etocdefaultlines@setsubsubsection + \etocdefaultlines@setdeeperones +} +\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@} +\@ifclassloaded{memoir}{% + \def\etocdefaultlines@setbook{% + \Etoc@setstyle@b + {-2}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% + } + }{\let\etocdefaultlines@setbook\@empty} +\def\etocdefaultlines@setpart{% +\Etoc@setstyle@b + {-1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +} +\def\etocdefaultlines@setchapter{% +\Etoc@setstyle@b + {0}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +} +\def\etocdefaultlines@setsection{% +\Etoc@setstyle@b + {1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +} +\def\etocdefaultlines@setsubsection{% +\Etoc@setstyle@b + {2}% + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +} +\def\etocdefaultlines@setsubsubsection{% +\Etoc@setstyle@b + {3}% + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}} +} +\def\etocdefaultlines@setdeeperones{% +\Etoc@setstyle@e{4}% +\Etoc@setstyle@e{5}% +\ifEtoc@deeplevels + \Etoc@setstyle@e{6}% + \Etoc@setstyle@e{7}% + \Etoc@setstyle@e{8}% + \Etoc@setstyle@e{9}% + \Etoc@setstyle@e{10}% + \Etoc@setstyle@e{11}% +\fi +} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}% + }% + {\ifnum #1>\@ne + \expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}% +} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}\unskip }% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocmemoirtoctotocfmt #1#2{% + \PackageWarning{etoc} + {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak + Use in its place \string\etocsettoclineforclasstoc,\MessageBreak + and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}). + I will do this now.\MessageBreak + Reported}% + \etocsettoclineforclasstoc{#1}{#2}% + \etocsettoclineforclasslistof{toc}{#1}{#2}% +} +\def\etocsettoclineforclasstoc #1#2{% + \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}% +} +\def\etocsettoclineforclasslistof #1#2#3{% + \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}% +} +\let\etocclasslocaltocaddtotoc\@empty +\let\etocclasslocallofaddtotoc\@empty +\let\etocclasslocallotaddtotoc\@empty +\ifdefined\c@chapter + \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}} + \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}} + \def\etocclasslocallotmaketitle{\section*{\locallisttablename}} + \etocsettoclineforclasstoc {chapter}{\contentsname} + \etocsettoclineforclasslistof{toc}{section}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{section}{\locallisttablename} +\else + \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}% + \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}% + \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}% + \etocsettoclineforclasstoc {section}{\contentsname} + \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename} +\fi +\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {} + {\csname ifEtoc@local#1totoc\endcsname + \csname etocclasslocal#1addtotoc\endcsname + \fi + }% +} +\def\etocarticlestyle{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \phantomsection + \ifx\Etoc@aftertitlehook\@empty + \else + \ifmem@em@starred@listof + \else + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \ifEtoc@maintoctotoc + \etocclassmaintocaddtotoc + \fi + \fi + \fi + \fi + \ifEtoc@localtoc + \@namedef{@\Etoc@currext maketitle}{% + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + }% + \fi + \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code + \ifx\Etoc@aftertitlehook\@empty + \else + \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax + \fi + \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}% + }% + {\@nameuse {cft\Etoc@currext afterlisthook}% + \endgroup\restorefromonecol + }% +} +\let\Etoc@beforetitlehook\@empty +\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}% +\expandafter\@gobble +\else + \ifdefined\setuptoc + \def\Etoc@beforetitlehook{% + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \setuptoc{\Etoc@currext}{leveldown}% + \else + \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}% + \fi + }% + \fi +\expandafter\@firstofone +\fi +{\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \setuptoc{\Etoc@currext}{totoc}% + \fi + }% + }% +} +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi +\def\etocscrartclstyle{% + \etocsettocstyle + {\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + {\let\if@dynlist\if@tocleft}% + \edef\@currext{\Etoc@currext}% + \@ifundefined{listof\@currext name}% + {\def\list@fname{\listofname~\@currext}}% + {\expandafter\let\expandafter\list@fname + \csname listof\@currext name\endcsname}% + \etoc@Iftocfeature {\@currext}{onecolumn} + {\etoc@Iftocfeature {\@currext}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \etoc@Iftocfeature {\@currext}{numberline}% + {\def \nonumberline {\numberline {}}}{}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \etoc@Iftocfeature {\@currext}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at \@currext\space deactivated}}% + \fi + \etoc@Iftocfeature{\@currext}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi + }% + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@\@currext @before@hook\endcsname + }% end of before_toc + {% start of after_toc + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \edef\@currext{\Etoc@currext}% + \csname tb@\@currext @after@hook\endcsname + \csname tocbasic@@after@hook\endcsname + }% end of after_toc +} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocclasstocstyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\def\Etoc@redefetocstylesforchapters{% + \renewcommand\etoctocstylewithmarks[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}% + } + \renewcommand\etoctocstylewithmarksnouc[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}% + } + \renewcommand\etoctocstyle[3][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}} + } +} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocreportstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrreprtstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{memoir} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocmemoirstyle} + \Etoc@redefetocstylesforchapters}{} +\def\etoctocloftstyle {% + \etocsettocstyle{% + \@cfttocstart + \par + \begingroup + \parindent\z@ \parskip\cftparskip + \@nameuse{@cftmake\Etoc@currext title}% + \ifEtoc@localtoc + \etoctocloftlocalperhapsaddtotoc\Etoc@currext + \else + \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}% + \fi + }% + {% + \endgroup + \@cfttocfinish + }% +} +\def\etoctocloftlocalperhapsaddtotoc#1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi + \csname @cftdobib#1\endcsname + \fi + }% +} +\def\etoctocbibindstyle {% + \etocsettocstyle {% + \toc@start + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \etoc@tocbibind@dotoctitle + \fi + }% + {\toc@finish}% +} +\def\etoc@tocbibind@dotoctitle {% + \if@bibchapter + \etocifisstarred + {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + }% + {\ifEtoc@maintoctotoc + \toc@chapter{\contentsname} %<-space from original + \else + \chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + \fi + }% + \else + \etocifisstarred + {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space + } + {\ifEtoc@maintoctotoc + \toc@section{\@tocextra}{\contentsname} %<-space from original + \else + \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id. + \fi + }% + \fi +}% +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \ifEtoc@keeporiginaltoc + \else + \AtBeginDocument{\let\tableofcontents\etoctableofcontents}% + \fi + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarningNoLine {etoc} + {Package `tocloft' was loaded after `etoc'.\MessageBreak + To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak + be tricked into believing to have been loaded with its\MessageBreak + option `titles'. \space But this will cause the `tocloft'\MessageBreak + customization of the titles of the main list of figures\MessageBreak + and list of tables to not apply either.\MessageBreak + You should load `tocloft' before `etoc'.}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' before `etoc'!\@gobbletwo}}% + \fi + \@cftnctoctrue }% + {}% + }% + }% +} +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \AtBeginDocument{% + \@ifpackageloaded{tocloft} + {% + \def\etocclasstocstyle{% + \etoctocloftstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + }% + {% no tocloft + \@ifpackageloaded {tocbibind} + {\if@dotoctoc + \def\etocclasstocstyle{% + \etoctocbibindstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + }% + {}% + }% + \@ifpackageloaded{tocbibind} + {% tocbibind, perhaps with tocloft + \if@dotoctoc + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + \etocsetup{maintoctotoc,localtoctotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) the options `maintoctotoc' and\MessageBreak + `localtoctotoc' to true as tocbibind was detected and\MessageBreak + found to be configured for `TOC to toc'.\MessageBreak + Reported at begin document}% + \fi + \if@dotoclof + \ifEtoc@lof + \etocsetup{localloftotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `localloftotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOF to toc'. Reported at begin document}% + \fi + \fi + \if@dotoclot + \ifEtoc@lot + \etocsetup{locallottotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `locallottotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOT to toc'. Reported at begin document}% + \fi + \fi + }% end of tocbibind branch + {}% + }% end of at begin document +}% end of not with memoir branch +\def\Etoc@addtocontents #1#2{% + \addtocontents {toc}{% + \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% +} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}} +\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax} +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth + \global\c@tocdepth\Etoc@savedtocdepth\relax\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +\def\etocdepthtag #1#{\Etoc@depthtag } +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {The command \protect#1\space is incompatible with `etoc'} + {Use \protect\etocsettocdepth.toc as replacement}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageInfo {etoc} + {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak + \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak + capabilities (see `etoc' manual). \space + Also, \protect\etocsettocdepth\MessageBreak + and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak + `memoir' command \protect\maxtocdepth\@gobble}% + }% + {\@ifpackageloaded {tocvsec2}{% + \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% + \let\reset@tocdepth\relax + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarningNoLine {etoc} + {Package `tocvsec2' detected and its modification of\MessageBreak + \protect\tableofcontents\space reverted. \space Use + \protect\etocsettocdepth.toc\MessageBreak as a replacement + for `tocvsec2' toc-related commands}% + }% tocvsec2 loaded + {}% tocvsec2 not loaded + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}% +}% +\def\Etoc@setnexttocdepth#1{% + \def\Etoc@tocdepthset{% + \Etoc@tocdepthreset + \edef\Etoc@tocdepthreset {% + \global\c@tocdepth\the\c@tocdepth\space + \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty + }% + \global\c@tocdepth#1% + \global\let\Etoc@tocdepthset\@empty + }% +}% +\let\Etoc@tocdepthreset\@empty +\let\Etoc@tocdepthset \@empty +\def\etocsetlocaltop #1#{\Etoc@set@localtop}% +\def\Etoc@set@localtop #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% +}% +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% +\def\etoc@setlocaltop #1{% + \ifnum#1=\Etoc@maxlevel + \Etoc@skipthisonetrue + \else + \Etoc@skipthisonefalse + \global\let\Etoc@level #1% + \global\let\Etoc@virtualtop #1% + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \fi + \let\Etoc@next\@empty + \ifEtoc@skipthisone + \else + \ifnum\Etoc@level>\c@tocdepth + \else + \ifEtoc@standardlines + \else + \let\Etoc@next\Etoc@setlocaltop@doendsandbegin + \fi + \fi + \fi + \Etoc@next +}% +\def\Etoc@setlocaltop@doendsandbegin{% + \Etoc@doendsandbegin + \global\Etoc@skipprefixfalse +} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble + \let\protect\etoc@setlocaltop\protect\@gobble}{}}% +\def\etocstandardlines {\Etoc@standardlinestrue} +\def\etoctoclines {\Etoc@standardlinesfalse} +\etocdefaultlines +\etocstandardlines +\def\etocstandarddisplaystyle{% + \PackageWarningNoLine{etoc}{% + \string\etocstandarddisplaystyle \on@line\MessageBreak + is deprecated. \space Please use \string\etocclasstocstyle}% +} +\expandafter\def\expandafter\etocclasstocstyle\expandafter{% + \etocclasstocstyle + \Etoc@classstyletrue +} +\def\etocetoclocaltocstyle{\Etoc@etocstyletrue} +\def\etocusertocstyle{\Etoc@etocstylefalse} +\etocclasstocstyle +\etocetoclocaltocstyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\etocbeforetitlehook \@empty +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\let\etocaftertochook \@empty +\def\etockeeporiginaltableofcontents + {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}% +\endinput +%% +%% End of file `etoc.sty'. diff --git a/latex/longtable_doxygen.sty b/latex/longtable_doxygen.sty new file mode 100644 index 00000000..e94b78b6 --- /dev/null +++ b/latex/longtable_doxygen.sty @@ -0,0 +1,456 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +%% added \long to prevent: +% LaTeX Warning: Command \LT@p@ftntext has changed. +% +% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): +% \changes{v4.15}{2021/03/28} +% {make long for gh/364} +% Inside the `p' column, just save up the footnote text in a token +% register. +\long\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/latex/md__r_e_a_d_m_e.tex b/latex/md__r_e_a_d_m_e.tex new file mode 100644 index 00000000..02cee9cf --- /dev/null +++ b/latex/md__r_e_a_d_m_e.tex @@ -0,0 +1,53 @@ +\chapter{Purpose} +\hypertarget{md__r_e_a_d_m_e}{}\label{md__r_e_a_d_m_e}\index{Purpose@{Purpose}} +\label{md__r_e_a_d_m_e_autotoc_md0}% +\Hypertarget{md__r_e_a_d_m_e_autotoc_md0}% + For too long, video games have been expressed, in Hideo Kojima\textquotesingle{}s words, in the format of "{}sticks,"{} as players confront and compete with each other online. The cultural meaning behind this ever-\/growing industry is something we, as players, must ask ourselves\+: Is this the meaning we are trying to express after all? + +Now we live in a world that values separation, isolation, and disconnection more than togetherness and connection. + +Inspired by the video game "{}\+Death Stranding,"{} which was released in 2019, the vision for this project aims to revolutionize the RTS genre, transforming its competitive nature into collaboration.\hypertarget{md__r_e_a_d_m_e_autotoc_md1}{}\doxysection{\texorpdfstring{No man is an island by John Donne}{No man is an island by John Donne}}\label{md__r_e_a_d_m_e_autotoc_md1} +No man is an island, ~\newline + Entire of itself. ~\newline + + +Each is a piece of the continent, ~\newline + A part of the main. ~\newline + + +If a clod be washed away by the sea, ~\newline + Europe is the less. ~\newline + + +As well as if a promontory were. ~\newline + As well as if a manor of thine own ~\newline + Or of thine friend\textquotesingle{}s were. ~\newline + + +Each man\textquotesingle{}s death diminishes me, ~\newline + For I am involved in mankind. ~\newline + Therefore, send not to know ~\newline + + +For whom the bell tolls, ~\newline + It tolls for thee.\hypertarget{md__r_e_a_d_m_e_autotoc_md2}{}\doxysection{\texorpdfstring{translated to Chinese by 李敖}{translated to Chinese by 李敖}}\label{md__r_e_a_d_m_e_autotoc_md2} +有人能自全, 沒有人是孤島, + +每人都是大陸的一片, 要為本土應卯 + +一旦海水沖走, 歐洲就要變小。 + +那便是一塊土地, 那便是一方海角, 那便是一座莊園, 不論是你的、還是朋友的, + +任何人的死亡,都是我的減少, 作為人類的一員,我與生靈共老。 + +喪鐘在為誰敲,我本茫然不曉, 不為幽明永隔,它正為你哀悼。\hypertarget{md__r_e_a_d_m_e_autotoc_md3}{}\doxysection{\texorpdfstring{Goal}{Goal}}\label{md__r_e_a_d_m_e_autotoc_md3} +\hypertarget{md__r_e_a_d_m_e_autotoc_md4}{}\doxysection{\texorpdfstring{Methodology}{Methodology}}\label{md__r_e_a_d_m_e_autotoc_md4} +\hypertarget{md__r_e_a_d_m_e_autotoc_md5}{}\doxysubsection{\texorpdfstring{Packages used}{Packages used}}\label{md__r_e_a_d_m_e_autotoc_md5} + +\begin{DoxyEnumerate} +\item open\+GL version 4.\+1 +\item PTSD game Engine +\item SDL2 +\item Imgui +\end{DoxyEnumerate} \ No newline at end of file diff --git a/latex/refman.tex b/latex/refman.tex new file mode 100644 index 00000000..c38a218d --- /dev/null +++ b/latex/refman.tex @@ -0,0 +1,219 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + \pdfminorversion=7 + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \makeatletter + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + % suppress package identification of infwarerr as it contains the word "warning" + \let\@@protected@wlog\protected@wlog + \def\protected@wlog#1{\wlog{package info suppressed}} + \RequirePackage{infwarerr} + \let\protected@wlog\@@protected@wlog + \makeatother + \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript + \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} + \usepackage{doxygen} + \usepackage{graphicx} + \usepackage[utf8]{inputenc} + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \usepackage[T1]{fontenc} + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \doxyallsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={My Project},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + \etocsetlevel{subsubsubsection}{4} + \etocsetlevel{subsubsubsubsection}{5} + \etocsetlevel{subsubsubsubsubsection}{6} + \etocsetlevel{subsubsubsubsubsubsection}{7} + \etocsetlevel{paragraph}{8} + \etocsetlevel{subparagraph}{9} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large My Project}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.9.8}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\input{md__r_e_a_d_m_e} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/latex/tabu_doxygen.sty b/latex/tabu_doxygen.sty new file mode 100644 index 00000000..3f17d1d0 --- /dev/null +++ b/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/src/App.cpp b/src/App.cpp index 20597640..62c51737 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -1,73 +1,22 @@ #include "App.hpp" - -#include "Util/Image.hpp" -#include "Util/Input.hpp" -#include "Util/Keycode.hpp" #include "Util/Logger.hpp" -#include "GiraffeText.hpp" - void App::Start() { - LOG_TRACE("Start"); - - m_Giraffe->SetDrawable( - std::make_shared("../assets/sprites/giraffe.png")); - m_Giraffe->SetZIndex(5); - m_Giraffe->Start(); - - m_Root.AddChild(m_Giraffe); - m_Root.AddChild(m_Cat); - - m_CurrentState = State::UPDATE; + mapScene.Start(); + m_CurrentState = App::State::UPDATE; } void App::Update() { - if (Util::Input::IsKeyPressed(Util::Keycode::MOUSE_LB)) { - LOG_DEBUG("Left button pressed"); - } - if (Util::Input::IsKeyDown(Util::Keycode::MOUSE_RB)) { - LOG_DEBUG("Right button down"); - } - if (Util::Input::IsKeyUp(Util::Keycode::MOUSE_RB)) { - LOG_DEBUG("Right button up"); - } - if (Util::Input::IfScroll()) { - auto delta = Util::Input::GetScrollDistance(); - LOG_DEBUG("Scrolling: x: {}, y: {}", delta.x, delta.y); - } - if (Util::Input::IsMouseMoving()) { - // LOG_DEBUG("Mouse moving! x:{}, y{}", cursorPos.x, cursorPos.y); - } - - if (Util::Input::IsKeyUp(Util::Keycode::ESCAPE) || Util::Input::IfExit()) { + if (Util::Input::IsKeyPressed(Util::Keycode::ESCAPE) || + Util::Input::IfExit()) { m_CurrentState = State::END; } - if (Util::Input::IsKeyDown(Util::Keycode::A)) { - LOG_DEBUG("A Down"); - } - - if (Util::Input::IsKeyPressed(Util::Keycode::B)) { - LOG_DEBUG("B Pressed. Setting the cursor to (0, 0)."); - Util::Input::SetCursorPosition({0.0F, 0.0F}); - LOG_DEBUG("Cursor set to {}.", - glm::to_string(Util::Input::GetCursorPosition())); - } - - m_Giraffe->Update(); - m_Cat->Update(); + mapScene.Update(); - m_Root.Update(); - - // press SPACE to toggle demo window - if (Util::Input::IsKeyDown(Util::Keycode::SPACE)) { - showDemoWindow = !showDemoWindow; - } - if (showDemoWindow) { - ImGui::ShowDemoWindow(); - } } void App::End() { // NOLINT(this method will mutate members in the future) + LOG_TRACE("End"); } diff --git a/src/Camera.cpp b/src/Camera.cpp new file mode 100644 index 00000000..047c1726 --- /dev/null +++ b/src/Camera.cpp @@ -0,0 +1,66 @@ +// +// Created by 盧威任 on 2/17/24. +// + +#include "Camera.hpp" + +glm::vec2 CameraClass::m_Position(glm::vec2(0, 0)); +float CameraClass::m_Zoom = 1.F; +float CameraClass::m_Fov = FOV_UPPER_LIMIT; + +void CameraClass::Start() {} + +void CameraClass::Update() { + UpdateWhenCursorAtBoarder(); + UpdateWhenCursorScroll(); +} + +void CameraClass::UpdateWhenCursorAtBoarder() { + // TODO: where to put is cursor at boarder?? + int cursorAtBoarder = Core::Context::IsCurosrAtBoarder(); + glm::vec2 CameraPosition = getPosition(); + float CameraMovingSpeed = getMovingSpeed(); + switch (cursorAtBoarder) { + case (0): + CameraPosition.y += CameraMovingSpeed; + break; + case (1): + CameraPosition.x += CameraMovingSpeed; + break; + case (2): + CameraPosition.y -= CameraMovingSpeed; + break; + case (3): + CameraPosition.x -= CameraMovingSpeed; + break; + case (4): + break; + } + setPosition(CameraPosition); +} + +void CameraClass::UpdateWhenCursorScroll() { + if (Util::Input::IfScroll()) { + auto delta = Util::Input::GetScrollDistance(); + changeFOV(delta.y * getZoomingSpeed()); + setCameraZoom(delta.y * getZoomingSpeed()); + } +} + +void CameraClass::addCameraZoom(float add) { + + if (m_Zoom + add < 5 && m_Zoom + add > 0) { + m_Zoom += add; + } +} + +void CameraClass::changeFOV(float offset) { + m_Fov -= offset; + + if (m_Fov < FOV_LOWER_LIMIT) { + m_Fov = FOV_LOWER_LIMIT; + } + if (m_Fov > FOV_UPPER_LIMIT) { + m_Fov = FOV_UPPER_LIMIT; + } +} diff --git a/src/Cat.cpp b/src/Cat.cpp deleted file mode 100644 index fb2ab2ea..00000000 --- a/src/Cat.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "Cat.hpp" - -#include "Util/Input.hpp" -#include "Util/Logger.hpp" - -Cat::Cat() - : m_Animation(std::make_shared( - std::vector{ - "../assets/sprites/cat/cat-0.bmp", - "../assets/sprites/cat/cat-1.bmp", - "../assets/sprites/cat/cat-2.bmp", - "../assets/sprites/cat/cat-3.bmp", - "../assets/sprites/cat/cat-4.bmp", - "../assets/sprites/cat/cat-5.bmp", - "../assets/sprites/cat/cat-6.bmp", - "../assets/sprites/cat/cat-7.bmp", - }, - true, 50, true, 1000)) { - m_Transform.translation = {-200, 200}; - SetDrawable(m_Animation); -} - -void Cat::Update() { - if (Util::Input::IsKeyDown(Util::Keycode::A)) { - LOG_DEBUG("Pause Animate"); - m_Animation->Pause(); - } - - if (Util::Input::IsKeyDown(Util::Keycode::S)) { - LOG_DEBUG("Play Animate"); - m_Animation->Play(); - } - if (Util::Input::IsKeyDown(Util::Keycode::V)) { - LOG_DEBUG("Set Visible to true"); - SetVisible(true); - } - if (Util::Input::IsKeyDown(Util::Keycode::B)) { - LOG_DEBUG("Set Visible to false"); - SetVisible(false); - } - - LOG_TRACE(m_Animation->GetCurrentFrameIndex()); - - if (Util::Input::IsKeyDown(Util::Keycode::D)) { - m_Animation->SetLooping(false); - } - - if (Util::Input::IsKeyDown(Util::Keycode::F)) { - m_Animation->SetLooping(true); - } - - if (Util::Input::IsKeyUp(Util::Keycode::K)) { - m_Animation->SetInterval(50); - } - if (Util::Input::IsKeyDown(Util::Keycode::K)) { - m_Animation->SetInterval(500); - } - if (Util::Input::IsKeyDown(Util::Keycode::O)) { - m_Animation->SetCurrentFrame(5); - } -} diff --git a/src/Core/Context.cpp b/src/Core/Context.cpp index c504727c..564548f9 100644 --- a/src/Core/Context.cpp +++ b/src/Core/Context.cpp @@ -9,6 +9,9 @@ #include "Util/Time.hpp" #include "config.hpp" +#include "imgui/imgui.h" +#include "imgui/imgui_impl_opengl3.h" +#include "imgui/imgui_impl_sdl2.h" namespace Core { Context::Context() { @@ -38,7 +41,6 @@ Context::Context() { LOG_ERROR("Failed to initialize SDL_mixer"); LOG_ERROR(SDL_GetError()); } - m_Window = SDL_CreateWindow(TITLE, WINDOW_POS_X, WINDOW_POS_Y, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); @@ -66,6 +68,16 @@ Context::Context() { LOG_ERROR(reinterpret_cast(glewGetErrorString(err))); } + // init Imgui + ImGui::CreateContext(); + ImGuiIO &io = ImGui::GetIO(); + + (void)io; + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; + + ImGui_ImplSDL2_InitForOpenGL(m_Window, m_GlContext); + ImGui_ImplOpenGL3_Init(); + #ifndef __APPLE__ glEnable(GL_DEBUG_OUTPUT); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); @@ -120,6 +132,7 @@ void Context::Setup() { void Context::Update() { Util::Time::Update(); Util::Input::Update(); + SDL_GL_SwapWindow(m_Window); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/src/Core/Shader.cpp b/src/Core/Shader.cpp index 9a449a71..2fea48e6 100644 --- a/src/Core/Shader.cpp +++ b/src/Core/Shader.cpp @@ -49,4 +49,5 @@ void Shader::CheckStatus(const std::string &filepath) const { LOG_ERROR("{}", filepath, message.data()); } } + } // namespace Core diff --git a/src/Core/Texture.cpp b/src/Core/Texture.cpp index 35a3ce85..f34d0cd3 100644 --- a/src/Core/Texture.cpp +++ b/src/Core/Texture.cpp @@ -4,6 +4,7 @@ #include "Util/Logger.hpp" + namespace Core { Texture::Texture(GLint format, int width, int height, const void *data) { glGenTextures(1, &m_TextureId); diff --git a/src/Core/VertexArray.cpp b/src/Core/VertexArray.cpp index 315f1863..11b79116 100644 --- a/src/Core/VertexArray.cpp +++ b/src/Core/VertexArray.cpp @@ -45,6 +45,7 @@ void VertexArray::AddVertexBuffer(std::unique_ptr vertexBuffer) { static_cast(vertexBuffer->GetComponentCount()), vertexBuffer->GetType(), GL_FALSE, 0, nullptr); + // m_VertexBuffer is basically useless m_VertexBuffers.push_back(std::move(vertexBuffer)); } @@ -56,4 +57,27 @@ void VertexArray::DrawTriangles() const { glDrawElements(GL_TRIANGLES, static_cast(m_IndexBuffer->GetCount()), GL_UNSIGNED_INT, nullptr); } + +void VertexArray::DrawTest(int count) const { + // glDrawArrays(GL_TRIANGLE_STRIP, 2, 12); +} + +void VertexArray::DrawRectangles() const { + glDrawElements(GL_LINE_LOOP, static_cast(m_IndexBuffer->GetCount()), + GL_UNSIGNED_INT, nullptr); +} + +void VertexArray::DrawLines(int count) const { + /* + * draw lines using only vertex (without element) + */ + + glDrawArrays(GL_LINES, 0, count); +} + +void VertexArray::DrawLinesIndices() const { + glDrawElements(GL_LINES, static_cast(m_IndexBuffer->GetCount()), + GL_UNSIGNED_INT, nullptr); +} + } // namespace Core diff --git a/src/Core/VertexBuffer.cpp b/src/Core/VertexBuffer.cpp index 3b3a2982..b450711a 100644 --- a/src/Core/VertexBuffer.cpp +++ b/src/Core/VertexBuffer.cpp @@ -2,13 +2,35 @@ namespace Core { VertexBuffer::VertexBuffer(const std::vector &vertices, - unsigned int componentCount) + unsigned int componentCount, DrawingType type) : m_ComponentCount(componentCount) { + /* + * There are three drawing types, + * Static: set only once and used many times. + * Dynamic: the data is changed a lot and used many times. + * Stream: the data is set only once and used by the GPU at most a few times + * componentCount stands for... + */ + glGenBuffers(1, &m_BufferId); glBindBuffer(GL_ARRAY_BUFFER, m_BufferId); - glBufferData(GL_ARRAY_BUFFER, - static_cast(vertices.size() * sizeof(GLfloat)), - vertices.data(), GL_STATIC_DRAW); + switch (type) { + case (STATIC): + glBufferData(GL_ARRAY_BUFFER, + static_cast(vertices.size() * sizeof(GLfloat)), + vertices.data(), GL_STATIC_DRAW); + break; + case (DYNAMIC): + glBufferData(GL_ARRAY_BUFFER, + static_cast(vertices.size() * sizeof(GLfloat)), + vertices.data(), GL_DYNAMIC_DRAW); + break; + case (STREAM): + glBufferData(GL_ARRAY_BUFFER, + static_cast(vertices.size() * sizeof(GLfloat)), + vertices.data(), GL_STREAM_DRAW); + break; + } } VertexBuffer::VertexBuffer(VertexBuffer &&other) { @@ -40,4 +62,10 @@ void VertexBuffer::Bind() const { void VertexBuffer::Unbind() const { glBindBuffer(GL_ARRAY_BUFFER, 0); } +template +void VertexBuffer::ModifyBufferData(int size, std::vector data) { + glBindBuffer(GL_ARRAY_BUFFER, m_BufferId); + glBufferSubData(GL_ARRAY_BUFFER, 0, size, &data); +} + } // namespace Core diff --git a/src/GameObjectID.cpp b/src/GameObjectID.cpp new file mode 100644 index 00000000..696207eb --- /dev/null +++ b/src/GameObjectID.cpp @@ -0,0 +1,14 @@ +// +// Created by 盧威任 on 3/13/24. +// +#include "GameObjectID.hpp" +std::unordered_map OccupiedID::m_OccupiedID; + +int OccupiedID::getNewestID(unitType type) { + auto it = OccupiedID::m_OccupiedID.find(type); + if (it != OccupiedID::m_OccupiedID.end()) { + return OccupiedID::m_OccupiedID[type]++; + } else { + OccupiedID::m_OccupiedID[type] = 0; + } +} diff --git a/src/Giraffe.cpp b/src/Giraffe.cpp deleted file mode 100644 index 49c956cf..00000000 --- a/src/Giraffe.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "Giraffe.hpp" - -#include - -#include "Util/Time.hpp" -#include "Util/Transform.hpp" - -#include "config.hpp" - -void Giraffe::Start() { - m_GiraffeText = - std::make_shared("../assets/fonts/Inter.ttf", 50); - m_GiraffeText->SetZIndex(this->GetZIndex() - 1); - m_GiraffeText->Start(); - this->AddChild(m_GiraffeText); -} - -void Giraffe::Update() { - static glm::vec2 dir = {1, 0.5}; - - auto &pos = m_Transform.translation; - auto &scale = m_Transform.scale; - auto &rotation = m_Transform.rotation; - - if (pos.y >= static_cast(WINDOW_HEIGHT) / 2 || - pos.y + static_cast(WINDOW_HEIGHT) / 2 <= 0) { - dir.y *= -1; - } - if (pos.x >= static_cast(WINDOW_WIDTH) / 2 || - pos.x + static_cast(WINDOW_WIDTH) / 2 <= 0) { - dir.x *= -1; - } - - auto delta = static_cast(Util::Time::GetDeltaTime()); - Util::Transform deltaTransform{ - dir * delta * 1000.0F, 2 * delta, - glm::vec2(1, 1) * (std::sin(rotation / 2) + 1.0F) * 100.0F}; - - pos += deltaTransform.translation; - rotation += deltaTransform.rotation; - - m_GiraffeText->Update(); -} diff --git a/src/GiraffeText.cpp b/src/GiraffeText.cpp deleted file mode 100644 index eb4266e6..00000000 --- a/src/GiraffeText.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "GiraffeText.hpp" - -#include "Util/Color.hpp" -#include "Util/Time.hpp" - -void GiraffeText::Start() { - m_Text = std::make_unique(m_Font, m_Size, "0", - Util::Color::FromRGB(255, 255, 255)); - SetDrawable(m_Text); -} - -void GiraffeText::Update() { - ImGui::Begin("Giraffe Text"); - ImGui::SetWindowSize({300, 100}); - ImGui::DragFloat2("Translation", &m_Transform.translation[0], 1, -100, 100); - ImGui::DragFloat("Rotation", &m_Transform.rotation, 0.01F, 0, - 2 * glm::pi()); - ImGui::DragFloat2("Scale", &m_Transform.scale[0], 0.1F, 1, 10); - ImGui::End(); - m_Text->SetText(fmt::format("{:.02f}", 1.0F / Util::Time::GetDeltaTime())); - - m_Text->SetColor(Util::Color::FromName(Util::Colors::RED)); -} diff --git a/src/Grid.cpp b/src/Grid.cpp new file mode 100644 index 00000000..1de80faa --- /dev/null +++ b/src/Grid.cpp @@ -0,0 +1,85 @@ +// +// Created by 盧威任 on 2/16/24. +// + +#include "Grid.hpp" +#include "Core/Drawable.hpp" +#include + +void Grid::Start(std::vector lineVector) { + + // debug grid: + m_lineVector = lineVector; + + InitVertexAndColor(); +} +void Grid::queStart(std::deque lineQue) { + + // debug grid: + m_lineVector = std::vector (lineQue.begin(),lineQue.end()); + + InitVertexAndColor(); +} + +void Grid::Draw(const Util::Transform &transform, const float zindex) { + // nothing +} + +void Grid::DrawUsingCamera(const Util::Transform &transform, + const float zIndex) { + + if (m_Activate == false) { + return; + } + glLineWidth(m_lineWidth); + + m_Program.Bind(); + m_Program.Validate(); + m_VertexArray->Bind(); + + auto cp = CameraClass::getProjectionMatrix(); + auto cv = CameraClass::getViewMatrix(); + + constexpr glm::mat4 eye(1.F); + + // size of the cell + glm::vec2 size = {1.F, 1.F}; + + auto data = Util::ConvertToUniformBufferDataUsingCameraMatrix(transform, + size, zIndex); + + m_Matrices->SetData(0, data); + m_VertexArray->Bind(); + + m_VertexArray->DrawLines(m_lineVector.size() * 5 * 2); +} + +void Grid::InitVertexAndColor() { + std::vector vertex = {}; + std::vector color = {}; + std::vector index = {}; + for (auto line : m_lineVector) { + vertex.push_back(line.getlineFrom().x); + vertex.push_back(line.getlineFrom().y); + color.push_back(line.getColor().x); + color.push_back(line.getColor().y); + color.push_back(line.getColor().z); + + vertex.push_back(line.getlineTo().x); + vertex.push_back(line.getlineTo().y); + color.push_back(line.getColor().x); + color.push_back(line.getColor().y); + color.push_back(line.getColor().z); + } + m_VertexArray->AddVertexBuffer( + std::make_unique(vertex, 2)); + m_VertexArray->AddVertexBuffer( + std::make_unique(color, 3)); +} +void Grid::setLine(glm::vec2 from, glm::vec2 to, glm::vec3 color) { + + m_VertexArray = std::make_unique(); + m_lineVector.clear(); // 清空原有的線段 + m_lineVector.push_back(Line(from, to, color)); + InitVertexAndColor(); // 重新初始化頂點和顏色 +} diff --git a/src/Map/Map.cpp b/src/Map/Map.cpp new file mode 100644 index 00000000..feb9ac8e --- /dev/null +++ b/src/Map/Map.cpp @@ -0,0 +1,100 @@ +// +// Created by 盧威任 on 3/30/24. +// + +#include "Map/Map.hpp" + +void MapClass::setTileByCellPosition(glm::vec2 position, + std::shared_ptr tile) { + + if (position.x > m_MapWdith - 1 || position.y > m_MapHeight - 1 || + position.x < 0 || position.y < 0) { + LOG_DEBUG("False Position Setting"); + return; + } +} + +void MapClass::InitGrid() { + std::vector lineV; + + auto width = CELL_SIZE.x * m_MapWdith; + auto height = CELL_SIZE.y * m_MapHeight; + for (int i = 0; i < m_MapWdith + 1; i++) { + // horz + lineV.push_back(Line(glm::vec2(0, i * CELL_SIZE.y), + glm::vec2(width, i * CELL_SIZE.y))); + } + for (int j = 0; j < m_MapHeight + 1; j++) { + // height + lineV.push_back(Line(glm::vec2(j * CELL_SIZE.x, 0), + glm::vec2(j * CELL_SIZE.x, height))); + } + + m_Grid.Start(lineV); + m_Grid.SetActivate(true); +} + +std::shared_ptr MapClass::getTileByCellPosition(glm::vec2 position) { + + if (position.x > m_MapWdith - 1 || position.y > m_MapHeight - 1 || + position.x < 0 || position.y < 0) { + LOG_DEBUG("False Position Getting"); + return std::make_shared(unitType::null, 0, 0, 0, ""); + } + return m_Map[position.x][position.y]; +} + +void MapClass::Draw(const Util::Transform &trans, const float zindex) { + + Util::Transform mapTrans; + + mapTrans.translation = m_MapPosition; + for (auto i : m_Images) { + i->DrawUsingCamera(mapTrans, 1); + } + m_Grid.DrawUsingCamera(mapTrans, -1); +} + +void MapClass::Init(std::vector>> map, + unsigned int width, unsigned int height) { + + m_MapWdith = width; + m_MapHeight = height; + m_Map = map; + + // m_Map = map; + + InitGrid(); + + for (int i = 0; i < m_Map.size(); i++) { + for (int j = 0; j < m_Map[i].size(); j++) { + + auto findResult = m_Tiles.find(m_Map[i][j]->getTileImagePath()); + if (findResult != m_Tiles.end()) { + m_Tiles[m_Map[i][j]->getTileImagePath()].push_back( + glm::vec2(i, m_MapHeight - j)); + } else { + m_Tiles[m_Map[i][j]->getTileImagePath()] = + std::vector({glm::vec2(i, m_MapHeight - j)}); + } + } + } + + for (auto pair : m_Tiles) { + m_Images.push_back(std::make_shared( + m_spriteFolder + pair.first, pair.second)); + } +} + +void MapClass::Init(unsigned int width, unsigned int height) { + m_MapWdith = width; + m_MapHeight = height; + for (int i = 0; i < m_MapHeight; i++) { + std::vector> row; + for (int j = 0; j < m_MapWdith; j++) { + row.push_back(std::make_shared()); + } + MapClass::m_Map.push_back(row); + } + InitGrid(); +} diff --git a/src/Map/MapBinReader.cpp b/src/Map/MapBinReader.cpp new file mode 100644 index 00000000..6c41ecf9 --- /dev/null +++ b/src/Map/MapBinReader.cpp @@ -0,0 +1,82 @@ +// +// Created by 盧威任 on 3/30/24. +// +#include "Map/MapBinReader.hpp" +std::vector>> +MapBinReader::readBin(const std::string filepath, int width, int hieght) { + + std::vector>> fullmap; + std::vector> mapRow; + auto file = MapBinReader::readBinFiles(filepath); + + unsigned char data; + + int i = 0; + int k = 0; + int imageId = 0; + int imageIndex = 0; + int case1hasValue = -1; + while (file.read(reinterpret_cast(&data), 1)) { + + if ((i - 17) / 3 >= width * hieght) { + break; + } + if (i >= 17) { + // std::cout << static_cast(data) << " "; + switch (k) { + case 0: + imageId = static_cast(data); + break; + case 1: + /* + if (!(static_cast(data) == 255 || + static_cast(data) == 0)) { + imageIndex = static_cast(data); + case1hasValue = 1; + } + */ + break; + case 2: + if (case1hasValue != 1) { + imageIndex = static_cast(data); + } + + auto tileimage = + YAMLReader::convertYAMLTileToImagePath(imageId, imageIndex); + + auto tile = + YAMLReader::convertYAMLTileToTileClass(imageId, imageIndex); + mapRow.push_back(std::make_shared(*tile)); + imageId = 0; + k = -1; + imageIndex = 0; + // std::cout << " " << i << "\n"; + + if (((i - 16) / 3) % (width) == 0) { + fullmap.push_back(mapRow); + mapRow.clear(); + } + case1hasValue = -1; + break; + } + k++; + } + + i++; + } + + // Close the file + file.close(); + + return fullmap; +} + +std::ifstream MapBinReader::readBinFiles(const std::string filepath) { + std::ifstream file(filepath, std::ios::binary); + // Open the binary file + // Check if the file is opened successfully + if (!file.is_open()) { + LOG_DEBUG("Error opening bin file!"); + } + return file; +} diff --git a/src/Map/TerrainConfig.cpp b/src/Map/TerrainConfig.cpp new file mode 100644 index 00000000..21e45556 --- /dev/null +++ b/src/Map/TerrainConfig.cpp @@ -0,0 +1,17 @@ +// +// Created by 盧威任 on 3/18/24. +// +#include "Map/TerrainConfig.hpp" +std::unordered_map> + TerrainConfig::m_config = { + {"Beach", std::make_shared(unitType::TILE_BEACH, 1, 1, 1)}, + {"Bridge", std::make_shared(unitType::TILE_BRIDGE, 0, 1, 1)}, + {"Clear", std::make_shared(unitType::TILE_CLEAR, 1, 1, 1)}, + {"Gems", std::make_shared(unitType::OVERLAY_GEMS, 0, 1, 1)}, + {"Ore", std::make_shared(unitType::OVERLAY_ORE, 0, 1, 1)}, + {"River", std::make_shared(unitType::TILE_RIVER, 0, 0, 1)}, + {"Road", std::make_shared(unitType::TILE_ROAD, 1, 1, 1)}, + {"Rock", std::make_shared(unitType::TILE_ROCK, 0, 0, 1)}, + {"Rough", std::make_shared(unitType::TILE_ROUGH, 0, 1, 1)}, + {"Tree", std::make_shared(unitType::TILE_TREE, 0, 0, 1)}, + {"Water", std::make_shared(unitType::TILE_WATER, 0, 0, 1)}}; diff --git a/src/Map/YAMLReader.cpp b/src/Map/YAMLReader.cpp new file mode 100644 index 00000000..1cc568f7 --- /dev/null +++ b/src/Map/YAMLReader.cpp @@ -0,0 +1,67 @@ +// +// Created by 盧威任 on 3/18/24. +// +#include "Map/YAMLReader.hpp" +#include "Map/Tile.hpp" + +std::string YAMLReader::convertYAMLTileToImagePath(int id, int index) { + std::string indexStr = std::to_string(index); // Example string + // Create an output string stream + std::ostringstream oss; + + // Set the fill character to '0' + oss << std::setfill('0'); + + // Set the width to the desired length + oss << std::setw(4); + + oss << indexStr; + + // Get the formatted string + std::string formattedStr = oss.str(); + + auto tileSet = + (*YAMLReader::m_mapTile)["Templates"]["Template@" + std::to_string(id)]; + + std::string imageFileName = Dump(tileSet["Images"]); + + std::string convertedImageFileName = + imageFileName.substr(0, imageFileName.size() - 4) + "-" + formattedStr + + ".png"; + + return convertedImageFileName; + // return + // std::make_shared("../assets/sprites/temperate_sprite/" + + // convertedImageFileName); +} + +std::shared_ptr YAMLReader::convertYAMLTileToTileClass(int id, + int index) { + + auto tileSet = + (*YAMLReader::m_mapTile)["Templates"]["Template@" + std::to_string(id)]; + + std::string imageFileName = Dump(tileSet["Images"]); + std::string terrainName = Dump(tileSet["Tiles"][std::to_string(index)]); + + if (terrainName == "") { + for (auto k : tileSet["Tiles"]) { + index = std::stoi(k.first.Scalar()); + terrainName = Dump(tileSet["Tiles"][std::to_string(index)]); + break; + } + } + + // std::shared_ptr image = convertYAMLTileToImage(id, index); + + std::shared_ptr tile = + std::move(TerrainConfig::GetConfig(terrainName)); + tile->setTileImage(convertYAMLTileToImagePath(id, index)); + // tile->setTileImage(image); + + return tile; +} + +// variable +std::shared_ptr YAMLReader::m_mapTile = + std::make_shared(YAML::LoadFile(PATH_TO_TEMPERAT_TILESET_YAML)); diff --git a/src/Scene/DefaultScene.cpp b/src/Scene/DefaultScene.cpp new file mode 100644 index 00000000..dfcf3ac1 --- /dev/null +++ b/src/Scene/DefaultScene.cpp @@ -0,0 +1,80 @@ +// +// Created by 盧威任 on 2/15/24. +// +#include "Scene/DefaultScene.hpp" +#include "DrawOverlays.hpp" +#include + +void DefaultScene::Start() { + // image.SetImage("../assets/sprites/Shapes/B_Box.png"); + LOG_TRACE("Start"); + /* doing some weird stuff, fix is needed + std::vector> maps = + m_Map.readMapAndTileSet(m_OgMap, m_tileSets); + */ + + m_Map->Init(255, 255); + // m_Map->getTileByCellPosition(glm::vec2(5, 5))->setWalkable(0); + m_Map->getTileByCellPosition(glm::vec2(6, 5))->setWalkable(0); + m_Map->getTileByCellPosition(glm::vec2(7, 5))->setWalkable(0); + m_Map->getTileByCellPosition(glm::vec2(8, 5))->setWalkable(0); + m_Map->getTileByCellPosition(glm::vec2(9, 5))->setWalkable(0); + m_UI.Start(); + m_testdraw.Start(std::vector({glm::vec2(0.F, 0.F)}), + DrawOverlays::OverlayShapes::R_CROSS); + // m_GameObjectManager.Start(); + + // m_dummy.Start({5, 5}, m_Map); + m_GameObjectManager->importPlayer(m_Player); + m_UI.importMap(m_Map); + m_UI.importPlayer(m_Player); + m_UI.importGameObjManager(m_GameObjectManager); + + m_Player->setTotalCurrency(5000); + + // m_hunter->setCurrentCell({20,10}); + // m_runner->setCurrentCell({10,10}); + m_hunter->Start({20, 9}); + m_runner->Start({9, 10}); + m_hunter->setTarget(m_runner); + m_runner->setBeingChase(m_hunter); +} + +void DefaultScene::Update() { + // m_dummy.Update(); + + m_hunter->Update(); + m_runner->Update(); + + m_GameObjectManager->Update(); + + Util::Transform trans; + m_Map->Draw(trans, 0); + m_SceneCamera.Update(); + m_Renderer.Update(); + m_UI.Update(); + + Util::Transform trans2; + trans2.translation = Structure::ChangeToCell( + MapUtil::ScreenToGlobalCoord(Util::Input::GetCursorPosition())); + + auto tile = m_Map->getTileByCellPosition(MapUtil::GlobalCoordToCellCoord( + MapUtil::ScreenToGlobalCoord(Util::Input::GetCursorPosition()))); + + if (tile->getWalkable()) { + m_testdraw.setDrawMode(DrawOverlays::OverlayShapes::B_BOXES); + } else { + m_testdraw.setDrawMode(DrawOverlays::OverlayShapes::R_CROSS); + } + + m_testdraw.DrawUsingCamera(trans2, 1); + // m_GameObjectManager.Update(); + + if (m_UI.getIfAnyBuildingReadyToBuild()) { + m_GameObjectManager->Append(m_UI.getSelectedBuilding()); + } + m_UI.checkExistBuilding(m_GameObjectManager->getStructureArray()); + if (m_UI.getIfUnitReadyToSpawn()) { + m_GameObjectManager->Append(m_UI.getUnitFromUI()); + } +} diff --git a/src/Scene/MapScene.cpp b/src/Scene/MapScene.cpp new file mode 100644 index 00000000..ee15134b --- /dev/null +++ b/src/Scene/MapScene.cpp @@ -0,0 +1,20 @@ +// +// Created by 盧威任 on 2/15/24. +// +#include "Scene/MapScene.hpp" +#include "DrawOverlays.hpp" +#include +void MapScene::Start() { + // m_Map->Init(204, 161); + m_Map->Init( + MapBinReader::readBin("../assets/map/green-belt/map.bin", 98, 98), 98, + 98); +} + +void MapScene::Update() { + m_SceneCamera.Update(); + Util::Transform trans; + trans.scale = {1, 1}; + trans.translation = {0, 0}; + m_Map->Draw(trans, 0); +} diff --git a/src/SpriteSheet.cpp b/src/SpriteSheet.cpp new file mode 100644 index 00000000..8e2b98da --- /dev/null +++ b/src/SpriteSheet.cpp @@ -0,0 +1,52 @@ +// +// Created by 盧威任 on 3/1/24. +// +#include "SpriteSheet.hpp" + +void SpriteSheet::Start(std::string filepath, int spriteWidth, int spriteHeight, + int numSpirtes, int spacing) { + + this->m_SpriteWidth = spriteWidth; + this->m_SpriteHeight = spriteHeight; + + std::shared_ptr m_SpriteSheet_Image = + std::make_shared(filepath); + + // textcoord + float coordHeight = spriteHeight / (float)m_SpriteSheet_Image->GetSize().y; + float coordWidth = spriteWidth / (float)m_SpriteSheet_Image->GetSize().x; + std::vector coord({-(coordWidth / 2), (coordHeight / 2), // + -(coordWidth / 2), -(coordHeight / 2), // + (coordWidth / 2), -(coordHeight / 2), // + (coordWidth / 2), (coordHeight / 2)}); + + int currentX = 0; + int currentY = m_SpriteSheet_Image->GetSize().y - spriteHeight; + + // uvcoords + for (int i = 0; i < numSpirtes; i++) { + if (currentX >= m_SpriteSheet_Image->GetSize().x) { + currentX = 0; + currentY -= spriteHeight + spacing; + } + float topY = + (currentY + spriteHeight) / (float)m_SpriteSheet_Image->GetSize().y; + float rightX = + (currentX + spriteWidth) / (float)m_SpriteSheet_Image->GetSize().x; + float leftX = currentX / (float)m_SpriteSheet_Image->GetSize().x; + float bottomY = currentY / (float)m_SpriteSheet_Image->GetSize().y; + + m_Uv.push_back(std::vector({leftX, bottomY, // + leftX, topY, // + rightX, topY, // + rightX, bottomY})); + + m_SpriteSheet.push_back( + std::make_unique(filepath, coord, + std::vector{leftX, bottomY, // + leftX, topY, // + rightX, topY, // + rightX, bottomY})); + currentX += spriteWidth + spacing; + } +} diff --git a/src/Structure/Barracks.cpp b/src/Structure/Barracks.cpp new file mode 100644 index 00000000..bc5994ee --- /dev/null +++ b/src/Structure/Barracks.cpp @@ -0,0 +1,21 @@ +#include "Structure/Barracks.hpp" + +void Barracks::Start() { + // Set Texture---------------------------------------- + this->SetDrawable( + std::make_unique("../assets/sprites/barracks.png")); + m_wayPoint->SetDrawable( + std::make_unique("../assets/sprites/flagB.png")); + m_HighLight.SetDrawable( + std::make_unique("../assets/sprites/HighLightB.png")); + // Set ZIndex + this->SetZIndex(DEFAULT_ZINDEX); + m_wayPoint->SetZIndex(DEFAULT_ZINDEX); + m_HighLight.SetZIndex(DEFAULT_ZINDEX - 1); + // Set Attachment Scale & + // Visibility---------------------------------------- + m_HighLight.SetHLScale(this->GetTranScale()); + onSelected(); + // State + SetCurrentUpdateMode(Structure::updateMode::Moveable); +} diff --git a/src/Structure/HighLight.cpp b/src/Structure/HighLight.cpp new file mode 100644 index 00000000..4b45f7df --- /dev/null +++ b/src/Structure/HighLight.cpp @@ -0,0 +1,4 @@ +// +// Created by nudle on 2024/3/8. +// +#include "Structure/HighLight.h" diff --git a/src/Structure/OreRefinery.cpp b/src/Structure/OreRefinery.cpp new file mode 100644 index 00000000..57e32791 --- /dev/null +++ b/src/Structure/OreRefinery.cpp @@ -0,0 +1,20 @@ + +#include "Structure/OreRefinery.hpp" +void OreRefinery::Start() { + // Set Texture---------------------------------------- + SetDrawable(std::make_unique("../assets/sprites/OreRefinery.png")); + m_wayPoint->SetDrawable( + std::make_unique("../assets/sprites/flagB.png")); + m_HighLight.SetDrawable( + std::make_unique("../assets/sprites/HighLightB.png")); + // Set ZIndex + this->SetZIndex(DEFAULT_ZINDEX); + m_wayPoint->SetZIndex(DEFAULT_ZINDEX); + m_HighLight.SetZIndex(DEFAULT_ZINDEX - 1); + // Set Attachment Scale & + // Visibility---------------------------------------- + m_HighLight.SetHLScale(this->GetTranScale()); + onSelected(); + // State + SetCurrentUpdateMode(Structure::updateMode::Moveable); +} diff --git a/src/Structure/PowerPlants.cpp b/src/Structure/PowerPlants.cpp new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/src/Structure/PowerPlants.cpp @@ -0,0 +1,2 @@ + + diff --git a/src/Structure/Structure.cpp b/src/Structure/Structure.cpp new file mode 100644 index 00000000..3f385af9 --- /dev/null +++ b/src/Structure/Structure.cpp @@ -0,0 +1,106 @@ +// +// Created by 盧威任 on 1/30/24. +// +#include "Structure/Structure.hpp" +#include "GameObjectManager.hpp" +#include "Util/Input.hpp" +#include "Util/Transform.hpp" +#include "config.hpp" +void Structure::Start() { + m_HighLight.SetDrawable( + std::make_unique("../assets/sprites/HighLightB.png")); + m_HighLight.SetHLScale(this->GetTranScale()); + m_HighLight.SetZIndex(DEFAULT_ZINDEX - 1); + SetZIndex(DEFAULT_ZINDEX); + this->SetAttachVisible(false); + m_CurrentState = updateMode::Moveable; +} +void Structure::Update() { + switch (m_CurrentState) { + case updateMode::Invisidable: { + this->updateInvinsible(); + break; + } + case updateMode::Fixed: { + this->updateFixed(); + break; + } + case updateMode::Moveable: { + this->updateMoveable(); + break; + } + } +} +void Structure::updateFixed() { + // Attachment and self readjust location and draw--------------- + attachmentUpdate(); + this->Draw(); + // Script when select-------------------- +} +void Structure::updateMoveable() { + // debug + printf("debug message : Structure movable\n"); + // + glm::vec2 location = Util::Input::GetCursorPosition(); + location = MapUtil::ScreenToGlobalCoord(location); + this->SetObjectLocation(location); + this->SetVisible(true); + this->Draw(); + glm::vec2 cellPos = MapUtil::GlobalCoordToCellCoord(location); +// std::shared_ptr tileClass = m_Map->getTileByCellPosition(cellPos); + if (Util::Input::IsKeyPressed(Util::Keycode::MOUSE_LB) /*tileClass->getBuildable()*/) { + this->SetObjectLocation(location); + this->SetCurrentUpdateMode(updateMode::Fixed); +// tileClass->setBuildable(false); +// tileClass->setWalkable(false); + // 在這裡增加設置Tile屬性 + /* + std::shared_ptrtile = + MapClass::getTileByCellPosition(cellPos); tile->setWalkable(false); + tile->setBuildable(false); + MapClass::setTileByCellPosition(cellPos,tile);*/ + } +} +void Structure::updateInvinsible() { + this->SetAttachVisible(false); +} + +void Structure::DecreaseHp(float Hp) { + this->buildingHp -= Hp; +} +float Structure::GetElectricPower() { + return this->electricPower; +} +float Structure::GetBuildingTime() { + return this->buildingTime; +} +float Structure::GetBuildingCost() { + return this->buildingCost; +} +float Structure::GetBuildingHp() { + return this->buildingHp; +} +glm::vec2 Structure::ChangeToCell(glm::vec2 location) { + int _x = location.x / CELL_SIZE.x; + int _y = location.y / CELL_SIZE.y; + return {_x * CELL_SIZE.x, _y * CELL_SIZE.y}; +} +void Structure::SetObjectLocation(glm::vec2 location) { + location = ChangeToCell(location); + ObjectLocation = location; + DrawLocation = {location.x + 0.5 * CELL_SIZE.x, + location.y + 0.5 * CELL_SIZE.y}; + m_Transform.translation = DrawLocation; +} +void Structure::onSelected() { + this->SetAttachVisible(getSelected()); +}; + +void Structure::SetAttachVisible(bool visible) { + m_HighLight.SetObjectLocation(this->DrawLocation); + m_HighLight.SetVisible(visible); +} +void Structure::attachmentUpdate() { + m_HighLight.SetObjectLocation(this->GetDrawLocation()); + m_HighLight.Draw(); +} diff --git a/src/Structure/WarFactory.cpp b/src/Structure/WarFactory.cpp new file mode 100644 index 00000000..1421caf5 --- /dev/null +++ b/src/Structure/WarFactory.cpp @@ -0,0 +1,20 @@ +#include "Structure/WarFactory.hpp" +void WarFactory::Start() { + // Set Texture---------------------------------------- + this->SetDrawable( + std::make_unique("../assets/sprites/barracks.png")); + m_wayPoint->SetDrawable( + std::make_unique("../assets/sprites/flagB.png")); + m_HighLight.SetDrawable( + std::make_unique("../assets/sprites/HighLightB.png")); + // Set ZIndex + this->SetZIndex(DEFAULT_ZINDEX); + m_wayPoint->SetZIndex(DEFAULT_ZINDEX); + m_HighLight.SetZIndex(DEFAULT_ZINDEX - 1); + // Set Attachment Scale & + // Visibility---------------------------------------- + m_HighLight.SetHLScale(this->GetTranScale()); + onSelected(); + // State + SetCurrentUpdateMode(Structure::updateMode::Moveable); +} diff --git a/src/Structure/WayPoint.cpp b/src/Structure/WayPoint.cpp new file mode 100644 index 00000000..e80b1fb4 --- /dev/null +++ b/src/Structure/WayPoint.cpp @@ -0,0 +1,17 @@ +// +// Created by nudle on 2024/3/4. +// +#include "Structure/WayPoint.hpp" +#include "Structure/Structure.hpp" +void WayPoint::Update([[maybe_unused]] const Util::Transform &transsform) { + static glm::vec2 dir = {1, 0.5}; + + auto &pos = m_Transform.translation; + + m_Transform.scale = {0.5, 0.5}; +} +void WayPoint::SetObjectLocation(glm::vec2 location) { + Structure::ChangeToCell(location); + ObjectLocation = location; + m_Transform.translation = location; +} diff --git a/src/Structure/WayPointStructure.cpp b/src/Structure/WayPointStructure.cpp new file mode 100644 index 00000000..3712af91 --- /dev/null +++ b/src/Structure/WayPointStructure.cpp @@ -0,0 +1,61 @@ +// +// Created by 盧威任 on 3/26/24. +// +#include "Structure/WayPointStructure.hpp" +#include "Map/MapUtility.hpp" + +void WayPointStructure::updateMoveable() { + glm::vec2 location = Util::Input::GetCursorPosition(); + location = MapUtil::ScreenToGlobalCoord(location); + location = MapUtil::GlobalCoordToCellCoord(location); + location = MapUtil::CellCoordToGlobal(location); + this->SetObjectLocation(location); + this->SetVisible(true); + this->Draw(); + glm::vec2 cellPos = MapUtil::GlobalCoordToCellCoord(location); +// std::shared_ptr tileClass = m_Map->getTileByCellPosition(cellPos); + if (Util::Input::IsKeyPressed(Util::Keycode::MOUSE_LB) /*tileClass->getBuildable()*/) { + this->SetObjectLocation(location); + this->SetWayPointLocation({GetDrawLocation().x + CELL_SIZE.x, + GetDrawLocation().y + CELL_SIZE.y}); + onSelected(); + this->SetCurrentUpdateMode(updateMode::Fixed); +// tileClass->setBuildable(false); +// tileClass->setWalkable(false); + // 在這裡增加設置Tile屬性 + /* + std::shared_ptrtile = + MapClass::getTileByCellPosition(cellPos); tile->setWalkable(false); + tile->setBuildable(false); + MapClass::setTileByCellPosition(cellPos,tile);*/ + } +} +void WayPointStructure::onSelected() { + if (b_selectingNewWayPoint) { + this->SetWayPointLocation( + MapUtil::ScreenToGlobalCoord(Util::Input::GetCursorPosition())); + b_selectingNewWayPoint = false; + } + attachmentUpdate(); + this->SetAttachVisible(getSelected()); + if (getSelected()) { + if (Util::Input::IsKeyPressed(Util::Keycode::V)) { + b_selectingNewWayPoint = true; + } + } +} +void WayPointStructure::SetAttachVisible(bool visible) { + m_wayPoint->SetVisible(visible); + m_HighLight.SetVisible(visible); + m_Grid.SetActivate(visible); +} +void WayPointStructure::attachmentUpdate() { + m_HighLight.SetObjectLocation(this->GetDrawLocation()); + m_wayPoint->SetObjectLocation(this->GetWayPointLocation()); + m_Grid.setLine(GetDrawLocation(), GetWayPointLocation(), + glm::vec3(0, 0, 1)); + m_wayPoint->Draw(); + m_HighLight.Draw(); + Util::Transform Trans; + m_Grid.DrawUsingCamera(Trans, DEFAULT_ZINDEX); +} diff --git a/src/UI/UI.cpp b/src/UI/UI.cpp new file mode 100644 index 00000000..732c752e --- /dev/null +++ b/src/UI/UI.cpp @@ -0,0 +1,493 @@ +// +// Created by 盧威任 on 3/3/24. +// + +#include "UI/UI.hpp" +#include "Map/Map.hpp" + +ImVec2 start_pos; +ImVec2 end_pos; +std::unordered_map UIClass::s_unitConstructCount; + +void UIClass::Start() { + InitUnitQueue(); + m_StructureIconSpriteSheet->Start( + "../assets/sprites/ICON_Allied_Structure.png", 64, 48, 24, 0); + m_InfantryIconSpriteSheet->Start( + "../assets/sprites/ICON_Allied_Infantry.png", 64, 48, 8, 0); + m_VehiclesIconSpriteSheet->Start( + "../assets/sprites/ICON_Allied_Vehicles.png", 64, 48, 12, 0); + + io.FontGlobalScale *= 0.115f; // Adjust as needed +} + +void UIClass::Update() { + ImGui_ImplOpenGL3_NewFrame(); + ImGui_ImplSDL2_NewFrame(); + + ImGui::NewFrame(); + ShowCursorSelectionRegion(&start_pos, &end_pos, ImGuiMouseButton_Left); + ShowPlayerConstructionMenu(); + + ImGui::Render(); + ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + + ButtonScript.Update(getIfAnyBuildingReadyToBuild()); + // printf("(UI)Button Lock : + // %s,%s\n",selectLock()?"Unlock":"Lock",b_SelectToBuild?"True":"False"); +} + +void UIClass::ShowCursorSelectionRegion(ImVec2 *start_pos, ImVec2 *end_pos, + ImGuiMouseButton mouse_button) { + IM_ASSERT(start_pos != NULL); + IM_ASSERT(end_pos != NULL); + if (ImGui::IsMouseClicked(mouse_button)) + *start_pos = ImGui::GetMousePos(); + if (ImGui::IsMouseDown(mouse_button)) { + *end_pos = ImGui::GetMousePos(); + ImDrawList *draw_list = + ImGui::GetForegroundDrawList(); // ImGui::GetWindowDrawList(); + draw_list->AddRect( + *start_pos, *end_pos, + ImGui::GetColorU32(IM_COL32(255, 255, 255, 255))); // Border + // draw_list->AddRectFilled(*start_pos, *end_pos, + // ImGui::GetColorU32(IM_COL32(0, 130, 216, 50))); // Background + } +} + +void UIClass::ShowHeaderSection() { + + glm::vec2 CursorGlobalPosition = MapUtil::ScreenToGlobalCoord( + glm::vec2(Util::Input::GetCursorPosition())); + ImGui::Text(std::string("X: " + std::to_string(CursorGlobalPosition.x) + + " Y: " + std::to_string(CursorGlobalPosition.y)) + .c_str()); + auto cellLocation = MapUtil::GlobalCoordToCellCoord(CursorGlobalPosition); + ImGui::Text(std::string("Cell X: " + std::to_string(int(cellLocation.x)) + + " Cell Y: " + std::to_string(int(cellLocation.y))) + .c_str()); + // ImGui::Text(fmt::format("Zoom: {}", + // m_SceneCamera.getCameraZoom()).c_str()); + ImGui::Text(fmt::format("$ {}", m_Player->getTotalCurrency()).c_str()); + ImGui::Text( + fmt::format("Power {}", m_gameObjectManager->GetTotalPower()).c_str()); + ImGui::PushFont(sacker_med); + if (ImGui::Button("Grid")) { + } + ImGui::PopFont(); +} +void UIClass::ShowPlayerConstructionMenu() { + auto windowSettings = ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoScrollbar | + ImGuiWindowFlags_NoResize; + + // put the stuff in here + ImGui::Begin("Structure Selection Menu", nullptr, windowSettings); + ShowHeaderSection(); + ImGui::SetWindowSize(ImVec2(250, 580)); + ImGui::SetWindowPos(ImVec2(992, 48)); + + // Adjust font texture size if necessary + // Larger font texture size may improve text clarity on high DPI displays + + if (ImGui::BeginTabBar("", ImGuiTabBarFlags_None)) { + ShowBuildingTab(); + ShowDefTab(); + ShowInfantryTab(); + ShowVehTab(); + + ImGui::EndTabBar(); + } + ImGui::End(); +} + +std::vector +UIClass::getSpriteSheetCoordByIndex(std::shared_ptr spritesheet, + int index) { + return std::vector( + {ImVec2( + SpriteSheet::UVtoImGuiCoord(spritesheet->getUVbyIndex(index))[0].x, + SpriteSheet::UVtoImGuiCoord(spritesheet->getUVbyIndex(index))[0] + .y), + ImVec2( + SpriteSheet::UVtoImGuiCoord(spritesheet->getUVbyIndex(index))[1].x, + SpriteSheet::UVtoImGuiCoord(spritesheet->getUVbyIndex(index))[1] + .y)}); +} + +void UIClass::ShowBuildingTab() { + if (ImGui::BeginTabItem("Build")) { + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 7)) { + // power plants + if (selectLock() && + ButtonScript.GetIfFinished(unitType::POWER_PLANT)) { + setSelectToBuild(unitType::POWER_PLANT); + } else { + ButtonScript.AddToBuildQueue(unitType::POWER_PLANT); + } + } + + ImDrawList *dl = ImGui::GetWindowDrawList(); + ImVec2 p = ImGui::GetCursorScreenPos(); + p.x += 5.F; + p.y -= 38.F; + ImGui::PushFont(sacker_heav); + if (ButtonScript.GetCurrentStructure() == unitType::POWER_PLANT) { + dl->AddText(p, IM_COL32(2, 255, 2, 255), + ButtonScript.GetFormattedCD().c_str()); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 22)) { + // barracks + if (selectLock() && + ButtonScript.GetIfFinished(unitType::BARRACKS)) { + setSelectToBuild(unitType::BARRACKS); + } else { + ButtonScript.AddToBuildQueue(unitType::BARRACKS); + } + } + p.x += 80.F; + if (ButtonScript.GetCurrentStructure() == unitType::BARRACKS) { + dl->AddText(p, IM_COL32(2, 255, 2, 255), + ButtonScript.GetFormattedCD().c_str()); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 8)) { + // ore + if (selectLock() && ButtonScript.GetIfFinished(unitType::ORE_REF)) { + setSelectToBuild(unitType::ORE_REF); + } else { + ButtonScript.AddToBuildQueue(unitType::ORE_REF); + } + } + p.x += 80.F; + if (ButtonScript.GetCurrentStructure() == unitType::ORE_REF) { + dl->AddText(p, IM_COL32(2, 255, 2, 255), + ButtonScript.GetFormattedCD().c_str()); + } + ImGui::NewLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 20)) { + // war factory + if (selectLock() && + ButtonScript.GetIfFinished(unitType::WAR_FACT)) { + setSelectToBuild(unitType::WAR_FACT); + } else { + ButtonScript.AddToBuildQueue(unitType::WAR_FACT); + } + } + dl = ImGui::GetWindowDrawList(); + p = ImGui::GetCursorScreenPos(); + p.x += 5.F; + p.y -= 38.F; + if (ButtonScript.GetCurrentStructure() == unitType::WAR_FACT) { + dl->AddText(p, IM_COL32(2, 255, 2, 255), + ButtonScript.GetFormattedCD().c_str()); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 1)) { + // advance power + if (selectLock() && + ButtonScript.GetIfFinished(unitType::ADV_POWER_PLANT)) { + setSelectToBuild(unitType::ADV_POWER_PLANT); + } else { + ButtonScript.AddToBuildQueue(unitType::ADV_POWER_PLANT); + } + LOG_DEBUG("TEST"); + } + p.x += 80.F; + if (ButtonScript.GetCurrentStructure() == unitType::ADV_POWER_PLANT) { + dl->AddText(p, IM_COL32(2, 255, 2, 255), + ButtonScript.GetFormattedCD().c_str()); + } + + ImGui::NewLine(); + if (ImGui::Button("Radar Dome")) { + LOG_DEBUG("TEST"); + } + if (ImGui::Button("Service Depot")) { + LOG_DEBUG("TEST"); + } + if (ImGui::Button("Tech Center")) { + LOG_DEBUG("TEST"); + } + ImGui::PopFont(); + ImGui::EndTabItem(); + } +}; + +void UIClass::ShowInfantryTab() { + if (ImGui::BeginTabItem("Inf")) { + if (getImageButtonBySpriteSheetIndex(m_InfantryIconSpriteSheet, 0)) { + // rifle + if (b_barackBuilt) { + ButtonScript.AddToSpawnQueue(unitType::INFANTRY); + setUnitConstructCount(unitType::INFANTRY, 1); + } + + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_InfantryIconSpriteSheet, 1)) { + // rocket + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_InfantryIconSpriteSheet, 2)) { + // engineer + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::NewLine(); + if (getImageButtonBySpriteSheetIndex(m_InfantryIconSpriteSheet, 3)) { + // medic + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_InfantryIconSpriteSheet, 6)) { + // tanya + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::EndTabItem(); + } +}; +void UIClass::ShowDefTab() { + if (ImGui::BeginTabItem("Def")) { + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 18)) { + // sandbags + + setUnitConstructCount(unitType::SANDBAGS, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 16)) { + // pillbox + setUnitConstructCount(unitType::PILLBOX, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_StructureIconSpriteSheet, 14)) { + // turret + setUnitConstructCount(unitType::TURRET, 1); + LOG_DEBUG("TEST"); + } + ImGui::EndTabItem(); + } +}; +void UIClass::ShowVehTab() { + if (ImGui::BeginTabItem("Veh")) { + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 0)) { + // lightTank + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 1)) { + // mediumTank + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 4)) { + // Art + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::NewLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 4)) { + // Art + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 8)) { + + // OreTruck + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 4)) { + // Art + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::NewLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 9)) { + // MCV + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (getImageButtonBySpriteSheetIndex(m_VehiclesIconSpriteSheet, 11)) { + // DemoTruck + // setUnitConstructCount(unitType::, 1); + LOG_DEBUG("TEST"); + } + ImGui::SameLine(); + if (ImGui::Button("Truck")) { + // truck + setUnitConstructCount(unitType::TRUCK, 1); + LOG_DEBUG("TEST"); + } + ImGui::EndTabItem(); + } +}; + +bool UIClass::getImageButtonBySpriteSheetIndex( + std::shared_ptr spritesheet, int index) { + std::string Text = "test"; + + auto uvcoord = getSpriteSheetCoordByIndex(spritesheet, index); + return ImGui::ImageButton( + (void *)(intptr_t)spritesheet->getGlunitByIndex(index), + ImVec2(spritesheet->getSpriteSize().x, spritesheet->getSpriteSize().y), + uvcoord[0], uvcoord[1]); +} + +void UIClass::InitUnitQueue() { + UIClass::s_unitConstructCount[unitType::POWER_PLANT] = 0; + UIClass::s_unitConstructCount[unitType::BARRACKS] = 0; + UIClass::s_unitConstructCount[unitType::ORE_REF] = 0; + UIClass::s_unitConstructCount[unitType::WAR_FACT] = 0; + UIClass::s_unitConstructCount[unitType::ADV_POWER_PLANT] = 0; + UIClass::s_unitConstructCount[unitType::SANDBAGS] = 0; + UIClass::s_unitConstructCount[unitType::PILLBOX] = 0; + UIClass::s_unitConstructCount[unitType::TURRET] = 0; + UIClass::s_unitConstructCount[unitType::INFANTRY] = 0; + UIClass::s_unitConstructCount[unitType::TRUCK] = 0; +} +std::unique_ptr UIClass::getSelectedBuilding() { + b_SelectToBuild = false; + if (getIfSelectToBuild(unitType::BARRACKS)) { + setUnitConstructCount(unitType::BARRACKS, 1); + b_Baracks = false; + ButtonScript.SetIfFinished(unitType::BARRACKS, false); + return std::make_unique(); + } + if (getIfSelectToBuild(unitType::ORE_REF)) { + setUnitConstructCount(unitType::ORE_REF, 1); + b_OreRefinery = false; + ButtonScript.SetIfFinished(unitType::ORE_REF, false); + return std::make_unique(); + } + if (getIfSelectToBuild(unitType::POWER_PLANT)) { + setUnitConstructCount(unitType::POWER_PLANT, 1); + b_PowerPlants = false; + ButtonScript.SetIfFinished(unitType::POWER_PLANT, false); + return std::make_unique(); + } + if (getIfSelectToBuild(unitType::WAR_FACT)) { + setUnitConstructCount(unitType::WAR_FACT, 1); + b_WarFactory = false; + ButtonScript.SetIfFinished(unitType::WAR_FACT, false); + return std::make_unique(); + } + if (getIfSelectToBuild(unitType::ADV_POWER_PLANT)) { + setUnitConstructCount(unitType::ADV_POWER_PLANT, 1); + b_ADVPowerPlant = false; + ButtonScript.SetIfFinished(unitType::ADV_POWER_PLANT, false); + return std::make_unique(); + } +} +bool UIClass::getIfSelectToBuild(unitType type) { + switch (type) { + case unitType::BARRACKS: + return b_Baracks; + case unitType::ORE_REF: + return b_OreRefinery; + case unitType::POWER_PLANT: + return b_PowerPlants; + case unitType::WAR_FACT: + return b_WarFactory; + case unitType::ADV_POWER_PLANT: + return b_ADVPowerPlant; + } +} +void UIClass::setSelectToBuild(unitType type) { + b_SelectToBuild = true; + switch (type) { + case unitType::BARRACKS: + b_Baracks = true; + break; + case unitType::ORE_REF: + b_OreRefinery = true; + break; + case unitType::POWER_PLANT: + b_PowerPlants = true; + break; + case unitType::WAR_FACT: + b_WarFactory = true; + break; + case unitType::ADV_POWER_PLANT: + b_ADVPowerPlant = true; + break; + } +} +bool UIClass::selectLock() { + return !(b_Baracks | b_OreRefinery | b_PowerPlants | b_WarFactory | + b_ADVPowerPlant); +} +bool UIClass::getIfAnyBuildingReadyToBuild() { + return b_SelectToBuild && + (ButtonScript.GetIfFinished(unitType::BARRACKS) || + ButtonScript.GetIfFinished(unitType::POWER_PLANT) || + ButtonScript.GetIfFinished(unitType::ORE_REF) || + ButtonScript.GetIfFinished(unitType::WAR_FACT) || + ButtonScript.GetIfFinished(unitType::ADV_POWER_PLANT)); +} + +void UIClass::checkExistBuilding( + std::vector> buildingList) { + b_barackBuilt = false; + b_warfactoryBuilt = false; + b_orerefineryBuilt = false; + if (buildingList.size() == 0) { + return; + } + for (auto i : buildingList) { + if (std::dynamic_pointer_cast(i) && !b_barackBuilt) { + m_barrackTargetCell = MapUtil::GlobalCoordToCellCoord( + std::dynamic_pointer_cast(i)->GetWayPointLocation()); + b_barackBuilt = true; + m_barrackCell = + MapUtil::GlobalCoordToCellCoord(i->GetObjectLocation()); + } else if (std::dynamic_pointer_cast(i) && + !b_warfactoryBuilt) { + m_warfactoryTargetCell = MapUtil::GlobalCoordToCellCoord( + std::dynamic_pointer_cast(i) + ->GetWayPointLocation()); + b_warfactoryBuilt = true; + m_warfactoryCell = + MapUtil::GlobalCoordToCellCoord(i->GetObjectLocation()); + } else if (std::dynamic_pointer_cast(i) && + !b_orerefineryBuilt) { + m_orerefineryTargetCell = MapUtil::GlobalCoordToCellCoord( + std::dynamic_pointer_cast(i) + ->GetWayPointLocation()); + b_orerefineryBuilt = true; + m_orerefineryCell = + MapUtil::GlobalCoordToCellCoord(i->GetObjectLocation()); + } + } +} + +std::shared_ptr UIClass::getUnitFromUI() { + printf("(UI)return to GOM\n"); + auto Avatar = ButtonScript.spawnAvatar(); + ButtonScript.setIfReadytoSpawn(false); + if (std::dynamic_pointer_cast(Avatar)) { + Avatar->Start(m_barrackCell); + Avatar->setNewDestination(m_barrackTargetCell); + } /*else if(std::dynamic_pointer_cast< >(Avatar)){ + Avatar->Start(m_warfactoryCell,m_Map); + Avatar->setNewDestination(m_warfactoryTargetCell); + } else if(std::dynamic_pointer_cast< >(Avatar)){ + Avatar->Start(m_orerefineryCell,m_Map); + Avatar->setNewDestination(m_orerefineryTargetCell); + }*/ + printf("(UI)return to GOM success\n"); + return Avatar; +} diff --git a/src/UI/UIScriptProcess.cpp b/src/UI/UIScriptProcess.cpp new file mode 100644 index 00000000..10e65f0d --- /dev/null +++ b/src/UI/UIScriptProcess.cpp @@ -0,0 +1,259 @@ +// +// Created by nudle on 2024/3/8. +// +#include "UI/UIScriptProcess.hpp" +#include +#include +bool UIScriptProcess::GetIfFinished(unitType type) { + switch (type) { + case unitType::BARRACKS: + return b_Baracks; + case unitType::ORE_REF: + return b_OreRefinery; + case unitType::POWER_PLANT: + return b_PowerPlants; + case unitType::WAR_FACT: + return b_WarFactory; + case unitType::ADV_POWER_PLANT: + return b_ADVPowerPlant; + } +} + +float UIScriptProcess::GetCDLeft() { + if (b_isBuildingInCoolDown) { + std::chrono::duration elapsed = + m_currentCountDownTime - m_buildStartTime; + return GetBuildCountDownTime() - elapsed.count(); + } else { + return -1.F; + } +} +std::string UIScriptProcess::GetFormattedCD() { + float f = GetCDLeft(); + int min_part = int(f / 60); + std::ostringstream min; + min << std::setfill('0'); + min << std::setw(2); + min << std::to_string(min_part); + + std::ostringstream sec; + sec << std::setfill('0'); + sec << std::setw(2); + sec << std::to_string(int(f - min_part * 60)); + + if (f < 0) { + return "Ready"; + } else { + return min.str() + ":" + sec.str(); + } +} + +void UIScriptProcess::CountDown() { + double buildCoolDownTime = GetBuildCountDownTime(); + double spawnCoolDownTime = GetSpawnCountDownTime(); + m_currentCountDownTime = std::chrono::high_resolution_clock::now(); + + //Structure Building + std::chrono::duration buildElapsed = m_currentCountDownTime - m_buildStartTime; + if(m_gameObjectManager->GetTotalCurrency()<=0 && b_isBuildingInCoolDown && buildElapsed.count() < buildCoolDownTime){ + if(m_gameObjectManager->GetTotalPower()<=0){ + SetBuildCountDown(buildCoolDownTime/2-buildElapsed.count()); + }else{ + SetBuildCountDown(buildCoolDownTime-buildElapsed.count()); + } + }else{ + if((b_isBuildingInCoolDown && buildElapsed.count()-m_lastBuildElapsed>=1)|| buildElapsed.count()==0){//update every second + m_lastBuildElapsed=buildElapsed.count(); + int buildCost= GetObjCost(m_currentStructureType)/buildCoolDownTime; + if(buildCost>=m_currentBuildRemainingCost){ + buildCost=m_currentBuildRemainingCost; + } + if(m_currentBuildRemainingCost>0){ + m_currentBuildRemainingCost-=buildCost; + m_player->addCurrency(-1*buildCost); + } + } + // if finish building + if (buildElapsed.count() >= buildCoolDownTime && b_isBuildingInCoolDown) { + // printf("(Button) Construction Finished\n"); + SetIfFinished(m_currentStructureType, true); + b_isBuildingInCoolDown = false; + } + } + + //Unit Spawning + std::chrono::duration spawnElapsed = m_currentCountDownTime - m_SpawnStartTime; + if(m_gameObjectManager->GetTotalCurrency()<=0 && b_isSpawningInCooldown && spawnElapsed.count() < spawnCoolDownTime){ + if(m_gameObjectManager->GetTotalPower()<=0){ + SetSpawnCountDown(spawnCoolDownTime/2-spawnElapsed.count()); + }else{ + SetSpawnCountDown(spawnCoolDownTime-spawnElapsed.count()); + } + }else{ + if((b_isSpawningInCooldown && spawnElapsed.count()-m_lastSpawnElapsed>=1) || spawnElapsed.count()==0){//update every second + m_lastSpawnElapsed=spawnElapsed.count(); + int spawnCost=GetObjCost(m_currentAvatarType)/spawnCoolDownTime; + if(spawnCost>=m_currentSpawnRemainingCost){ + spawnCost=m_currentSpawnRemainingCost; + } + if(m_currentSpawnRemainingCost>0){ + m_currentSpawnRemainingCost-=spawnCost; + m_player->addCurrency(-1*spawnCost); + } + } + //if finish spawning + if (spawnElapsed.count() >= spawnCoolDownTime && b_isSpawningInCooldown) { + b_isReadyToSpawn=true; + b_isSpawningInCooldown = false; + // printf("(UISC)Unit Ready\n"); + } + } + + if (b_isBuildingInCoolDown) { + // printf("(Button) CD: %.2f,%s\n", m_buildCoolDownTime - elapsed.count(), + // elapsed.count() >= m_buildCoolDownTime ? "True" : "False"); + } + if (b_isSpawningInCooldown) { +// printf("(UISC) CD: %.2f,%s\n", unitElapsed.count(), +// elapsed.count() >= m_spawnCooldownTime ? "True" : "False"); + } +} +void UIScriptProcess::SetBuildCountDown(float time) { + m_buildCoolDownTime = time; + m_offPowerBuildCoolDownTime = time*2; + m_buildStartTime = std::chrono::high_resolution_clock::now(); +} +void UIScriptProcess::SetSpawnCountDown(float time) { + m_spawnCoolDownTime = time; + m_offPowerSpawnCoolDownTime = time*2; + m_SpawnStartTime = std::chrono::high_resolution_clock::now(); +} + +void UIScriptProcess::AddToBuildQueue(unitType type) { + if (GetIfFinished(type)) { + return; + } + m_buildQueue.push_back(type); + return; +} +void UIScriptProcess::Update(bool queueContinue) { + //(m_buildQueue.size() > 1 && queueContinue && !b_isBuildingInCoolDown) for waiting player to + //build strucutre, then continue operating + if ((m_buildQueue.size() == 1 && !b_isBuildingInCoolDown) || + ((m_buildQueue.size() > 1 && queueContinue && !b_isBuildingInCoolDown))) { + m_currentStructureType = m_buildQueue.front(); + m_buildQueue.pop_front(); + b_isBuildingInCoolDown = true; + SetBuildCountDown(GetStructureTime(m_currentStructureType)); + m_currentBuildRemainingCost= GetObjCost(m_currentStructureType); + } + if (m_spawnQueue.size() !=0 && !b_isSpawningInCooldown) { + m_currentAvatarType = m_spawnQueue.front(); + m_spawnQueue.pop_front(); + b_isSpawningInCooldown = true; + SetSpawnCountDown(GetSpawnTime(m_currentAvatarType)); + m_currentSpawnRemainingCost=GetObjCost(m_currentAvatarType); + } + CountDown(); +} + +float UIScriptProcess::GetStructureTime(unitType type) { + if (type == unitType::POWER_PLANT) { + return powerPlant->GetBuildingTime(); + } + if (type == unitType::BARRACKS) { + return barracks->GetBuildingTime(); + } + if (type == unitType::ORE_REF) { + return oreRefinery->GetBuildingTime(); + } + if (type == unitType::WAR_FACT) { + return warFactory->GetBuildingTime(); + } + if (type == unitType::ADV_POWER_PLANT) { + return advPowerPlant->GetBuildingTime(); + } +} + +void UIScriptProcess::SetIfFinished(unitType type, bool value) { + switch (type) { + case unitType::BARRACKS: + b_Baracks = value; + break; + case unitType::ORE_REF: + b_OreRefinery = value; + break; + case unitType::POWER_PLANT: + b_PowerPlants = value; + break; + case unitType::WAR_FACT: + b_WarFactory = value; + break; + case unitType::ADV_POWER_PLANT: + b_ADVPowerPlant = value; + break; + default: + // Handle the case when type doesn't match any of the options + // For example, you might throw an exception or set a default value + break; + } +} + +void UIScriptProcess::AddToSpawnQueue(unitType type){ +// printf("(UISC)Add Spawn Queue\n"); + m_spawnQueue.push_back(type); + return; + +} +float UIScriptProcess::GetSpawnTime(unitType type){ + switch (type) { + case unitType::INFANTRY:{ + return 5.F; + } + } +} + +std::shared_ptr UIScriptProcess::spawnAvatar(){ +// printf("(UISC)spawnAvatar\n"); + switch (m_currentAvatarType) { + case unitType::INFANTRY:{ + return std::make_unique(); + } + } +} + +float UIScriptProcess::GetBuildCountDownTime(){ + if(m_gameObjectManager->GetTotalPower()<=0){ + return m_offPowerBuildCoolDownTime; + }else{ + return m_buildCoolDownTime; + } +} +float UIScriptProcess::GetSpawnCountDownTime(){ + if(m_gameObjectManager->GetTotalPower()<=0){ + return m_offPowerSpawnCoolDownTime; + }else{ + return m_spawnCoolDownTime; + } +} +int UIScriptProcess::GetObjCost(unitType type){ + switch (type) { + case unitType::BARRACKS: + return barracks->GetBuildingCost(); + case unitType::ORE_REF: + return oreRefinery->GetBuildingCost(); + case unitType::POWER_PLANT: + return powerPlant->GetBuildingCost(); + case unitType::WAR_FACT: + return warFactory->GetBuildingCost(); + case unitType::ADV_POWER_PLANT: + return advPowerPlant->GetBuildingCost(); + case unitType::INFANTRY: + return 100; + default: + // Handle the case when type doesn't match any of the options + // For example, you might throw an exception or set a default value + break; + } + +} \ No newline at end of file diff --git a/src/Unit/Hunter.cpp b/src/Unit/Hunter.cpp new file mode 100644 index 00000000..9d55f6f2 --- /dev/null +++ b/src/Unit/Hunter.cpp @@ -0,0 +1,20 @@ +// +// Created by nudle on 2024/3/29. +// + +#include "Unit/Hunter.hpp" + +void Hunter::customizeUpdate(){ + glm::vec2 targetCell = m_target->getCurrentCell(); + if(getDistance(targetCell)>ATTACK_RANGE-1 && lastTargetCell!=m_target->getCurrentCell()){ + // glm::vec2 nextCell = getNextCellByCurrent(getDirByRelativeCells(getCurrentCell(),targetCell),getCurrentCell()); + setNewDestination(m_target->getCurrentCell()); + lastTargetCell=m_target->getCurrentCell(); + // setNewDestination(nextCell); + } + else if(getDistance(targetCell) 0 && yDiff > 0) { + direction = MoveDirection::UP_RIGHT; + } else if (xDiff > 0 && yDiff < 0) { + direction = MoveDirection::DOWN_RIGHT; + } else if (xDiff < 0 && yDiff > 0) { + direction = MoveDirection::UP_LEFT; + } else { + direction = MoveDirection::DOWN_LEFT; + } + } else { + if (xAbs > yAbs) { + if (xDiff > 0) { + direction = MoveDirection::RIGHT; + } else if (xDiff < 0) { + direction = MoveDirection::LEFT; + } else { + printf("(findNextCellDir)Error Wrong Dir!"); + direction = MoveDirection::IDLE; + } + } else { + if (yDiff > 0) { + direction = MoveDirection::UP; + } else if (yDiff < 0) { + direction = MoveDirection::DOWN; + } else { + printf("(findNextCellDir)Error Wrong Dir!"); + direction = MoveDirection::IDLE; + } + } + } + return direction; +} +/* +void PathfindingUnit::findNextCellDir(MoveDirection lastDir, int times) { + std::vector dictionary = { + MoveDirection::UP, MoveDirection::UP_RIGHT, + MoveDirection::RIGHT, MoveDirection::DOWN_RIGHT, + MoveDirection::DOWN, MoveDirection::DOWN_LEFT, + MoveDirection::LEFT, MoveDirection::UP_LEFT}; + int index = 0; + if (times != 0) { + while (dictionary[index] != lastDir) { + index++; + } + if (index + times > dictionary.size()) { + times -= dictionary.size(); + } + direction = dictionary[index + times]; + return; + } +} +*/ +bool PathfindingUnit::walkTowardNextCell() { + switch (m_currentDir) { + case MoveDirection::RIGHT: { + m_currentLocation = {m_currentLocation.x + m_MovementSpeed, + m_currentLocation.y}; + + break; + } + case MoveDirection::LEFT: { + m_currentLocation = {m_currentLocation.x - m_MovementSpeed, + m_currentLocation.y}; + + break; + } + case MoveDirection::UP: { + m_currentLocation = {m_currentLocation.x, + m_currentLocation.y + m_MovementSpeed}; + + break; + } + case MoveDirection::DOWN: { + m_currentLocation = {m_currentLocation.x, + m_currentLocation.y - m_MovementSpeed}; + + break; + } + case MoveDirection::UP_RIGHT: { + m_currentLocation = {m_currentLocation.x + m_MovementSpeed / SPEED, + m_currentLocation.y + m_MovementSpeed / SPEED}; + + break; + } + case MoveDirection::DOWN_LEFT: { + m_currentLocation = {m_currentLocation.x - m_MovementSpeed / SPEED, + m_currentLocation.y - m_MovementSpeed / SPEED}; + + break; + } + case MoveDirection::DOWN_RIGHT: { + m_currentLocation = {m_currentLocation.x + m_MovementSpeed / SPEED, + m_currentLocation.y - m_MovementSpeed / SPEED}; + + break; + } + case MoveDirection::UP_LEFT: { + m_currentLocation = {m_currentLocation.x - m_MovementSpeed / SPEED, + m_currentLocation.y + m_MovementSpeed / SPEED}; + + break; + } + } + if (moveDistance >= 48 * SPEED) { + moveDistance = 0; + return true; + } else + moveDistance += m_MovementSpeed; + return false; +} diff --git a/src/Unit/Runner.cpp b/src/Unit/Runner.cpp new file mode 100644 index 00000000..a885c5b9 --- /dev/null +++ b/src/Unit/Runner.cpp @@ -0,0 +1,117 @@ +// +// Created by nudle on 2024/3/29. +// +#include "Unit/Runner.hpp" + +void Runner::setBeingChase(std::shared_ptr hunter){ + b_beingChase=true; + m_hunter=hunter; + lastTargetCell=getCurrentCell(); +} +void Runner::customizeUpdate(){ + if(b_beingChase && m_hunter->getUnitMode()==UnitMode::ALIVE){ + glm::vec2 hunterCell = m_hunter->getCurrentCell(); + if(getDistance(hunterCell)<=ATTACK_RANGE-1 && lastTargetCell==getCurrentCell()){ + edgeCount=0; + MoveDirection Dir = oppositeDir(getDirByRelativeCells(getCurrentCell(),hunterCell),runMode::LIDL_RANDOM); + DEBUG_printCurrentMoveDirection(Dir); + glm::vec2 nextCell = getNextCellByCurrentPlus3(Dir,getCurrentCell(),3,1); + while(nextCell.x<0 || nextCell.y<0){ + edgeCount+=rand() %2+1; + Dir=findNewDir(Dir,edgeCount); + DEBUG_printCurrentMoveDirection(Dir); + nextCell = getNextCellByCurrentPlus3(Dir,getCurrentCell(),1,3); + } + lastTargetCell=nextCell; + setNewDestination(nextCell); + + } + }else{ + b_beingChase=false; + } +} + +PathfindingUnit::MoveDirection Runner::findNewDir(MoveDirection Dir,int edgeCount){ + for(int i=0;i<8;i++){ + if(dictionary[i]==Dir){ + int index = (i+edgeCount)%8; + if(index<0){ + index+=8; + } + return dictionary[index]; + } + } +} + +PathfindingUnit::MoveDirection Runner::oppositeDir(MoveDirection Dir,runMode mode){ + switch (mode) { + case (runMode::REASONABLE):{ + for(int i=0;i<8;i++){ + if(dictionary[i]==Dir){ + if(i+3>7){ + return dictionary[i+3-7]; + }else{ + return dictionary[i+3]; + } + } + } + } + case runMode::LIDL_RANDOM:{ + for(int i=0;i<8;i++){ + if(dictionary[i]==Dir){ + int index = i+3-7+rand()%3-1; + if(index<0){ + return dictionary[index+8]; + }else{ + return dictionary[index]; + } + } + } + } + case runMode::FULL_RANDOM:{ + return dictionary[rand()%8+0]; + } + } +} + +glm::vec2 Runner::getNextCellByCurrentPlus3(MoveDirection currentdir,glm::vec2 currentcell,int n,int m) { + switch (currentdir) { + case MoveDirection::RIGHT: { + currentcell = {currentcell.x + n, currentcell.y}; + break; + } + case MoveDirection::LEFT: { + currentcell = {currentcell.x - n, currentcell.y}; + break; + } + case MoveDirection::UP: { + currentcell = {currentcell.x, currentcell.y + n}; + break; + } + case MoveDirection::DOWN: { + currentcell = {currentcell.x, currentcell.y - n}; + break; + } + case MoveDirection::UP_RIGHT: { + currentcell = {currentcell.x + m, currentcell.y + m}; + break; + } + case MoveDirection::DOWN_LEFT: { + currentcell = {currentcell.x - m, currentcell.y - m}; + break; + } + case MoveDirection::DOWN_RIGHT: { + currentcell = {currentcell.x + m, currentcell.y - m}; + break; + } + case MoveDirection::UP_LEFT: { + currentcell = {currentcell.x - m, currentcell.y + m}; + break; + } + case MoveDirection::IDLE: { + printf("Direction debug didn't move\n"); + break; + } + } + return currentcell; +} diff --git a/src/Util/CustomizableImage.cpp b/src/Util/CustomizableImage.cpp new file mode 100644 index 00000000..34ebd8e5 --- /dev/null +++ b/src/Util/CustomizableImage.cpp @@ -0,0 +1,122 @@ +#include "Util/CustomizableImage.hpp" + +#include "pch.hpp" + +#include "Core/Texture.hpp" +#include "Core/TextureUtils.hpp" + +#include "Util/TransformUtils.hpp" + +namespace Util { +CustomizableImage::CustomizableImage(const std::string &filepath) { + auto surface = + std::unique_ptr>{ + IMG_Load(filepath.c_str()), + SDL_FreeSurface, + }; + if (surface == nullptr) { + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + m_Texture = std::make_unique( + Core::SdlFormatToGlFormat(surface->format->format), surface->w, + surface->h, surface->pixels); + m_Size = {surface->w, surface->h}; +} + +void CustomizableImage::SetImage(const std::string &filepath) { + auto surface = + std::unique_ptr>{ + IMG_Load(filepath.c_str()), + SDL_FreeSurface, + }; + if (surface == nullptr) { + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + m_Texture->UpdateData(Core::SdlFormatToGlFormat(surface->format->format), + surface->w, surface->h, surface->pixels); + m_Size = {surface->w, surface->h}; +} + +void CustomizableImage::DrawTest(int count, const Util::Transform &transform, + const float zIndex) { + auto data = Util::ConvertToUniformBufferData(transform, m_Size, zIndex); + s_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + s_VertexArray->Bind(); + s_VertexArray->DrawTriangles(); +} + +void CustomizableImage::DrawUsingCamera(const Util::Transform &transform, + const float zIndex) { + auto data = Util::ConvertToUniformBufferDataUsingCameraMatrix( + transform, m_Size, zIndex); + s_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + s_VertexArray->Bind(); + s_VertexArray->DrawTriangles(); +} + +void CustomizableImage::Init(std::vector positionvertex, + std::vector uv, + std::vector indexbuffer) { + + m_PositionVertex = positionvertex; + m_Uv = uv; + m_IndexBuffer = indexbuffer; + + InitProgram(); + + InitVertexArray(); + + InitUniformBuffer(); +} + +void CustomizableImage::InitProgram() { + // TODO: Create `BaseProgram` from `Program` and pass it into `Drawable` + s_Program = std::make_unique("../assets/shaders/Base.vert", + "../assets/shaders/Base.frag"); + s_Program->Bind(); + + GLint location = glGetUniformLocation(s_Program->GetId(), "surface"); + glUniform1i(location, UNIFORM_SURFACE_LOCATION); +} + +void CustomizableImage::InitVertexArray() { + s_VertexArray = std::make_unique(); + s_VertexArray->AddVertexBuffer( + std::make_unique(m_PositionVertex, 2)); + + // UV + + s_VertexArray->AddVertexBuffer( + std::make_unique(m_Uv, 2)); + + // Index + s_VertexArray->SetIndexBuffer( + std::make_unique(m_IndexBuffer)); + // NOLINTEND +} + +void CustomizableImage::InitUniformBuffer() { + s_UniformBuffer = std::make_unique>( + *s_Program, "Matrices", 0); +} + +std::unique_ptr CustomizableImage::s_Program = nullptr; +std::unique_ptr CustomizableImage::s_VertexArray = nullptr; +std::unique_ptr> + CustomizableImage::s_UniformBuffer = nullptr; + +} // namespace Util diff --git a/src/Util/GameObject.cpp b/src/Util/GameObject.cpp index 3cd908ad..f068a057 100644 --- a/src/Util/GameObject.cpp +++ b/src/Util/GameObject.cpp @@ -6,8 +6,13 @@ void GameObject::Draw() { if (!m_Visible) { return; } + if(m_MovingRelativeToCamera){ +m_Drawable->DrawUsingCamera(m_Transform,m_ZIndex); + }else{ + m_Drawable->Draw(m_Transform, m_ZIndex); + } + - m_Drawable->Draw(m_Transform, m_ZIndex); } } // namespace Util diff --git a/src/Util/Image.cpp b/src/Util/Image.cpp index 5bc16529..8bf75cad 100644 --- a/src/Util/Image.cpp +++ b/src/Util/Image.cpp @@ -24,6 +24,20 @@ std::shared_ptr LoadSurface(const std::string &filepath) { } namespace Util { + +std::shared_ptr LoadSurface(const std::string &filepath) { + auto surface = std::shared_ptr(IMG_Load(filepath.c_str()), + SDL_FreeSurface); + + if (surface == nullptr) { + surface = {GetMissingTextureSDLSurface(), SDL_FreeSurface}; + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + return surface; +} + Image::Image(const std::string &filepath) : m_Path(filepath) { if (s_Program == nullptr) { @@ -32,12 +46,19 @@ Image::Image(const std::string &filepath) if (s_VertexArray == nullptr) { InitVertexArray(); } - if (s_UniformBuffer == nullptr) { + if (m_UniformBuffer == nullptr) { InitUniformBuffer(); } auto surface = s_Store.Get(filepath); + if (surface == nullptr) { + surface = {GetMissingTextureSDLSurface(), SDL_FreeSurface}; + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + m_Texture = std::make_unique( Core::SdlFormatToGlFormat(surface->format->format), surface->w, surface->h, surface->pixels); @@ -54,7 +75,21 @@ void Image::SetImage(const std::string &filepath) { void Image::Draw(const Util::Transform &transform, const float zIndex) { auto data = Util::ConvertToUniformBufferData(transform, m_Size, zIndex); - s_UniformBuffer->SetData(0, data); + m_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + s_VertexArray->Bind(); + s_VertexArray->DrawTriangles(); +} + +void Image::DrawUsingCamera(const Util::Transform &transform, + const float zIndex) { + auto data = Util::ConvertToUniformBufferDataUsingCameraMatrix( + transform, m_Size, zIndex); + m_UniformBuffer->SetData(0, data); m_Texture->Bind(UNIFORM_SURFACE_LOCATION); s_Program->Bind(); @@ -95,9 +130,9 @@ void Image::InitVertexArray() { s_VertexArray->AddVertexBuffer(std::make_unique( std::vector{ 0.0F, 0.0F, // - 0.0F, 1.0F, // - 1.0F, 1.0F, // - 1.0F, 0.0F, // + 0.0F, 1.F, // + 1.F, 1.F, // + 1.F, 0.0F, // }, 2)); @@ -111,14 +146,16 @@ void Image::InitVertexArray() { } void Image::InitUniformBuffer() { - s_UniformBuffer = std::make_unique>( + m_UniformBuffer = std::make_unique>( *s_Program, "Matrices", 0); } std::unique_ptr Image::s_Program = nullptr; std::unique_ptr Image::s_VertexArray = nullptr; + std::unique_ptr> Image::s_UniformBuffer = nullptr; + Util::AssetStore> Image::s_Store(LoadSurface); } // namespace Util diff --git a/src/Util/ImageArray.cpp b/src/Util/ImageArray.cpp new file mode 100644 index 00000000..2ba5e7cf --- /dev/null +++ b/src/Util/ImageArray.cpp @@ -0,0 +1,155 @@ +#include "Util/ImageArray.hpp" + +#include "pch.hpp" + +#include "Core/Texture.hpp" +#include "Core/TextureUtils.hpp" + +#include "Util/TransformUtils.hpp" + +#include "config.hpp" + +namespace Util { +ImageArray::ImageArray(const std::string &filepath, + std::vector offset) + : m_Path(filepath) { + if (s_Program == nullptr) { + InitProgram(); + } + if (m_VertexArray == nullptr) { + InitVertexArray(offset); + } + if (m_UniformBuffer == nullptr) { + InitUniformBuffer(); + } + + auto surface = + std::unique_ptr>{ + IMG_Load(filepath.c_str()), + SDL_FreeSurface, + }; + if (surface == nullptr) { + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + m_Texture = std::make_unique( + Core::SdlFormatToGlFormat(surface->format->format), surface->w, + surface->h, surface->pixels); + m_Size = {surface->w, surface->h}; +} + +void ImageArray::SetImage(const std::string &filepath) { + auto surface = + std::unique_ptr>{ + IMG_Load(filepath.c_str()), + SDL_FreeSurface, + }; + if (surface == nullptr) { + LOG_ERROR("Failed to load image: '{}'", filepath); + LOG_ERROR("{}", IMG_GetError()); + } + + m_Texture->UpdateData(Core::SdlFormatToGlFormat(surface->format->format), + surface->w, surface->h, surface->pixels); + m_Size = {surface->w, surface->h}; +} + +void ImageArray::Draw(const Util::Transform &transform, const float zIndex) { + auto data = Util::ConvertToUniformBufferData(transform, m_Size, zIndex); + m_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + m_VertexArray->Bind(); + m_VertexArray->DrawTriangles(); +} + +void ImageArray::DrawUsingCamera(const Util::Transform &transform, + const float zIndex) { + auto data = Util::ConvertToUniformBufferDataUsingCameraMatrix( + transform, m_Size, zIndex); + m_UniformBuffer->SetData(0, data); + + m_Texture->Bind(UNIFORM_SURFACE_LOCATION); + s_Program->Bind(); + s_Program->Validate(); + + m_VertexArray->Bind(); + m_VertexArray->DrawTriangles(); +} + +void ImageArray::InitProgram() { + // TODO: Create `BaseProgram` from `Program` and pass it into `Drawable` + s_Program = std::make_unique("../assets/shaders/Base.vert", + "../assets/shaders/Base.frag"); + s_Program->Bind(); + + GLint location = glGetUniformLocation(s_Program->GetId(), "surface"); + glUniform1i(location, UNIFORM_SURFACE_LOCATION); +} + +void ImageArray::InitVertexArray(std::vector offset) { + m_VertexArray = std::make_unique(); + + // NOLINTBEGIN + // These are vertex data for the rectangle but clang-tidy has magic + // number warnings + + // Vertex + + // init position,uv,index according to "offset"vector + + std::vector positionVertex; + std::vector uvVertex; + std::vector indexBuffer; + + for (int i = 0; i < offset.size(); i++) { + positionVertex.push_back(-0.5F + offset[i].x); + positionVertex.push_back(0.5F + offset[i].y); + + positionVertex.push_back(-0.5F + offset[i].x); + positionVertex.push_back(-0.5F + offset[i].y); + positionVertex.push_back(0.5F + offset[i].x); + positionVertex.push_back(-0.5F + offset[i].y); + + positionVertex.push_back(0.5F + offset[i].x); + positionVertex.push_back(0.5F + offset[i].y); + + std::vector uv({0.0F, 0.0F, // + 0.0F, 1.0F, // + 1.0F, 1.0F, // + 1.0F, 0.0F}); + uvVertex.insert(uvVertex.end(), uv.begin(), uv.end()); + + unsigned int iBufferStep = i * 4; + std::vector iBuffer( + {0 + iBufferStep, 1 + iBufferStep, 2 + iBufferStep, // + 0 + iBufferStep, 2 + iBufferStep, 3 + iBufferStep}); + + indexBuffer.insert(indexBuffer.end(), iBuffer.begin(), iBuffer.end()); + } + + m_VertexArray->AddVertexBuffer( + std::make_unique(positionVertex, 2)); + + // UV + m_VertexArray->AddVertexBuffer( + std::make_unique(uvVertex, 2)); + + // Index + m_VertexArray->SetIndexBuffer( + std::make_unique(indexBuffer)); + // NOLINTEND +} + +void ImageArray::InitUniformBuffer() { + m_UniformBuffer = std::make_unique>( + *s_Program, "Matrices", 0); +} + +std::unique_ptr ImageArray::s_Program = nullptr; +// namespace Util +} // namespace Util diff --git a/src/Util/Input.cpp b/src/Util/Input.cpp index 64a8042c..b7c252d8 100644 --- a/src/Util/Input.cpp +++ b/src/Util/Input.cpp @@ -1,8 +1,12 @@ #include "Util/Input.hpp" + #include // for SDL_Event + #include "config.hpp" +#include "imgui/imgui_impl_sdl2.h" +#include // for SDL_Event namespace Util { @@ -22,12 +26,16 @@ bool Input::s_Scroll = false; bool Input::s_MouseMoving = false; bool Input::s_Exit = false; + ImGuiIO Input::s_Io; // allocate memory only because it is invalid // to call `ImGui::GetIO()` at this time + + bool Input::IsKeyPressed(const Keycode &key) { return s_KeyState[key].second; + } bool Input::IsKeyDown(const Keycode &key) { @@ -84,19 +92,22 @@ void Input::Update() { s_CursorPosition.x -= static_cast(WINDOW_WIDTH) / 2; s_CursorPosition.y = -(s_CursorPosition.y - static_cast(WINDOW_HEIGHT) / 2); - s_Scroll = s_MouseMoving = false; + for (auto &[_, i] : s_KeyState) { i.first = i.second; + } s_Io = ImGui::GetIO(); while (SDL_PollEvent(&s_Event) != 0) { + if (s_Io.WantCaptureMouse) { ImGui_ImplSDL2_ProcessEvent(&s_Event); continue; + } if (s_Event.type == SDL_KEYDOWN || s_Event.type == SDL_KEYUP) { UpdateKeyState(&s_Event); @@ -105,6 +116,9 @@ void Input::Update() { UpdateKeyState(&s_Event); } + ImGui_ImplSDL2_ProcessEvent(&s_Event); + + s_Scroll = s_Event.type == SDL_MOUSEWHEEL || s_Scroll; if (s_Scroll) { diff --git a/src/Util/SFX.cpp b/src/Util/SFX.cpp index 72a0c62a..181eefdd 100644 --- a/src/Util/SFX.cpp +++ b/src/Util/SFX.cpp @@ -5,9 +5,11 @@ std::shared_ptr LoadChunk(const std::string &filepath) { auto chunk = std::shared_ptr(Mix_LoadWAV(filepath.c_str()), Mix_FreeChunk); + if (chunk == nullptr) { LOG_DEBUG("Failed to load SFX: '{}'", filepath); LOG_DEBUG("{}", Mix_GetError()); + } return chunk; diff --git a/src/Util/Text.cpp b/src/Util/Text.cpp index 0136bca8..28e61b49 100644 --- a/src/Util/Text.cpp +++ b/src/Util/Text.cpp @@ -32,7 +32,7 @@ Text::Text(const std::string &font, int fontSize, const std::string &text, if (s_VertexArray == nullptr) { InitVertexArray(); } - if (s_UniformBuffer == nullptr) { + if (m_UniformBuffer == nullptr) { InitUniformBuffer(); } @@ -59,7 +59,7 @@ Text::Text(const std::string &font, int fontSize, const std::string &text, void Text::Draw(const Util::Transform &transform, const float zIndex) { auto data = Util::ConvertToUniformBufferData(transform, m_Size, zIndex); - s_UniformBuffer->SetData(0, data); + m_UniformBuffer->SetData(0, data); m_Texture->Bind(UNIFORM_SURFACE_LOCATION); s_Program->Bind(); @@ -116,7 +116,7 @@ void Text::InitVertexArray() { } void Text::InitUniformBuffer() { - s_UniformBuffer = std::make_unique>( + m_UniformBuffer = std::make_unique>( *s_Program, "Matrices", 0); } @@ -139,8 +139,6 @@ void Text::ApplyTexture() { std::unique_ptr Text::s_Program = nullptr; std::unique_ptr Text::s_VertexArray = nullptr; -std::unique_ptr> Text::s_UniformBuffer = - nullptr; Util::AssetStore> Text::s_Store(LoadFontFile); } // namespace Util diff --git a/src/Util/TransformUtils.cpp b/src/Util/TransformUtils.cpp index 51d0ffde..73616104 100644 --- a/src/Util/TransformUtils.cpp +++ b/src/Util/TransformUtils.cpp @@ -1,11 +1,16 @@ #include "Util/TransformUtils.hpp" #include "config.hpp" +#include "Camera.hpp" namespace Util { Core::Matrices ConvertToUniformBufferData(const Util::Transform &transform, const glm::vec2 &size, const float zIndex) { + /* + * it converts from the transform data, which has translation, + * rotation...etc. to Matrices. + */ constexpr glm::mat4 eye(1.F); constexpr float nearClip = -100; @@ -30,4 +35,33 @@ Core::Matrices ConvertToUniformBufferData(const Util::Transform &transform, return data; } +Core::Matrices ConvertToUniformBufferDataUsingCameraMatrix(const Util::Transform &transform, + const glm::vec2 &size, + const float zIndex) { + /* + * it converts from the transform data, which has translation, + * rotation...etc. to Matrices. + */ + constexpr glm::mat4 eye(1.F); + + constexpr float nearClip = -100; + constexpr float farClip = 100; + + auto projection=CameraClass::getProjectionMatrix(); + auto view = CameraClass::getViewMatrix(); + + // TODO: TRS comment + auto model = glm::translate(eye, {transform.translation, zIndex}) * + glm::rotate(eye, transform.rotation, glm::vec3(0, 0, 1)) * + glm::scale(eye, {(transform.scale) * size, 1}); + + Core::Matrices data = { + model, + projection * view, + }; + + return data; +} + + } // namespace Util diff --git a/src/main.cpp b/src/main.cpp index 61a48ddf..eb56a99a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,21 +1,22 @@ #include "App.hpp" - #include "Core/Context.hpp" #include "Util/Input.hpp" int main(int, char **) { + auto context = Core::Context::GetInstance(); App app; while (!context->GetExit()) { + context->Setup(); + switch (app.GetCurrentState()) { case App::State::START: app.Start(); break; - case App::State::UPDATE: app.Update(); break; @@ -29,6 +30,7 @@ int main(int, char **) { ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); context->Update(); + } return 0; } diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 00000000..b987ca23 Binary files /dev/null and b/test/.DS_Store differ diff --git a/test/Interactive/MouseSelectionTest.cpp b/test/Interactive/MouseSelectionTest.cpp new file mode 100644 index 00000000..a720fc3b --- /dev/null +++ b/test/Interactive/MouseSelectionTest.cpp @@ -0,0 +1,76 @@ +// +// Created by 盧威任 on 2/6/24. +// + +#include "GLUT/glut.h" + +struct Position +{ + Position() : x(0), y(0) {} + float x, y; +}; + +Position start, finish; +void mouse( int button, int state, int x, int y ) +{ + if( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ) + { + start.x = finish.x = x; + start.y = finish.y = y; + } + if( button == GLUT_LEFT_BUTTON && state == GLUT_UP) + { + finish.x=x; + finish.y=y; + } + glutPostRedisplay(); +} + +void motion( int x, int y ) +{ + finish.x = x; + finish.y = y; + glutPostRedisplay(); +} + +void display() +{ + glClearColor( 0, 0, 0, 1 ); + glClear(GL_COLOR_BUFFER_BIT); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + double w = glutGet( GLUT_WINDOW_WIDTH ); + double h = glutGet( GLUT_WINDOW_HEIGHT ); + glOrtho( 0, w, h, 0, -1, 1 ); + + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + glPushMatrix(); + glColor3f(1,1,0); + glBegin(GL_QUADS); + glVertex2f(start.x,start.y); + glVertex2f(finish.x,start.y); + glVertex2f(finish.x,finish.y); + glVertex2f(start.x,finish.y); + glEnd(); + glPopMatrix(); + + glutSwapBuffers(); +} + +int main(int argc, char** argv) +{ + glutInit(&argc,argv); + glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA); + glutInitWindowSize(640,480); + glutInitWindowPosition(100,100); + glutCreateWindow("GLUT"); + glutMouseFunc(mouse); + glutMotionFunc(motion); + glutDisplayFunc(display); + + glutMainLoop(); + return 0; +} \ No newline at end of file