diff --git a/NOTICE.md b/NOTICE.md
index 76b5c651ca35c8a1117a9d9565146732a286e3dc..812ea2b8495990a7992c6ab61414b6853340f264 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -90,9 +90,12 @@ pthread
 OpenSCENARIO API (Parser)
  * License: Apache-2.0
 
-openpass/stochastics-libarary
+openpass/stochastics-library
  * License: EPL 2.0
 
+Boost
+ * License: Boost Software License 1.0
+
 ## Cryptography
 
 Content may contain encryption software. The country in which you are currently
diff --git a/engine/WORKSPACE b/engine/WORKSPACE
index 855ff2ce5e4b659c6a8a33b8ad7b68363caf8ae7..53c4ff4ff19e13818fd1b9cbe2a7f17ce1725992 100644
--- a/engine/WORKSPACE
+++ b/engine/WORKSPACE
@@ -1,5 +1,5 @@
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-load("//bazel:deps.bzl", "osc_engine_deps")
+load("//third_party:deps.bzl", "osc_engine_deps")
 
 http_archive(
     name = "googletest",
diff --git a/engine/bazel/deps.bzl b/engine/bazel/deps.bzl
deleted file mode 100644
index 299b51c2c45b2402e9977cf4f99a60a8cf7d7023..0000000000000000000000000000000000000000
--- a/engine/bazel/deps.bzl
+++ /dev/null
@@ -1,52 +0,0 @@
-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
-load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
-
-ECLIPSE_GITLAB = "https://gitlab.eclipse.org/eclipse"
-
-MANTLE_API_TAG = "v8.0.0"
-STOCHASTICS_LIBRARY_TAG = "v0.10.0"
-UNITS_TAG = "2.3.3"
-YASE_TAG = "v0.0.1"
-
-def osc_engine_deps():
-    """Load dependencies"""
-    maybe(
-        http_archive,
-        name = "mantle_api",
-        url = ECLIPSE_GITLAB + "/openpass/mantle-api/-/archive/{tag}/mantle-api-{tag}.tar.gz".format(tag = MANTLE_API_TAG),
-        sha256 = "abb18f7180da012c02bda874752a7efd9ceab1da31e616174790f07a17c4fa3f",
-        strip_prefix = "mantle-api-{tag}".format(tag = MANTLE_API_TAG),
-    )
-
-    maybe(
-        http_archive,
-        name = "stochastics_library",
-        url = ECLIPSE_GITLAB + "/openpass/stochastics-library/-/archive/{tag}/stochastics-library-{tag}.tar.gz".format(tag = STOCHASTICS_LIBRARY_TAG),
-        sha256 = "0b9173d005e433cf9e5ad68d3fe28fdcff5ea1b511118a4a47bb95f225534a6f",
-        strip_prefix = "stochastics-library-{tag}".format(tag = STOCHASTICS_LIBRARY_TAG),
-    )
-
-    maybe(
-        http_archive,
-        name = "units_nhh",
-        url = "https://github.com/nholthaus/units/archive/refs/tags/v{tag}.tar.gz".format(tag = UNITS_TAG),
-        sha256 = "b1f3c1dd11afa2710a179563845ce79f13ebf0c8c090d6aa68465b18bd8bd5fc",
-        strip_prefix = "./units-{tag}".format(tag = UNITS_TAG),
-        build_file = "//bazel:units.BUILD",
-    )
-
-    maybe(
-        http_archive,
-        name = "yase",
-        url = ECLIPSE_GITLAB + "/openpass/yase/-/archive/{tag}/yase-{tag}.tar.gz".format(tag = YASE_TAG),
-        sha256 = "243d710172dff4c4e7ab95e5bd68a6d8335cf8a3fdd1efa87d118250e3b85ee3",
-        strip_prefix = "yase-{tag}".format(tag = YASE_TAG),
-    )
-
-    http_archive(
-        name = "open_scenario_parser",
-        build_file = "//bazel:openscenario_api.BUILD",
-        url = "https://github.com/RA-Consulting-GmbH/openscenario.api.test/releases/download/v1.4.0/OpenSCENARIO_API_LinuxSharedRelease_2024.11.18.tgz",
-        sha256 = "7a4cdb82ccaaeed5fccf12efd94cf4f9c9d3ac0fc7d7feedd4c0babe2404f853",
-        strip_prefix = "OpenSCENARIO_API_LinuxSharedRelease",
-    )
diff --git a/engine/bazel/BUILD b/engine/third_party/BUILD
similarity index 100%
rename from engine/bazel/BUILD
rename to engine/third_party/BUILD
diff --git a/engine/third_party/boost/BUILD.bazel b/engine/third_party/boost/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..871b6bc6bfefd9178db4bc88c4a9d2608bc87770
--- /dev/null
+++ b/engine/third_party/boost/BUILD.bazel
@@ -0,0 +1,12 @@
+load(":boost.bzl", "create_alias_rules")
+
+MODULES = [
+    "lexical_cast",
+    "math",
+    "multiprecision",
+    "type_traits",
+    "utility",
+]
+
+# Reference via "//third_party/boost:<module>"
+create_alias_rules(modules = MODULES)
diff --git a/engine/third_party/boost/boost.bzl b/engine/third_party/boost/boost.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..287bd92d7ec545c476c084d5c9841a6b76208eca
--- /dev/null
+++ b/engine/third_party/boost/boost.bzl
@@ -0,0 +1,39 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+def create_alias_rules(modules):
+    """Helper method to reduce code duplication for alias creation
+
+    Args:
+      modules: the list of modules for which to create aliases
+    """
+
+    for module in modules:
+        native.alias(
+            name = module,
+            actual = "@boost_171//:{}".format(module),
+            visibility = ["//visibility:public"],
+        )
+
+def boost_deps():
+    maybe(
+        http_archive,
+        name = "boost_171",
+        url = "https://archives.boost.io/release/1.71.0/source/boost_1_71_0.tar.gz",
+        build_file = Label("//:third_party/boost/boost_171.BUILD"),
+        strip_prefix = "boost_1_71_0/",
+        sha256 = "96b34f7468f26a141f6020efb813f1a2f3dfb9797ecf76a7d7cbd843cc95f5bd",
+        patches = [
+            Label("//:third_party/boost/boost_asio_no_zero_as_nullptr_constant.patch"),
+            # Resolves "undefined template 'boost::serialization::nvp'", see this issue:
+            # https://github.com/boostorg/serialization/issues/186
+            # The following issue indicates we will be able to drop this patch when moving to a version >= 1.73:
+            # https://github.com/lgottwald/PaPILO/issues/31
+            Label("//:third_party/boost/multiprecision_missing_nvp_include.patch"),
+            Label("//:third_party/boost/singleton_reference_binding_to_null_pointer_is_an_undefined_behavior.patch"),
+            # Resolves "load of value ___, which is not a valid value for type 'boost::dll::load_mode::type'". Issue:
+            # https://github.com/boostorg/dll/issues/30
+            # Fixed in version >= 1.73
+            Label("//:third_party/boost/boost_dll_load_mode_enum_undefined_behavior.patch"),
+        ],
+    )
diff --git a/engine/third_party/boost/boost_171.BUILD b/engine/third_party/boost/boost_171.BUILD
new file mode 100644
index 0000000000000000000000000000000000000000..958a270b53f375c00b146391665dbf1b40a93656
--- /dev/null
+++ b/engine/third_party/boost/boost_171.BUILD
@@ -0,0 +1,1776 @@
+# Note: This is a temporary copy of boost.BUILD in order to maintain 1.66 and 1.68 at the same time.
+# The file has minor differences compared to the original boost.BUILD, due to 1.68 not being backward compatible.
+load("@//third_party/boost:boost_library.bzl", "boost_library")
+
+# We track some third party dependencies which have a hard requirement for Boost 1.71 or are precompiled against it.
+# In those cases referencing the exact version is preferable over using the version agnostic alias.
+package(default_visibility = ["@//third_party/boost:__pkg__"])
+
+config_setting(
+    name = "linux_x86_64",
+    constraint_values = [
+        "@platforms//os:linux",
+        "@platforms//cpu:x86_64",
+    ],
+)
+
+config_setting(
+    name = "linux",
+    constraint_values = [
+        "@platforms//os:linux",
+    ],
+)
+
+config_setting(
+    name = "windows_x86_64",
+    constraint_values = [
+        "@platforms//os:windows",
+        "@platforms//cpu:x86_64",
+    ],
+)
+
+BOOST_CTX_ASM_SOURCES = select({
+    ":linux_x86_64": [
+        "libs/context/src/asm/jump_x86_64_sysv_elf_gas.S",
+        "libs/context/src/asm/make_x86_64_sysv_elf_gas.S",
+        "libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S",
+    ],
+    ":windows_x86_64": [
+        "libs/context/src/asm/make_x86_64_ms_pe_masm.asm",
+        "libs/context/src/asm/jump_x86_64_ms_pe_masm.asm",
+        "libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm",
+    ],
+})
+
+boost_library(
+    name = "context",
+    srcs = BOOST_CTX_ASM_SOURCES + select({
+        ":linux_x86_64": [
+            "libs/context/src/posix/stack_traits.cpp",
+        ],
+        ":windows_x86_64": [
+            "libs/context/src/windows/stack_traits.cpp",
+        ],
+    }),
+    exclude_src = [
+        "libs/context/src/untested.cpp",
+        "libs/context/src/continuation.cpp",
+        "libs/context/src/fiber.cpp",
+    ],
+    deps = [
+        ":assert",
+        ":config",
+        ":cstdint",
+        ":detail",
+        ":intrusive_ptr",
+    ],
+)
+
+BOOST_FIBER_NUMA_SRCS = select({
+    ":linux_x86_64": [
+        "libs/fiber/src/numa/linux/pin_thread.cpp",
+        "libs/fiber/src/numa/linux/topology.cpp",
+    ],
+    ":windows_x86_64": [
+        "libs/fiber/src/numa/windows/pin_thread.cpp",
+        "libs/fiber/src/numa/windows/topology.cpp",
+    ],
+})
+
+boost_library(
+    name = "fiber",
+    srcs = BOOST_FIBER_NUMA_SRCS + glob(["libs/fiber/src/algo/**/*.cpp"]),
+    copts = select({
+        ":windows_x86_64": [
+            "/D_WIN32_WINNT=0x0601",
+        ],
+        "//conditions:default": [],
+    }),
+    exclude_src = ["libs/fiber/src/numa/**/*.cpp"],
+    linkopts = select({
+        ":linux_x86_64": [
+            "-lpthread",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":algorithm",
+        ":context",
+        ":filesystem",
+        ":format",
+        ":intrusive",
+        ":intrusive_ptr",
+        ":pool",
+    ],
+)
+
+boost_library(
+    name = "pool",
+    deps = [
+        ":assert",
+        ":config",
+        ":detail",
+        ":integer",
+        ":limits",
+        ":throw_exception",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "algorithm",
+    deps = [
+        ":function",
+        ":iterator",
+        ":range",
+    ],
+)
+
+boost_library(
+    name = "align",
+)
+
+boost_library(
+    name = "any",
+    deps = [
+        ":config",
+        ":mpl",
+        ":static_assert",
+        ":throw_exception",
+        ":type_index",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "assign",
+    deps = [
+        ":config",
+        ":detail",
+        ":mpl",
+        ":preprocessor",
+        ":ptr_container",
+        ":range",
+        ":static_assert",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "atomic",
+    hdrs = [
+        "boost/memory_order.hpp",
+    ],
+    deps = [
+        ":assert",
+        ":config",
+        ":cstdint",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "archive",
+    deps = [
+        ":assert",
+        ":cstdint",
+        ":integer",
+        ":io",
+        ":iterator",
+        ":mpl",
+        ":noncopyable",
+        ":smart_ptr",
+        ":spirit",
+    ],
+)
+
+boost_library(
+    name = "array",
+    deps = [
+        ":assert",
+        ":config",
+        ":core",
+        ":functional",
+        ":swap",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "asio",
+    defines = ["BOOST_ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW"],
+    linkopts = select({
+        ":linux_x86_64": [
+            "-lpthread",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":bind",
+        ":date_time",
+        ":regex",
+    ],
+)
+
+boost_library(
+    name = "assert",
+)
+
+boost_library(
+    name = "beast",
+    deps = [
+        ":asio",
+        ":config",
+        ":core",
+        ":detail",
+        ":endian",
+        ":logic",
+        ":mp11",
+        ":smart_ptr",
+        ":static_assert",
+        ":system",
+        ":throw_exception",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "bimap",
+    deps = [
+        ":concept_check",
+        ":multi_index",
+        ":serialization",
+    ],
+)
+
+boost_library(
+    name = "bind",
+    deps = [
+        ":get_pointer",
+        ":is_placeholder",
+        ":mem_fn",
+        ":ref",
+        ":type",
+        ":visit_each",
+    ],
+)
+
+boost_library(
+    name = "callable_traits",
+    deps = [
+    ],
+)
+
+boost_library(
+    name = "call_traits",
+)
+
+boost_library(
+    name = "cerrno",
+)
+
+boost_library(
+    name = "checked_delete",
+)
+
+boost_library(
+    name = "chrono",
+    deps = [
+        ":config",
+        ":mpl",
+        ":operators",
+        ":predef",
+        ":ratio",
+        ":system",
+        ":throw_exception",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "circular_buffer",
+    deps = [
+        ":call_traits",
+        ":concept_check",
+        ":config",
+        ":container",
+        ":detail",
+        ":iterator",
+        ":limits",
+        ":move",
+        ":static_assert",
+        ":throw_exception",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "compute",
+    linkopts = [
+        "-lOpenCL",
+    ],
+    deps = [
+        ":algorithm",
+        ":chrono",
+        ":config",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "concept_archetype",
+    deps = [
+        ":config",
+        ":iterator",
+        ":mpl",
+    ],
+)
+
+boost_library(
+    name = "concept_check",
+    deps = [
+        ":concept",
+        ":concept_archetype",
+    ],
+)
+
+boost_library(
+    name = "config",
+    deps = [
+        ":version",
+    ],
+)
+
+boost_library(
+    name = "concept",
+)
+
+boost_library(
+    name = "container",
+    srcs = [
+        "libs/container/src/dlmalloc_ext_2_8_6.c",
+    ],
+    hdrs = [
+        "libs/container/src/dlmalloc_2_8_6.c",
+    ],
+    deps = [
+        ":config",
+        ":core",
+        ":intrusive",
+        ":move",
+    ],
+)
+
+boost_library(
+    name = "conversion",
+)
+
+boost_library(
+    name = "core",
+    srcs = [
+        "boost/checked_delete.hpp",
+    ],
+)
+
+BOOST_CORO_SRCS = select({
+    ":linux_x86_64": [
+        "libs/coroutine/src/posix/stack_traits.cpp",
+    ],
+    ":windows_x86_64": [
+        "libs/coroutine/src/windows/stack_traits.cpp",
+    ],
+})
+
+boost_library(
+    name = "coroutine",
+    srcs = BOOST_CORO_SRCS + [
+        "libs/coroutine/src/detail/coroutine_context.cpp",
+    ],
+    deps = [
+        ":config",
+        ":context",
+        ":move",
+        ":range",
+        ":system",
+        ":thread",
+    ],
+)
+
+boost_library(
+    name = "cstdint",
+)
+
+boost_library(
+    name = "current_function",
+)
+
+boost_library(
+    name = "date_time",
+    srcs = glob([
+        "libs/date_time/src/gregorian/*.cpp",
+        "libs/date_time/src/gregorian/*.hpp",
+    ]),
+    deps = [
+        ":algorithm",
+        ":io",
+        ":lexical_cast",
+        ":mpl",
+        ":operators",
+        ":smart_ptr",
+        ":static_assert",
+        ":tokenizer",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "detail",
+    hdrs = [
+        "boost/blank.hpp",
+        "boost/blank_fwd.hpp",
+        "boost/cstdlib.hpp",
+    ],
+    deps = [
+        ":call_traits",
+        ":limits",
+    ],
+)
+
+boost_library(
+    name = "dynamic_bitset",
+    deps = [
+        ":config",
+        ":core",
+        ":detail",
+        ":integer",
+        ":move",
+        ":throw_exception",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "enable_shared_from_this",
+)
+
+boost_library(
+    name = "endian",
+    deps = [
+        ":config",
+        ":core",
+        ":cstdint",
+        ":detail",
+        ":predef",
+        ":type_traits",
+    ],
+)
+
+# Note: Users of exception must also bring :smart_ptr on their own!
+# This is because there is a circular dependency between these targets:
+#
+#   exception/info.hpp brings boost/shared_ptr.hpp
+#   But smart_ptr -> throw_exception -> exception => circular dep
+#
+# Bringing ":shared_ptr" is not a solution either, as this is a fake library.
+# Trying to create a proper :shared_ptr is not possible, as it cannot be extracted
+# easily from the :smart_ptr lib.
+boost_library(
+    name = "exception",
+    hdrs = [
+        "boost/exception_ptr.hpp",
+    ],
+    deps = [
+        ":config",
+        ":detail",
+    ],
+)
+
+boost_library(
+    name = "exception_ptr",
+    deps = [
+        ":config",
+    ],
+)
+
+boost_library(
+    name = "filesystem",
+    deps = [
+        ":config",
+        ":functional",
+        ":io",
+        ":iterator",
+        ":range",
+        ":smart_ptr",
+        ":system",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "foreach",
+    deps = [
+        ":config",
+        ":detail",
+        ":iterator",
+        ":mpl",
+        ":noncopyable",
+        ":range",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "format",
+    deps = [
+        ":assert",
+        ":config",
+        ":detail",
+        ":limits",
+        ":optional",
+        ":smart_ptr",
+        ":throw_exception",
+        ":timer",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "function",
+    hdrs = [
+        "boost/function_equal.hpp",
+    ],
+    deps = [
+        ":bind",
+        ":integer",
+        ":type_index",
+    ],
+)
+
+boost_library(
+    name = "function_types",
+)
+
+boost_library(
+    name = "functional",
+    deps = [
+        ":container_hash",
+        ":detail",
+        ":integer",
+    ],
+)
+
+boost_library(
+    name = "fusion",
+    deps = [
+        ":call_traits",
+        ":config",
+        ":core",
+        ":detail",
+        ":function_types",
+        ":functional",
+        ":get_pointer",
+        ":mpl",
+        ":preprocessor",
+        ":ref",
+        ":static_assert",
+        ":tuple",
+        ":type_traits",
+        ":typeof",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "geometry",
+    deps = [
+        ":algorithm",
+        ":call_traits",
+        ":config",
+        ":function_types",
+        ":lexical_cast",
+        ":math",
+        ":mpl",
+        ":numeric",
+        ":qvm",
+        ":range",
+        ":rational",
+        ":tokenizer",
+        ":variant",
+    ],
+)
+
+boost_library(
+    name = "property_tree",
+    deps = [
+        ":any",
+        ":bind",
+        ":format",
+        ":multi_index",
+        ":optional",
+        ":range",
+        ":ref",
+        ":throw_exception",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "get_pointer",
+)
+
+boost_library(
+    name = "heap",
+    deps = [
+        ":parameter",
+    ],
+)
+
+boost_library(
+    name = "icl",
+    deps = [
+        ":concept_check",
+    ],
+)
+
+boost_library(
+    name = "is_placeholder",
+)
+
+boost_library(
+    name = "integer",
+    hdrs = [
+        "boost/cstdint.hpp",
+        "boost/integer_traits.hpp",
+        "boost/pending/integer_log2.hpp",
+    ],
+    deps = [
+        ":static_assert",
+    ],
+)
+
+boost_library(
+    name = "interprocess",
+    deps = [
+        ":assert",
+        ":checked_delete",
+        ":config",
+        ":container",
+        ":core",
+        ":date_time",
+        ":detail",
+        ":integer",
+        ":intrusive",
+        ":limits",
+        ":move",
+        ":static_assert",
+        ":type_traits",
+        ":unordered",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "iterator",
+    hdrs = [
+        "boost/function_output_iterator.hpp",
+        "boost/generator_iterator.hpp",
+        "boost/indirect_reference.hpp",
+        "boost/iterator_adaptors.hpp",
+        "boost/next_prior.hpp",
+        "boost/pointee.hpp",
+        "boost/shared_container_iterator.hpp",
+    ],
+    deps = [
+        ":detail",
+        ":fusion",
+        ":static_assert",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "intrusive",
+    deps = [
+        ":assert",
+        ":config",
+        ":core",
+        ":cstdint",
+        ":move",
+        ":noncopyable",
+        ":static_assert",
+    ],
+)
+
+boost_library(
+    name = "intrusive_ptr",
+    deps = [
+        ":assert",
+        ":detail",
+        ":smart_ptr",
+    ],
+)
+
+boost_library(
+    name = "io",
+)
+
+boost_library(
+    name = "iostreams",
+    deps = [
+        ":assert",
+        ":bind",
+        ":call_traits",
+        ":checked_delete",
+        ":config",
+        ":detail",
+        ":function",
+        ":integer",
+        ":mpl",
+        ":noncopyable",
+        ":preprocessor",
+        ":random",
+        ":range",
+        ":ref",
+        ":regex",
+        ":shared_ptr",
+        ":static_assert",
+        ":throw_exception",
+        ":type",
+        ":type_traits",
+        ":utility",
+        "@//third_party/libzstd",
+        "@org_bzip_bzip2//:bz2lib",
+        "@zlib",
+    ],
+)
+
+boost_library(
+    name = "lexical_cast",
+    deps = [
+        ":array",
+        ":chrono",
+        ":config",
+        ":container",
+        ":detail",
+        ":integer",
+        ":limits",
+        ":math",
+        ":mpl",
+        ":noncopyable",
+        ":numeric_conversion",
+        ":range",
+        ":static_assert",
+        ":throw_exception",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "limits",
+)
+
+boost_library(
+    name = "locale",
+)
+
+boost_library(
+    name = "logic",
+)
+
+boost_library(
+    name = "math",
+    hdrs = [
+        "boost/cstdint.hpp",
+    ],
+    deps = [
+        ":predef",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "mem_fn",
+)
+
+boost_library(
+    name = "move",
+    deps = [
+        ":assert",
+        ":detail",
+        ":static_assert",
+    ],
+)
+
+boost_library(
+    name = "mp11",
+    deps = [
+        ":config",
+        ":detail",
+    ],
+)
+
+boost_library(
+    name = "mpl",
+    deps = [
+        ":move",
+        ":preprocessor",
+    ],
+)
+
+boost_library(
+    name = "multi_index",
+    hdrs = [
+        "boost/multi_index_container.hpp",
+        "boost/multi_index_container_fwd.hpp",
+    ],
+    deps = [
+        ":foreach",
+        ":serialization",
+        ":static_assert",
+        ":tuple",
+    ],
+)
+
+boost_library(
+    name = "multiprecision",
+    deps = [
+        ":config",
+        ":cstdint",
+        ":lexical_cast",
+        ":math",
+        ":mpl",
+        ":predef",
+        ":rational",
+        ":serialization",
+        ":throw_exception",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "msm",
+    deps = [
+        ":any",
+        ":bind",
+        ":config",
+        ":core",
+        ":function",
+        ":fusion",
+        ":mp11",
+        ":mpl",
+        ":noncopyable",
+        ":parameter",
+        ":proto",
+        ":serialization",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "noncopyable",
+)
+
+boost_library(
+    name = "none",
+    hdrs = [
+        "boost/none_t.hpp",
+    ],
+)
+
+boost_library(
+    name = "numeric_conversion",
+    hdrs = glob([
+        "boost/numeric/conversion/**/*.hpp",
+    ]),
+    deps = [
+        ":config",
+        ":detail",
+        ":integer",
+        ":limits",
+        ":mpl",
+        ":throw_exception",
+        ":type",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "numeric_ublas",
+    hdrs = glob([
+        "boost/numeric/ublas/**/*.hpp",
+    ]),
+    deps = [
+        ":concept_check",
+        ":config",
+        ":core",
+        ":iterator",
+        ":mpl",
+        ":noncopyable",
+        ":numeric",
+        ":range",
+        ":serialization",
+        ":shared_array",
+        ":static_assert",
+        ":timer",
+        ":type_traits",
+        ":typeof",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "operators",
+)
+
+boost_library(
+    name = "optional",
+    deps = [
+        ":assert",
+        ":config",
+        ":detail",
+        ":none",
+        ":static_assert",
+        ":throw_exception",
+        ":type",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "parameter",
+    deps = [
+        ":mp11",
+    ],
+)
+
+boost_library(
+    name = "polygon",
+    deps = [
+        ":config",
+        ":cstdint",
+    ],
+)
+
+boost_library(
+    name = "predef",
+)
+
+boost_library(
+    name = "preprocessor",
+)
+
+boost_library(
+    name = "process",
+    deps = [
+        ":algorithm",
+        ":asio",
+        ":config",
+        ":filesystem",
+        ":fusion",
+        ":system",
+        ":winapi",
+    ],
+)
+
+boost_library(
+    name = "program_options",
+    deps = [
+        ":any",
+        ":bind",
+        ":config",
+        ":detail",
+        ":function",
+        ":iterator",
+        ":lexical_cast",
+        ":limits",
+        ":noncopyable",
+        ":shared_ptr",
+        ":static_assert",
+        ":throw_exception",
+        ":tokenizer",
+        ":type_traits",
+        ":version",
+    ],
+)
+
+boost_library(
+    name = "ptr_container",
+    deps = [
+        ":assert",
+        ":checked_delete",
+        ":circular_buffer",
+        ":config",
+        ":iterator",
+        ":mpl",
+        ":range",
+        ":serialization",
+        ":static_assert",
+        ":type_traits",
+        ":unordered",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "qvm",
+    deps = [
+        ":assert",
+        ":core",
+        ":exception",
+        ":static_assert",
+        ":throw_exception",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "random",
+    deps = [
+        ":assert",
+        ":config",
+        ":detail",
+        ":foreach",
+        ":integer",
+        ":lexical_cast",
+        ":limits",
+        ":math",
+        ":mpl",
+        ":multi_index",
+        ":noncopyable",
+        ":operators",
+        ":range",
+        ":regex",
+        ":shared_ptr",
+        ":static_assert",
+        ":system",
+        ":throw_exception",
+        ":timer",
+        ":tuple",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "range",
+    deps = [
+        ":array",
+        ":assert",
+        ":concept_check",
+        ":config",
+        ":detail",
+        ":functional",
+        ":integer",
+        ":iterator",
+        ":mpl",
+        ":noncopyable",
+        ":optional",
+        ":preprocessor",
+        ":ref",
+        ":regex",
+        ":static_assert",
+        ":tuple",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "ratio",
+    deps = [
+        ":integer",
+    ],
+)
+
+boost_library(
+    name = "rational",
+    deps = [
+        ":assert",
+        ":call_traits",
+        ":config",
+        ":detail",
+        ":integer",
+        ":operators",
+        ":static_assert",
+        ":throw_exception",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "ref",
+    deps = [
+        ":config",
+        ":core",
+        ":detail",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "regex",
+    hdrs = [
+        "boost/cregex.hpp",
+    ],
+    defines = [
+        "BOOST_FALLTHROUGH",
+    ],
+    deps = [
+        ":assert",
+        ":config",
+        ":cstdint",
+        ":detail",
+        ":exception",
+        ":functional",
+        ":integer",
+        ":limits",
+        ":mpl",
+        ":predef",
+        ":ref",
+        ":smart_ptr",
+        ":throw_exception",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "scope_exit",
+    deps = [
+        ":config",
+        ":detail",
+        ":function",
+        ":mpl",
+        ":preprocessor",
+        ":type_traits",
+        ":typeof",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "scoped_array",
+    deps = [
+        ":checked_delete",
+    ],
+)
+
+boost_library(
+    name = "scoped_ptr",
+    deps = [
+        ":checked_delete",
+    ],
+)
+
+boost_library(
+    name = "shared_ptr",
+    deps = [
+        ":checked_delete",
+    ],
+)
+
+boost_library(
+    name = "shared_array",
+    deps = [
+        ":checked_delete",
+    ],
+)
+
+boost_library(
+    name = "signals2",
+    deps = [
+        ":assert",
+        ":bind",
+        ":checked_delete",
+        ":config",
+        ":core",
+        ":detail",
+        ":function",
+        ":iterator",
+        ":mpl",
+        ":multi_index",
+        ":noncopyable",
+        ":optional",
+        ":parameter",
+        ":predef",
+        ":preprocessor",
+        ":ref",
+        ":scoped_ptr",
+        ":shared_ptr",
+        ":smart_ptr",
+        ":swap",
+        ":throw_exception",
+        ":tuple",
+        ":type_traits",
+        ":utility",
+        ":variant",
+        ":visit_each",
+    ],
+)
+
+boost_library(
+    name = "serialization",
+    deps = [
+        ":archive",
+        ":array",
+        ":call_traits",
+        ":config",
+        ":container_hash",
+        ":detail",
+        ":function",
+        ":operators",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "smart_ptr",
+    hdrs = [
+        "boost/enable_shared_from_this.hpp",
+        "boost/intrusive_ptr.hpp",
+        "boost/make_shared.hpp",
+        "boost/make_unique.hpp",
+        "boost/pointer_to_other.hpp",
+        "boost/weak_ptr.hpp",
+    ],
+    deps = [
+        ":align",
+        ":assert",
+        ":core",
+        ":integer",
+        ":predef",
+        ":scoped_array",
+        ":scoped_ptr",
+        ":shared_array",
+        ":shared_ptr",
+        ":throw_exception",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "spirit",
+    deps = [
+        ":optional",
+        ":ref",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "static_assert",
+)
+
+boost_library(
+    name = "system",
+    deps = [
+        ":assert",
+        ":cerrno",
+        ":config",
+        ":core",
+        ":cstdint",
+        ":noncopyable",
+        ":predef",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "swap",
+)
+
+boost_library(
+    name = "throw_exception",
+    deps = [
+        ":current_function",
+        ":detail",
+        ":exception",
+    ],
+)
+
+boost_library(
+    name = "thread",
+    srcs = [
+        "libs/thread/src/pthread/once.cpp",
+        "libs/thread/src/pthread/thread.cpp",
+    ],
+    hdrs = [
+        "libs/thread/src/pthread/once_atomic.cpp",
+    ],
+    linkopts = select({
+        ":linux_x86_64": [
+            "-lpthread",
+        ],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":algorithm",
+        ":atomic",
+        ":bind",
+        ":chrono",
+        ":config",
+        ":core",
+        ":date_time",
+        ":detail",
+        ":enable_shared_from_this",
+        ":exception",
+        ":function",
+        ":io",
+        ":lexical_cast",
+        ":smart_ptr",
+        ":system",
+        ":tuple",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "tokenizer",
+    hdrs = [
+        "boost/token_functions.hpp",
+        "boost/token_iterator.hpp",
+    ],
+    deps = [
+        ":assert",
+        ":config",
+        ":detail",
+        ":iterator",
+        ":mpl",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "tribool",
+    hdrs = [
+        "boost/logic/tribool.hpp",
+        "boost/logic/tribool_fwd.hpp",
+    ],
+    deps = [
+        ":config",
+        ":detail",
+    ],
+)
+
+boost_library(
+    name = "type",
+    deps = [
+        ":core",
+    ],
+)
+
+boost_library(
+    name = "type_index",
+    deps = [
+        ":core",
+        ":functional",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "tti",
+    deps = [
+        ":config",
+        ":function_types",
+        ":mpl",
+        ":preprocessor",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "type_traits",
+    hdrs = [
+        "boost/aligned_storage.hpp",
+    ],
+    deps = [
+        ":config",
+        ":core",
+        ":mpl",
+        ":static_assert",
+    ],
+)
+
+boost_library(
+    name = "typeof",
+    deps = [
+        ":config",
+        ":detail",
+        ":mpl",
+        ":preprocessor",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "tuple",
+    deps = [
+        ":ref",
+    ],
+)
+
+boost_library(
+    name = "unordered",
+    hdrs = [
+        "boost/unordered_map.hpp",
+        "boost/unordered_set.hpp",
+    ],
+    deps = [
+        ":assert",
+        ":config",
+        ":container",
+        ":detail",
+        ":functional",
+        ":iterator",
+        ":limits",
+        ":move",
+        ":preprocessor",
+        ":smart_ptr",
+        ":swap",
+        ":throw_exception",
+        ":tuple",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "utility",
+    hdrs = [
+        "boost/compressed_pair.hpp",
+        "boost/next_prior.hpp",
+    ],
+    deps = [
+        ":config",
+        ":detail",
+        ":swap",
+    ],
+)
+
+boost_library(
+    name = "uuid",
+    deps = [
+        ":assert",
+        ":config",
+        ":core",
+        ":detail",
+        ":io",
+        ":random",
+        ":serialization",
+        ":static_assert",
+        ":throw_exception",
+        ":tti",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "variant",
+    deps = [
+        ":call_traits",
+        ":config",
+        ":detail",
+        ":functional",
+        ":math",
+        ":static_assert",
+        ":type_index",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "variant2",
+    deps = [
+        ":assert",
+        ":call_traits",
+        ":config",
+        ":detail",
+        ":exception",
+        ":functional",
+        ":math",
+        ":mp11",
+        ":static_assert",
+        ":throw_exception",
+        ":type_index",
+        ":type_traits",
+        ":utility",
+    ],
+)
+
+boost_library(
+    name = "version",
+)
+
+boost_library(
+    name = "visit_each",
+)
+
+boost_library(
+    name = "timer",
+    deps = [
+        ":cerrno",
+        ":chrono",
+        ":config",
+        ":cstdint",
+        ":io",
+        ":limits",
+        ":system",
+        ":throw_exception",
+    ],
+)
+
+boost_library(
+    name = "numeric",
+)
+
+boost_library(
+    name = "test",
+    exclude_src = glob(["libs/test/src/*.cpp"]),
+    deps = [
+        ":algorithm",
+        ":assert",
+        ":bind",
+        ":call_traits",
+        ":config",
+        ":core",
+        ":current_function",
+        ":detail",
+        ":exception",
+        ":function",
+        ":io",
+        ":iterator",
+        ":limits",
+        ":mpl",
+        ":numeric_conversion",
+        ":optional",
+        ":preprocessor",
+        ":smart_ptr",
+        ":static_assert",
+        ":timer",
+        ":type",
+        ":type_traits",
+        ":utility",
+        ":version",
+    ],
+)
+
+boost_library(
+    name = "winapi",
+)
+
+boost_library(
+    name = "proto",
+    deps = [
+        ":fusion",
+    ],
+)
+
+boost_library(
+    name = "phoenix",
+    deps = [
+        ":proto",
+    ],
+)
+
+boost_library(
+    name = "log",
+    defines = [
+        "BOOST_LOG_WITHOUT_WCHAR_T",
+        "BOOST_LOG_USE_STD_REGEX",
+        "BOOST_LOG_WITHOUT_DEFAULT_FACTORIES",
+        "BOOST_LOG_WITHOUT_SETTINGS_PARSERS",
+        "BOOST_LOG_WITHOUT_DEBUG_OUTPUT",
+        "BOOST_LOG_WITHOUT_EVENT_LOG",
+        "BOOST_LOG_WITHOUT_SYSLOG",
+    ],
+    exclude_src = [
+        "libs/log/src/dump_avx2.cpp",
+    ],
+    deps = [
+        ":asio",
+        ":date_time",
+        ":filesystem",
+        ":interprocess",
+        ":locale",
+        ":parameter",
+        ":phoenix",
+        ":random",
+        ":spirit",
+        ":system",
+        ":thread",
+        ":variant",
+    ],
+)
+
+boost_library(
+    name = "xpressive",
+)
+
+boost_library(
+    name = "property_map",
+)
+
+boost_library(
+    name = "graph",
+    hdrs = [
+        "boost/implicit_cast.hpp",
+    ],
+    deps = [
+        ":algorithm",
+        ":config",
+        ":foreach",
+        ":function",
+        ":fusion",
+        ":iterator",
+        ":lexical_cast",
+        ":parameter",
+        ":pending",
+        ":property_map",
+        ":property_tree",
+        ":proto",
+        ":regex",
+        ":smart_ptr",
+        ":tti",
+        ":typeof",
+        ":unordered",
+        ":xpressive",
+    ],
+)
+
+boost_library(
+    name = "pending",
+)
+
+boost_library(
+    name = "units",
+    deps = [
+        ":config",
+        ":integer",
+        ":math",
+        ":mpl",
+        ":static_assert",
+        ":type_traits",
+        ":typeof",
+        ":version",
+    ],
+)
+
+boost_library(
+    name = "crc",
+)
+
+boost_library(
+    name = "lockfree",
+    deps = [
+        ":parameter",
+    ],
+)
+
+boost_library(
+    name = "accumulators",
+    deps = [
+        ":numeric",
+        ":parameter",
+        ":serialization",
+    ],
+)
+
+boost_library(
+    name = "cast",
+)
+
+boost_library(
+    name = "polymorphic_cast",
+)
+
+boost_library(
+    name = "implicit_cast",
+)
+
+boost_library(
+    name = "python",
+    srcs = glob([
+        "libs/python/src/converter/*.cpp",
+        "libs/python/src/object/*.cpp",
+    ]),
+    deps = [
+        ":cast",
+        ":config",
+        ":detail",
+        ":function",
+        ":get_pointer",
+        ":graph",
+        ":implicit_cast",
+        ":iterator",
+        ":mp11",
+        ":mpl",
+        ":noncopyable",
+        ":numeric",
+        ":operators",
+        ":parameter",
+        ":polymorphic_cast",
+        ":ref",
+        ":shared_ptr",
+        ":smart_ptr",
+        ":type",
+        ":type_traits",
+        "@//third_party/python3:lib",
+    ],
+)
+
+boost_library(
+    name = "container_hash",
+    deps = [
+        ":assert",
+        ":config",
+        ":core",
+        ":type_traits",
+    ],
+)
+
+boost_library(
+    name = "dll",
+    deps = [
+        ":filesystem",
+        ":function",
+        ":shared_ptr",
+        ":system",
+    ],
+)
+
+boost_library(
+    name = "statechart",
+    deps = [
+        ":assert",
+        ":bind",
+        ":config",
+        ":detail",
+        ":function",
+        ":intrusive_ptr",
+        ":mpl",
+        ":noncopyable",
+        ":polymorphic_cast",
+        ":ref",
+        ":smart_ptr",
+        ":static_assert",
+    ],
+)
+
+boost_library(
+    name = "progress",
+    deps = [
+        ":config",
+        ":cstdint",
+        ":noncopyable",
+        ":timer",
+    ],
+)
diff --git a/engine/third_party/boost/boost_asio_no_zero_as_nullptr_constant.patch b/engine/third_party/boost/boost_asio_no_zero_as_nullptr_constant.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a2eac0eb7de658de36d77fbeb131c8f6eb352606
--- /dev/null
+++ b/engine/third_party/boost/boost_asio_no_zero_as_nullptr_constant.patch
@@ -0,0 +1,30 @@
+index b058f78..8eae871 100644
+--- boost/asio/basic_datagram_socket.hpp
++++ boost/asio/basic_datagram_socket.hpp
+@@ -187,7 +187,7 @@ public:
+       const endpoint_type& endpoint,
+       typename enable_if<
+         is_convertible<ExecutionContext&, execution_context&>::value
+-      >::type* = 0)
++      >::type* = nullptr)
+     : basic_socket<Protocol, Executor>(context, endpoint)
+   {
+   }
+@@ -232,7 +232,7 @@ public:
+       const protocol_type& protocol, const native_handle_type& native_socket,
+       typename enable_if<
+         is_convertible<ExecutionContext&, execution_context&>::value
+-      >::type* = 0)
++      >::type* = nullptr)
+     : basic_socket<Protocol, Executor>(context, protocol, native_socket)
+   {
+   }
+@@ -289,7 +289,7 @@ public:
+       typename enable_if<
+         is_convertible<Protocol1, Protocol>::value
+           && is_convertible<Executor1, Executor>::value
+-      >::type* = 0)
++      >::type* = nullptr)
+     : basic_socket<Protocol, Executor>(std::move(other))
+   {
+   }
diff --git a/engine/third_party/boost/boost_dll_load_mode_enum_undefined_behavior.patch b/engine/third_party/boost/boost_dll_load_mode_enum_undefined_behavior.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3fd241960f6ea3788f0accdbea5fed95055c8e9a
--- /dev/null
+++ b/engine/third_party/boost/boost_dll_load_mode_enum_undefined_behavior.patch
@@ -0,0 +1,148 @@
+From f5d56094f159c1751387a336cb79f89078ec0fcb Mon Sep 17 00:00:00 2001
+From: Antony Polukhin <antoshkka@gmail.com>
+Date: Sat, 23 Nov 2019 20:59:00 +0300
+Subject: [PATCH] fix warnings and work with enum without UB (fixes #30)
+
+---
+ .../dll/detail/posix/shared_library_impl.hpp  | 27 ++++++++++---------
+ .../detail/windows/shared_library_impl.hpp    | 19 ++++++-------
+ include/boost/dll/library_info.hpp            |  2 +-
+ 3 files changed, 25 insertions(+), 23 deletions(-)
+
+diff --git boost/dll/detail/posix/shared_library_impl.hpp boost/dll/detail/posix/shared_library_impl.hpp
+index 6ecb38c3..b6444e3d 100644
+--- boost/dll/detail/posix/shared_library_impl.hpp
++++ boost/dll/detail/posix/shared_library_impl.hpp
+@@ -69,8 +69,9 @@ class shared_library_impl {
+         return actual_path;
+     }
+ 
+-    void load(boost::dll::fs::path sl, load_mode::type mode, boost::dll::fs::error_code &ec) {
++    void load(boost::dll::fs::path sl, load_mode::type portable_mode, boost::dll::fs::error_code &ec) {
+         typedef int native_mode_t;
++        native_mode_t native_mode = static_cast<native_mode_t>(portable_mode);
+         unload();
+ 
+         // Do not allow opening NULL paths. User must use program_location() instead
+@@ -84,20 +85,20 @@ class shared_library_impl {
+         }
+ 
+         // Fixing modes
+-        if (!(mode & load_mode::rtld_now)) {
+-            mode |= load_mode::rtld_lazy;
++        if (!(native_mode & load_mode::rtld_now)) {
++            native_mode |= load_mode::rtld_lazy;
+         }
+ 
+-        if (!(mode & load_mode::rtld_global)) {
+-            mode |= load_mode::rtld_local;
++        if (!(native_mode & load_mode::rtld_global)) {
++            native_mode |= load_mode::rtld_local;
+         }
+ 
+ #if BOOST_OS_LINUX || BOOST_OS_ANDROID
+-        if (!sl.has_parent_path() && !(mode & load_mode::search_system_folders)) {
++        if (!sl.has_parent_path() && !(native_mode & load_mode::search_system_folders)) {
+             sl = "." / sl;
+         }
+ #else
+-        if (!sl.is_absolute() && !(mode & load_mode::search_system_folders)) {
++        if (!sl.is_absolute() && !(native_mode & load_mode::search_system_folders)) {
+             boost::dll::fs::error_code current_path_ec;
+             boost::dll::fs::path prog_loc = boost::dll::fs::current_path(current_path_ec);
+             if (!current_path_ec) {
+@@ -107,14 +108,14 @@ class shared_library_impl {
+         }
+ #endif
+ 
+-        mode &= ~load_mode::search_system_folders;
++        native_mode = static_cast<unsigned>(native_mode) & ~static_cast<unsigned>(load_mode::search_system_folders);
+ 
+         // Trying to open with appended decorations
+-        if (!!(mode & load_mode::append_decorations)) {
+-            mode &= ~load_mode::append_decorations;
++        if (!!(native_mode & load_mode::append_decorations)) {
++            native_mode = static_cast<unsigned>(native_mode) & ~static_cast<unsigned>(load_mode::append_decorations);
+ 
+             boost::dll::fs::path actual_path = decorate(sl);
+-            handle_ = dlopen(actual_path.c_str(), static_cast<native_mode_t>(mode));
++            handle_ = dlopen(actual_path.c_str(), native_mode);
+             if (handle_) {
+                 boost::dll::detail::reset_dlerror();
+                 return;
+@@ -131,7 +132,7 @@ class shared_library_impl {
+         }
+ 
+         // Opening by exactly specified path
+-        handle_ = dlopen(sl.c_str(), static_cast<native_mode_t>(mode));
++        handle_ = dlopen(sl.c_str(), native_mode);
+         if (handle_) {
+             boost::dll::detail::reset_dlerror();
+             return;
+@@ -153,7 +154,7 @@ class shared_library_impl {
+             // returned handle is for the main program.
+             ec.clear();
+             boost::dll::detail::reset_dlerror();
+-            handle_ = dlopen(NULL, static_cast<native_mode_t>(mode));
++            handle_ = dlopen(NULL, native_mode);
+             if (!handle_) {
+                 ec = boost::dll::fs::make_error_code(
+                     boost::dll::fs::errc::bad_file_descriptor
+diff --git boost/dll/detail/windows/shared_library_impl.hpp boost/dll/detail/windows/shared_library_impl.hpp
+index ca584fad..4df18b48 100644
+--- boost/dll/detail/windows/shared_library_impl.hpp
++++ boost/dll/detail/windows/shared_library_impl.hpp
+@@ -56,11 +56,12 @@ class shared_library_impl {
+         return actual_path;
+     }
+ 
+-    void load(boost::dll::fs::path sl, load_mode::type mode, boost::dll::fs::error_code &ec) {
++    void load(boost::dll::fs::path sl, load_mode::type portable_mode, boost::dll::fs::error_code &ec) {
+         typedef boost::winapi::DWORD_ native_mode_t;
++        native_mode_t native_mode = static_cast<native_mode_t>(portable_mode);
+         unload();
+ 
+-        if (!sl.is_absolute() && !(mode & load_mode::search_system_folders)) {
++        if (!sl.is_absolute() && !(native_mode & load_mode::search_system_folders)) {
+             boost::dll::fs::error_code current_path_ec;
+             boost::dll::fs::path prog_loc = boost::dll::fs::current_path(current_path_ec);
+ 
+@@ -69,13 +70,13 @@ class shared_library_impl {
+                 sl.swap(prog_loc);
+             }
+         }
+-        mode &= ~load_mode::search_system_folders;
++        native_mode = static_cast<unsigned>(native_mode) & ~static_cast<unsigned>(load_mode::search_system_folders);
+ 
+         // Trying to open with appended decorations
+-        if (!!(mode & load_mode::append_decorations)) {
+-            mode &= ~load_mode::append_decorations;
++        if (!!(native_mode & load_mode::append_decorations)) {
++            native_mode = static_cast<unsigned>(native_mode) & ~static_cast<unsigned>(load_mode::append_decorations);
+ 
+-            if (load_impl(decorate(sl), static_cast<native_mode_t>(mode), ec)) {
++            if (load_impl(decorate(sl), native_mode, ec)) {
+                 return;
+             }
+ 
+@@ -85,7 +86,7 @@ class shared_library_impl {
+                 ? sl.parent_path() / L"lib"
+                 : L"lib"
+             ).native() + sl.filename().native() + suffix().native();
+-            if (load_impl(mingw_load_path, static_cast<native_mode_t>(mode), ec)) {
++            if (load_impl(mingw_load_path, native_mode, ec)) {
+                 return;
+             }
+         }
+@@ -98,9 +99,9 @@ class shared_library_impl {
+         // we have some path. So we do not check for path, only for extension. We can not be sure that
+         // such behavior remain across all platforms, so we add L"." by hand.
+         if (sl.has_extension()) {
+-            handle_ = boost::winapi::LoadLibraryExW(sl.c_str(), 0, static_cast<native_mode_t>(mode));
++            handle_ = boost::winapi::LoadLibraryExW(sl.c_str(), 0, native_mode);
+         } else {
+-            handle_ = boost::winapi::LoadLibraryExW((sl.native() + L".").c_str(), 0, static_cast<native_mode_t>(mode));
++            handle_ = boost::winapi::LoadLibraryExW((sl.native() + L".").c_str(), 0, native_mode);
+         }
+ 
+         // LoadLibraryExW method is capable of self loading from program_location() path. No special actions
diff --git a/engine/third_party/boost/boost_library.bzl b/engine/third_party/boost/boost_library.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..94a7fd799336f704502f0b45b5b6033d3e6b25ec
--- /dev/null
+++ b/engine/third_party/boost/boost_library.bzl
@@ -0,0 +1,93 @@
+include_pattern = "boost/%s/"
+
+hdrs_patterns = [
+    "boost/%s.h",
+    "boost/%s_fwd.h",
+    "boost/%s.hpp",
+    "boost/%s_fwd.hpp",
+    "boost/%s/**/*.hpp",
+    "boost/%s/**/*.ipp",
+    "boost/%s/**/*.h",
+    "libs/%s/src/*.ipp",
+]
+
+srcs_patterns = [
+    "libs/%s/src/*.cpp",
+    "libs/%s/src/*.hpp",
+]
+
+def _srcs_list(library_name, exclude):
+    return native.glob(
+        [p % (library_name,) for p in srcs_patterns],
+        exclude = exclude,
+        allow_empty = True,
+    )
+
+def _includes_list(library_name):
+    return [".", include_pattern % library_name]
+
+def _hdr_list(library_name):
+    return native.glob([p % (library_name,) for p in hdrs_patterns], allow_empty = True)
+
+def boost_library(
+        name,
+        defines = None,
+        includes = None,
+        hdrs = None,
+        srcs = None,
+        deps = None,
+        copts = None,
+        exclude_src = [],
+        linkopts = None,
+        visibility = None):
+    """Declare a boost boost library
+
+    Args:
+      name:name
+      defines:defines
+      includes:includes
+      hdrs:hdrs
+      srcs:srcs
+      deps:deps
+      copts:copts
+      exclude_src:exclude_src
+      linkopts:linkopts
+      visibility:visibility
+    Returns:
+      A native cc_library
+    """
+
+    if defines == None:
+        defines = []
+
+    if includes == None:
+        includes = []
+
+    if hdrs == None:
+        hdrs = []
+
+    if srcs == None:
+        srcs = []
+
+    if deps == None:
+        deps = []
+
+    if copts == None:
+        copts = []
+
+    if linkopts == None:
+        linkopts = []
+
+    return native.cc_library(
+        name = name,
+        visibility = visibility,
+        defines = defines + ["BOOST_AUTO_LINK_NOMANGLE"],
+        includes = _includes_list(name) + includes,
+        hdrs = _hdr_list(name) + hdrs,
+        srcs = _srcs_list(name, exclude_src) + srcs,
+        deps = deps,
+        copts = copts,
+        features = ["third_party_warnings"],
+        linkopts = linkopts,
+        licenses = ["notice"],
+    )
diff --git a/engine/third_party/boost/multiprecision_missing_nvp_include.patch b/engine/third_party/boost/multiprecision_missing_nvp_include.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2c4739bd025d0c47c60e2420d2339d3b2b6275b7
--- /dev/null
+++ b/engine/third_party/boost/multiprecision_missing_nvp_include.patch
@@ -0,0 +1,10 @@
+--- boost/multiprecision/cpp_dec_float.hpp
++++ boost/multiprecision/cpp_dec_float.hpp
+@@ -29,6 +29,7 @@
+ #include <boost/multiprecision/number.hpp>
+ #include <boost/multiprecision/detail/big_lanczos.hpp>
+ #include <boost/multiprecision/detail/dynamic_array.hpp>
++#include <boost/serialization/nvp.hpp>
+
+ //
+ // Headers required for Boost.Math integration:
diff --git a/engine/third_party/boost/singleton_reference_binding_to_null_pointer_is_an_undefined_behavior.patch b/engine/third_party/boost/singleton_reference_binding_to_null_pointer_is_an_undefined_behavior.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2992a939dfe7cf5150ffe4e40d8e56c2ea45601d
--- /dev/null
+++ b/engine/third_party/boost/singleton_reference_binding_to_null_pointer_is_an_undefined_behavior.patch
@@ -0,0 +1,19 @@
+commit 48f0844fda0a4af8093b98b1505777d845747e3a
+Author: TaWeiTu <tu.da.wei@gmail.com>
+Date:   Mon Sep 2 05:58:06 2019 +0800
+
+    reference binding to null pointer is an undefined behaviour
+
+diff --git a/include/boost/serialization/singleton.hpp b/include/boost/serialization/singleton.hpp
+index a668100d..427e1bbd 100644
+--- boost/serialization/singleton.hpp
++++ boost/serialization/singleton.hpp
+@@ -178,7 +178,7 @@ private:
+         // Unfortunately, this triggers detectors of undefine behavior
+         // and reports an error.  But I've been unable to find a different
+         // of guarenteeing that the the singleton is created at pre-main time.
+-        use(* m_instance);
++        if (m_instance) use(* m_instance);
+ 
+         return static_cast<T &>(t);
+     }
diff --git a/engine/third_party/deps.bzl b/engine/third_party/deps.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..1f832f8a4118020d008720161d4fea8b2b7e8350
--- /dev/null
+++ b/engine/third_party/deps.bzl
@@ -0,0 +1,18 @@
+load("@//third_party/boost:boost.bzl", "boost_deps")
+load("@//third_party/mantle_api:mantle_api.bzl", "mantle_api")
+load("@//third_party/open_scenario_parser:open_scenario_parser.bzl", "open_scenario_parser")
+load("@//third_party/stochastics_library:stochastics_library.bzl", "stochastics_library")
+load("@//third_party/units:units.bzl", "units_nhh")
+load("@//third_party/yase:yase.bzl", "yase")
+
+
+
+def osc_engine_deps():
+    """Load dependencies"""
+    boost_deps()
+    mantle_api()
+    open_scenario_parser()
+    stochastics_library()
+    units_nhh()
+    yase()
+
diff --git a/engine/third_party/mantle_api/BUILD.bazel b/engine/third_party/mantle_api/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/engine/third_party/mantle_api/mantle_api.bzl b/engine/third_party/mantle_api/mantle_api.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..2bbe12d82e7430ca25e305db26e3f10d45774d63
--- /dev/null
+++ b/engine/third_party/mantle_api/mantle_api.bzl
@@ -0,0 +1,14 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+_TAG = "v8.0.0"
+
+def mantle_api():
+    maybe(
+        http_archive,
+        name = "mantle_api",
+        url = "https://gitlab.eclipse.org/eclipse/openpass/mantle-api/-/archive/{tag}/mantle-api-{tag}.tar.gz".format(tag = _TAG),
+        sha256 = "abb18f7180da012c02bda874752a7efd9ceab1da31e616174790f07a17c4fa3f",
+        strip_prefix = "mantle-api-{tag}".format(tag = _TAG),
+        type = "tar.gz",
+    )
diff --git a/engine/third_party/open_scenario_parser/BUILD.bazel b/engine/third_party/open_scenario_parser/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/engine/bazel/openscenario_api.BUILD b/engine/third_party/open_scenario_parser/open_scenario_parser.BUILD
similarity index 100%
rename from engine/bazel/openscenario_api.BUILD
rename to engine/third_party/open_scenario_parser/open_scenario_parser.BUILD
diff --git a/engine/third_party/open_scenario_parser/open_scenario_parser.bzl b/engine/third_party/open_scenario_parser/open_scenario_parser.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..8c5d3e88735acc25031b0bd33310f1f72c16b3b9
--- /dev/null
+++ b/engine/third_party/open_scenario_parser/open_scenario_parser.bzl
@@ -0,0 +1,12 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+def open_scenario_parser():
+    maybe(
+        http_archive,
+        name = "open_scenario_parser",
+        build_file = Label("//:third_party/open_scenario_parser/open_scenario_parser.BUILD"),
+        url = "https://github.com/RA-Consulting-GmbH/openscenario.api.test/releases/download/v1.4.0/OpenSCENARIO_API_LinuxSharedRelease_2024.11.18.tgz",
+        sha256 = "7a4cdb82ccaaeed5fccf12efd94cf4f9c9d3ac0fc7d7feedd4c0babe2404f853",
+        strip_prefix = "OpenSCENARIO_API_LinuxSharedRelease",
+    )
diff --git a/engine/third_party/stochastics_library/BUILD.bazel b/engine/third_party/stochastics_library/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/engine/third_party/stochastics_library/stochastics_library.bzl b/engine/third_party/stochastics_library/stochastics_library.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..3b971518abf728e7b4b22fb9109ed3b5ccfad5e1
--- /dev/null
+++ b/engine/third_party/stochastics_library/stochastics_library.bzl
@@ -0,0 +1,13 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+_TAG = "v0.11.1"
+
+def stochastics_library():
+    maybe(
+        http_archive,
+        name = "stochastics_library",
+        url = "https://gitlab.eclipse.org/eclipse/openpass/stochastics-library/-/archive/{tag}/stochastics-library-{tag}.tar.gz".format(tag = _TAG),
+        sha256 = "b2c0d60a848b7a2e62be49bd2c3f2576903cf78b8bc21e65b8346274e46c15a6",
+        strip_prefix = "stochastics-library-{tag}".format(tag = _TAG),
+    )
diff --git a/engine/third_party/units/BUILD.bazel b/engine/third_party/units/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/engine/bazel/units.BUILD b/engine/third_party/units/units.BUILD
similarity index 100%
rename from engine/bazel/units.BUILD
rename to engine/third_party/units/units.BUILD
diff --git a/engine/third_party/units/units.bzl b/engine/third_party/units/units.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..c2f4b6e3dde4b5912e57448dccfd75097bf90eff
--- /dev/null
+++ b/engine/third_party/units/units.bzl
@@ -0,0 +1,18 @@
+"""
+This module contains rule to pull nholthaus units
+"""
+
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+_TAG = "2.3.3"
+
+def units_nhh():
+    maybe(
+        http_archive,
+        name = "units_nhh",
+        build_file = Label("//:third_party/units/units.BUILD"),
+        url = "https://github.com/nholthaus/units/archive/refs/tags/v{tag}.tar.gz".format(tag = _TAG),
+        sha256 = "b1f3c1dd11afa2710a179563845ce79f13ebf0c8c090d6aa68465b18bd8bd5fc",
+        strip_prefix = "units-{tag}".format(tag = _TAG),
+    )
diff --git a/engine/third_party/yase/BUILD.bazel b/engine/third_party/yase/BUILD.bazel
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/engine/third_party/yase/yase.bzl b/engine/third_party/yase/yase.bzl
new file mode 100644
index 0000000000000000000000000000000000000000..9a01b2e81742cad85f86ca0e3ad6802c416f0808
--- /dev/null
+++ b/engine/third_party/yase/yase.bzl
@@ -0,0 +1,13 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
+
+_TAG = "v0.0.1"
+
+def yase():
+    maybe(
+        http_archive,
+        name = "yase",
+        url = "https://gitlab.eclipse.org/eclipse/openpass/yase/-/archive/{tag}/yase-{tag}.tar.gz".format(tag = _TAG),
+        sha256 = "243d710172dff4c4e7ab95e5bd68a6d8335cf8a3fdd1efa87d118250e3b85ee3",
+        strip_prefix = "yase-{tag}".format(tag = _TAG),
+    )