Skip to content

Commit

Permalink
New folder structure for C++ code
Browse files Browse the repository at this point in the history
- All C++ code has been moved to cpp:
  - All source files for executables reside in cpp/cmd
  - Everything that was previously in core and src is now
    built as a single library inside cpp/lib
- Version matching logic for library and executable has been updated
  • Loading branch information
daljit46 committed Sep 25, 2024
1 parent ca13e7f commit 991a438
Show file tree
Hide file tree
Showing 820 changed files with 139 additions and 73 deletions.
45 changes: 1 addition & 44 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,6 @@ file(RELATIVE_PATH relDir
set(CMAKE_INSTALL_RPATH ${base} ${base}/${relDir})

include(BuildType)
include(LinkerSetup)
include(FindFFTW)
include(CompilerCache)
include(ECMEnableSanitizers)
include(Dependencies)
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
include(MacOSBundle)
endif()

use_compiler_cache()

if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git AND NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/pre-commit)
message(WARNING
Expand All @@ -91,37 +81,6 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git AND NOT EXISTS ${CMAKE_CURRENT_SOURCE
"and then run `pre-commit install` from the ${CMAKE_CURRENT_SOURCE_DIR} directory.")
endif()

add_library(mrtrix-common INTERFACE)
add_library(mrtrix::common ALIAS mrtrix-common)
target_compile_definitions(mrtrix-common INTERFACE
MRTRIX_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
$<$<PLATFORM_ID:Windows>:MRTRIX_WINDOWS>
$<$<PLATFORM_ID:Darwin>:MRTRIX_MACOSX>
$<$<PLATFORM_ID:FreeBSD>:MRTRIX_FREEBSD>
)

if(MRTRIX_STL_DEBUGGING AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Enabling STL debug mode")
target_compile_definitions(mrtrix-common INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:_ITERATOR_DEBUG_LEVEL=1>
$<$<CXX_COMPILER_ID:GNU>:_GLIBCXX_DEBUG _GLIBCXX_DEBUG_PEDANTIC>
$<$<CXX_COMPILER_ID:Clang>:_LIBCPP_DEBUG=1>
)
endif()

if(MRTRIX_WARNINGS_AS_ERRORS)
message(STATUS "Enabling warnings as errors")
target_compile_options(mrtrix-common INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:/WX>
$<$<CXX_COMPILER_ID:GNU,Clang>:-Werror>
)
endif()

# Allow compilation of big object of files in debug mode on MINGW
if(MINGW AND CMAKE_BUILD_TYPE MATCHES "Debug")
target_compile_options(mrtrix-common INTERFACE -Wa,-mbig-obj)
endif()


if(MRTRIX_STRIP_CONDA AND DEFINED ENV{CONDA_PREFIX})
message(WARNING "CONDA_PREFIX is set to ${CONDA_PREFIX}, adding conda diretories to CMAKE_IGNORE_PATH to avoid conflicts.\n"
Expand All @@ -145,11 +104,9 @@ if(COMPILER_PATH MATCHES "fsl/bin" OR LINKER_PATH MATCHES "fsl/bin")
)
endif()

add_subdirectory(cmd)
add_subdirectory(core)
add_subdirectory(cpp)
add_subdirectory(python)
add_subdirectory(share)
add_subdirectory(src)

if(PROJECT_IS_TOP_LEVEL AND MRTRIX_BUILD_TESTS)
add_subdirectory(testing)
Expand Down
9 changes: 5 additions & 4 deletions cmake/MacOSBundle.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
function(set_bundle_properties executable_name)
set(icon_files ${CMAKE_CURRENT_SOURCE_DIR}/../icons/macos/${executable_name}.icns)
set(icon_files ${PROJECT_SOURCE_DIR}/icons/macos/${executable_name}.icns)
if(${executable_name} STREQUAL "mrview")
list(APPEND icon_files ${CMAKE_CURRENT_SOURCE_DIR}/../icons/macos/mrview_doc.icns)
list(APPEND icon_files ${PROJECT_SOURCE_DIR}/icons/macos/mrview_doc.icns)
endif()

string(TIMESTAMP CURRENT_YEAR "%Y")
Expand All @@ -10,14 +10,15 @@ function(set_bundle_properties executable_name)
target_sources(${executable_name} PRIVATE ${icon_files})
set_target_properties(${executable_name} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../packaging/macos/bundle/${executable_name}.plist.in"
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/packaging/macos/bundle/${executable_name}.plist.in"
RESOURCE "${icon_files}"
INSTALL_RPATH "@executable_path/../../../../lib"
)
endfunction()

function(install_bundle_wrapper_scripts executable_name)
set(wrapper_script ${CMAKE_CURRENT_SOURCE_DIR}/../packaging/macos/bundle/wrapper_launcher.sh.in)
message(STATUS "CURRENT_LIST_DIR: ${CMAKE_CURRENT_LIST_DIR}")
set(wrapper_script ${PROJECT_SOURCE_DIR}/packaging/macos/bundle/wrapper_launcher.sh.in)
configure_file(${wrapper_script} ${PROJECT_BINARY_DIR}/bin/${executable_name}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
@ONLY
Expand Down
40 changes: 40 additions & 0 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
include(LinkerSetup)
include(FindFFTW)
include(ECMEnableSanitizers)
include(Dependencies)
include(CompilerCache)
use_compiler_cache()

add_library(mrtrix-common INTERFACE)
add_library(mrtrix::common ALIAS mrtrix-common)
target_compile_definitions(mrtrix-common INTERFACE
MRTRIX_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
$<$<PLATFORM_ID:Windows>:MRTRIX_WINDOWS>
$<$<PLATFORM_ID:Darwin>:MRTRIX_MACOSX>
$<$<PLATFORM_ID:FreeBSD>:MRTRIX_FREEBSD>
)

if(MRTRIX_STL_DEBUGGING AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Enabling STL debug mode")
target_compile_definitions(mrtrix-common INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:_ITERATOR_DEBUG_LEVEL=1>
$<$<CXX_COMPILER_ID:GNU>:_GLIBCXX_DEBUG _GLIBCXX_DEBUG_PEDANTIC>
$<$<CXX_COMPILER_ID:Clang>:_LIBCPP_DEBUG=1>
)
endif()

if(MRTRIX_WARNINGS_AS_ERRORS)
message(STATUS "Enabling warnings as errors")
target_compile_options(mrtrix-common INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:/WX>
$<$<CXX_COMPILER_ID:GNU,Clang>:-Werror>
)
endif()

# Allow compilation of big object of files in debug mode on MINGW
if(MINGW AND CMAKE_BUILD_TYPE MATCHES "Debug")
target_compile_options(mrtrix-common INTERFACE -Wa,-mbig-obj)
endif()

add_subdirectory(lib)
add_subdirectory(cmd)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 6 additions & 2 deletions cmd/CMakeLists.txt → cpp/cmd/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
include(MacOSBundle)
endif()

set(GUI_CMD_SRCS mrview.cpp shview.cpp)

file(GLOB HEADLESS_CMD_SRCS *.cpp)
Expand All @@ -8,7 +12,7 @@ endforeach(CMD)
if(MRTRIX_USE_PCH)
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pch_cmd.cpp CONTENT "int main(){}")
add_executable(pch_cmd ${CMAKE_CURRENT_BINARY_DIR}/pch_cmd.cpp)
target_include_directories(pch_cmd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../core)
target_include_directories(pch_cmd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lib/core)
target_link_libraries(pch_cmd PRIVATE Eigen3::Eigen half::half mrtrix::common)
target_precompile_headers(pch_cmd PRIVATE
[["app.h"]]
Expand All @@ -27,7 +31,7 @@ function(add_cmd CMD_SRC IS_GUI)
add_executable(${CMD_NAME} ${CMD_SRC})
target_link_libraries(${CMD_NAME} PRIVATE
$<IF:$<BOOL:${IS_GUI}>,mrtrix::gui,mrtrix::headless>
mrtrix::exec-version-lib
mrtrix::cmd-version-lib
)
set_target_properties(${CMD_NAME} PROPERTIES
LINK_DEPENDS_NO_SHARED true
Expand Down
2 changes: 1 addition & 1 deletion cmd/afdconnectivity.cpp → cpp/cmd/afdconnectivity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "dwi/tractography/mapping/mapping.h"
#include "dwi/tractography/properties.h"
#include "memory.h"
#include "version.h"
#include "mrtrix_version.h"

using namespace MR;
using namespace MR::DWI;
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
92 changes: 78 additions & 14 deletions src/CMakeLists.txt → cpp/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
include(CheckSymbolExists)
find_package(ZLIB REQUIRED)
find_package(FFTW REQUIRED)
find_package(Git QUIET)
find_package(Threads REQUIRED)
find_package(PNG QUIET)
if(PNG_FOUND)
message(STATUS "Found PNG: ${PNG_LIBRARIES}")
endif()

# Check to see if we can use lgamma_r() function in custom Math::betaincreg()
# The function is defined under _REENTRANT on some systems (e.g. MacOS)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_REENTRANT)
check_symbol_exists(lgamma_r "math.h" MRTRIX_HAVE_LGAMMA_R)
list(REMOVE_AT CMAKE_REQUIRED_DEFINITIONS -1)

if(NOT MRTRIX_HAVE_LGAMMA_R)
message(STATUS "No lgamma_r() function found; statistical inference may have poorer multi-threading performance")
endif()

file(GLOB_RECURSE HEADLESS_SOURCES *.h *.cpp)
list(FILTER HEADLESS_SOURCES EXCLUDE REGEX "gui/.*")

Expand All @@ -6,10 +26,10 @@ file(GLOB_RECURSE GUI_SOURCES gui/*.h gui/*.cpp)
if(MRTRIX_BUILD_GUI)
if(MRTRIX_USE_QT5)
find_package(Qt5 COMPONENTS Core Gui Widgets OpenGL Network REQUIRED)
qt5_add_resources(RCC_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../icons/icons.qrc)
qt5_add_resources(RCC_SOURCES ${PROJECT_SOURCE_DIR}/icons/icons.qrc)
else()
find_package(Qt6 COMPONENTS Core Gui Widgets OpenGL Network OpenGLWidgets REQUIRED)
qt6_add_resources(RCC_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../icons/icons.qrc)
qt6_add_resources(RCC_SOURCES ${PROJECT_SOURCE_DIR}/icons/icons.qrc)
endif()
# Explicitly log Qt's location since it's not done automatically by the FindQt module
message(STATUS "Qt${QT_MAJOR_VERSION}_DIR is set to: ${Qt${QT_MAJOR_VERSION}_DIR}")
Expand All @@ -21,24 +41,44 @@ endif()
find_package(Git QUIET)

# Create version target and library
set(EXEC_VERSION_CPP ${CMAKE_CURRENT_BINARY_DIR}/exec_version.cpp)
set(MRTRIX_VERSION_CPP ${CMAKE_CURRENT_BINARY_DIR}/mrtrix_version.cpp)
set(CMD_VERSION_CPP ${CMAKE_CURRENT_BINARY_DIR}/cmd_version.cpp)

add_custom_target(cmd-version-target ALL
COMMAND ${CMAKE_COMMAND}
-D GIT_EXECUTABLE=${GIT_EXECUTABLE}
-D MRTRIX_BASE_VERSION=${MRTRIX_BASE_VERSION}
-D DST=${CMD_VERSION_CPP}
-D SRC=${CMAKE_CURRENT_SOURCE_DIR}/cmd_version.cpp.in
-P ${PROJECT_SOURCE_DIR}/cmake/FindVersion.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating cmd_version.cpp"
BYPRODUCTS ${CMD_VERSION_CPP}
VERBATIM
)

add_custom_target(exec-version-target ALL
add_custom_target(mrtrix-version-target ALL
COMMAND ${CMAKE_COMMAND}
-D GIT_EXECUTABLE=${GIT_EXECUTABLE}
-D MRTRIX_BASE_VERSION=${MRTRIX_BASE_VERSION}
-D DST=${EXEC_VERSION_CPP}
-D SRC=${CMAKE_CURRENT_SOURCE_DIR}/exec_version.cpp.in
-P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/FindVersion.cmake
-D DST=${MRTRIX_VERSION_CPP}
-D SRC=${CMAKE_CURRENT_SOURCE_DIR}/mrtrix_version.cpp.in
-P ${PROJECT_SOURCE_DIR}/cmake/FindVersion.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating exec_version.cpp for executables"
BYPRODUCTS ${EXEC_VERSION_CPP}
COMMENT "Generating mrtrix_version.cpp"
BYPRODUCTS ${MRTRIX_VERSION_CPP}
VERBATIM
)

add_library(mrtrix-exec-version-lib STATIC ${EXEC_VERSION_CPP})
add_library(mrtrix::exec-version-lib ALIAS mrtrix-exec-version-lib)
add_dependencies(mrtrix-exec-version-lib exec-version-target)
add_library(mrtrix-version-lib STATIC ${MRTRIX_VERSION_CPP})
add_library(mrtrix::version-lib ALIAS mrtrix-version-lib)
add_dependencies(mrtrix-version-lib mrtrix-version-target)

add_library(mrtrix-cmd-version-lib STATIC ${CMD_VERSION_CPP})
add_library(mrtrix::cmd-version-lib ALIAS mrtrix-cmd-version-lib)
target_include_directories(mrtrix-cmd-version-lib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
add_dependencies(mrtrix-cmd-version-lib cmd-version-target)


if(MRTRIX_BUILD_NON_CORE_STATIC)
set(MRTRIX_LIBRARY_TYPE STATIC)
Expand All @@ -50,12 +90,13 @@ add_library(mrtrix-headless ${MRTRIX_LIBRARY_TYPE} ${HEADLESS_SOURCES})
add_library(mrtrix::headless ALIAS mrtrix-headless)


target_include_directories(mrtrix-exec-version-lib PUBLIC
target_include_directories(mrtrix-version-lib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)

target_include_directories(mrtrix-headless PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/core
)

if(MRTRIX_USE_PCH)
Expand All @@ -66,8 +107,31 @@ if(MRTRIX_USE_PCH)
)
endif()

target_compile_definitions(mrtrix-headless PUBLIC
MRTRIX_BASE_VERSION="${MRTRIX_BASE_VERSION}"
$<$<BOOL:${MRTRIX_HAVE_LGAMMA_R}>:MRTRIX_HAVE_LGAMMA_R>
)

if(APPLE AND MRTRIX_HAVE_LGAMMA_R)
target_compile_definitions(mrtrix-headless PRIVATE _REENTRANT)
endif()

if(PNG_FOUND)
target_compile_definitions(mrtrix-headless PUBLIC MRTRIX_PNG_SUPPORT)
target_link_libraries(mrtrix-headless PUBLIC PNG::PNG)
else()
message(WARNING "libpng not found, disabling PNG support")
endif()

target_link_libraries(mrtrix-headless PUBLIC
mrtrix::core
Eigen3::Eigen
ZLIB::ZLIB
${FFTW_LIBRARIES}
mrtrix::common
Threads::Threads
nlohmann_json::nlohmann_json
nifti::nifti
half::half
)

if(MRTRIX_BUILD_GUI)
Expand Down
4 changes: 2 additions & 2 deletions src/exec_version.cpp.in → cpp/lib/cmd_version.cpp.in
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "exec_version.h"
#include "cmd_version.h"

namespace MR {
namespace App {
extern const char* executable_uses_mrtrix_version;
void set_executable_uses_mrtrix_version () { executable_uses_mrtrix_version = "@MRTRIX_VERSION@"; }
}
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion core/command.h → cpp/lib/core/command.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#endif

#include "app.h"
#include "exec_version.h"
#include "cmd_version.h"
#include "mrtrix.h"
#ifdef MRTRIX_PROJECT
namespace MR {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion core/fixel/fixel.cpp → cpp/lib/core/fixel/fixel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/

#include "fixel/fixel.h"
#include "version.h"
#include "mrtrix_version.h"

namespace MR::Fixel {

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 991a438

Please sign in to comment.