IVGCVSW-7024 Add missing license info for reuse lint

Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Change-Id: I97dee6982e0a7be01c13e9e803c0997547a39ff1
diff --git a/third-party/cxxopts/CHANGELOG.md.license b/third-party/cxxopts/CHANGELOG.md.license
new file mode 100644
index 0000000..bf1b5b5
--- /dev/null
+++ b/third-party/cxxopts/CHANGELOG.md.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2014 Jarryd Beck
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/cxxopts/README.md.license b/third-party/cxxopts/README.md.license
new file mode 100644
index 0000000..bf1b5b5
--- /dev/null
+++ b/third-party/cxxopts/README.md.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2014 Jarryd Beck
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/cxxopts/cxxopts.hpp b/third-party/cxxopts/cxxopts.hpp
index 88e8a02..5cebc4b 100644
--- a/third-party/cxxopts/cxxopts.hpp
+++ b/third-party/cxxopts/cxxopts.hpp
@@ -2,6 +2,8 @@
 
 Copyright (c) 2014, 2015, 2016, 2017 Jarryd Beck
 
+SPDX-License-Identifier: MIT
+
 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
@@ -1228,7 +1230,7 @@
     public:
 
     ParseResult() {}
-     
+
     ParseResult(const ParseResult&) = default;
 
     ParseResult(NameHashMap&& keys, ParsedHashMap&& values, std::vector<KeyValue> sequential, std::vector<std::string>&& unmatched_args)
diff --git a/third-party/doctest/doctest.h b/third-party/doctest/doctest.h
index 42eb039..9719680 100644
--- a/third-party/doctest/doctest.h
+++ b/third-party/doctest/doctest.h
@@ -6,6 +6,8 @@
 //
 // Copyright (c) 2016-2021 Viktor Kirilov
 //
+// SPDX-License-Identifier: MIT
+//
 // Distributed under the MIT Software License
 // See accompanying file LICENSE.txt or copy at
 // https://opensource.org/licenses/MIT
@@ -607,7 +609,7 @@
         DT_WARN_THROWS_WITH    = is_throws_with | is_warn,
         DT_CHECK_THROWS_WITH   = is_throws_with | is_check,
         DT_REQUIRE_THROWS_WITH = is_throws_with | is_require,
-        
+
         DT_WARN_THROWS_WITH_AS    = is_throws_with | is_throws_as | is_warn,
         DT_CHECK_THROWS_WITH_AS   = is_throws_with | is_throws_as | is_check,
         DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require,
@@ -781,9 +783,9 @@
     template<class T> struct remove_reference<T&>  { typedef T type; };
     template<class T> struct remove_reference<T&&> { typedef T type; };
 
-    template<typename T, typename U = T&&> U declval(int); 
+    template<typename T, typename U = T&&> U declval(int);
 
-    template<typename T> T declval(long); 
+    template<typename T> T declval(long);
 
     template<typename T> auto declval() DOCTEST_NOEXCEPT -> decltype(declval<T>(0)) ;
 
@@ -1568,7 +1570,7 @@
     DOCTEST_INTERFACE void toStream(std::ostream* s, int long long in);
     DOCTEST_INTERFACE void toStream(std::ostream* s, int long long unsigned in);
 
-    // ContextScope base class used to allow implementing methods of ContextScope 
+    // ContextScope base class used to allow implementing methods of ContextScope
     // that don't depend on the template parameter in doctest.cpp.
     class DOCTEST_INTERFACE ContextScopeBase : public IContextScope {
     protected:
@@ -1620,7 +1622,7 @@
         bool log();
         void react();
     };
-    
+
     template <typename L>
     ContextScope<L> MakeContextScope(const L &lambda) {
         return ContextScope<L>(lambda);
@@ -2991,7 +2993,7 @@
 
 namespace timer_large_integer
 {
-    
+
 #if defined(DOCTEST_PLATFORM_WINDOWS)
     typedef ULONGLONG type;
 #else // DOCTEST_PLATFORM_WINDOWS
@@ -3747,7 +3749,7 @@
             if(matchesAny(m_signature.m_name.c_str(), s->filters[7], false, s->case_sensitive))
                 return;
         }
-        
+
         // if a Subcase on the same level has already been entered
         if(s->subcasesStack.size() < size_t(s->subcasesCurrentMaxLevel)) {
             s->should_reenter = true;
@@ -3769,8 +3771,8 @@
         DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature);
     }
 
-    DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17	
-    DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")	
+    DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17
+    DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
     DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
 
     Subcase::~Subcase() {
@@ -3797,8 +3799,8 @@
         }
     }
 
-    DOCTEST_CLANG_SUPPRESS_WARNING_POP	
-    DOCTEST_GCC_SUPPRESS_WARNING_POP	
+    DOCTEST_CLANG_SUPPRESS_WARNING_POP
+    DOCTEST_GCC_SUPPRESS_WARNING_POP
     DOCTEST_MSVC_SUPPRESS_WARNING_POP
 
     Subcase::operator bool() const { return m_entered; }
@@ -4145,8 +4147,8 @@
         g_infoContexts.push_back(this);
     }
 
-    DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17	
-    DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")	
+    DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17
+    DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
     DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
 
     // destroy cannot be inlined into the destructor because that would mean calling stringify after
@@ -4165,8 +4167,8 @@
         g_infoContexts.pop_back();
     }
 
-    DOCTEST_CLANG_SUPPRESS_WARNING_POP	
-    DOCTEST_GCC_SUPPRESS_WARNING_POP	
+    DOCTEST_CLANG_SUPPRESS_WARNING_POP
+    DOCTEST_GCC_SUPPRESS_WARNING_POP
     DOCTEST_MSVC_SUPPRESS_WARNING_POP
 } // namespace detail
 namespace {
@@ -5117,7 +5119,7 @@
             test_case_start_impl(in);
             xml.ensureTagClosed();
         }
-        
+
         void test_case_reenter(const TestCaseData&) override {}
 
         void test_case_end(const CurrentTestCaseStats& st) override {
@@ -5837,7 +5839,7 @@
             subcasesStack.clear();
             currentSubcaseLevel = 0;
         }
-        
+
         void test_case_reenter(const TestCaseData&) override {
             subcasesStack.clear();
         }
@@ -6462,7 +6464,7 @@
             DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc);
 
             p->timer.start();
-            
+
             bool run_test = true;
 
             do {
@@ -6502,7 +6504,7 @@
                     run_test = false;
                     p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts;
                 }
-                
+
                 if(p->should_reenter && run_test)
                     DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc);
                 if(!p->should_reenter)
diff --git a/third-party/fmt/README.rst.license b/third-party/fmt/README.rst.license
new file mode 100644
index 0000000..3755e29
--- /dev/null
+++ b/third-party/fmt/README.rst.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2012 - present, Victor Zverovich
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/fmt/core.h b/third-party/fmt/core.h
index 338e0c7..a992418 100644
--- a/third-party/fmt/core.h
+++ b/third-party/fmt/core.h
@@ -2,6 +2,7 @@
 //
 // Copyright (c) 2012 - present, Victor Zverovich
 // All rights reserved.
+// SPDX-License-Identifier: MIT
 //
 // For the license information refer to format.h.
 
diff --git a/third-party/fmt/format-inl.h b/third-party/fmt/format-inl.h
index d3970d4..f4e3392 100644
--- a/third-party/fmt/format-inl.h
+++ b/third-party/fmt/format-inl.h
@@ -2,6 +2,7 @@
 //
 // Copyright (c) 2012 - 2016, Victor Zverovich
 // All rights reserved.
+// SPDX-License-Identifier: MIT
 //
 // For the license information refer to format.h.
 
diff --git a/third-party/fmt/format.h b/third-party/fmt/format.h
index 712c6eb..20ed0bb 100644
--- a/third-party/fmt/format.h
+++ b/third-party/fmt/format.h
@@ -3,6 +3,8 @@
 
  Copyright (c) 2012 - present, Victor Zverovich
 
+ SPDX-License-Identifier: MIT
+
  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
diff --git a/third-party/fmt/src/format.cc b/third-party/fmt/src/format.cc
index a64a1f3..10af1f5 100644
--- a/third-party/fmt/src/format.cc
+++ b/third-party/fmt/src/format.cc
@@ -2,6 +2,7 @@
 //
 // Copyright (c) 2012 - 2016, Victor Zverovich
 // All rights reserved.
+// SPDX-License-Identifier: MIT
 //
 // For the license information refer to format.h.
 
diff --git a/third-party/ghc/README.md.license b/third-party/ghc/README.md.license
new file mode 100644
index 0000000..5da8163
--- /dev/null
+++ b/third-party/ghc/README.md.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2018, Steffen Schümann <s.schuemann@pobox.com>
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/ghc/filesystem.hpp b/third-party/ghc/filesystem.hpp
index 1f0fe39..bc00025 100644
--- a/third-party/ghc/filesystem.hpp
+++ b/third-party/ghc/filesystem.hpp
@@ -6,6 +6,8 @@
 //
 // Copyright (c) 2018, Steffen Schümann <s.schuemann@pobox.com>
 //
+// SPDX-License-Identifier: MIT
+//
 // 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
@@ -211,7 +213,7 @@
 template <typename char_type>
 constexpr char_type path_helper_base<char_type>::preferred_separator;
 #endif
-    
+
 // 30.10.8 class path
 class GHC_FS_API_CLASS path
 #if defined(GHC_OS_WINDOWS) && defined(GHC_WIN_WSTRING_STRING_TYPE)
@@ -228,7 +230,7 @@
 #endif
     using string_type = std::basic_string<value_type>;
     using path_helper_base<value_type>::preferred_separator;
-    
+
     // 30.10.10.1 enumeration format
     /// The path format in wich the constructor argument is given.
     enum format {
@@ -1154,7 +1156,7 @@
     return std::error_code(err ? err : errno, std::system_category());
 }
 #endif
-    
+
 #endif  // GHC_EXPAND_IMPL
 
 template <typename Enum>
@@ -1277,7 +1279,7 @@
     codepoint = (state ? (codepoint << 6) | (fragment & 0x3fu) : (0xffu >> category) & fragment);
     return state == S_RJCT ? static_cast<unsigned>(S_RJCT) : static_cast<unsigned>((utf8_state_info[category + 16] >> (state << 2)) & 0xf);
 }
-    
+
 GHC_INLINE bool validUtf8(const std::string& utf8String)
 {
     std::string::const_iterator iter = utf8String.begin();
@@ -1295,9 +1297,9 @@
 }
 
 }  // namespace detail
-    
+
 #endif
-    
+
 namespace detail {
 
 template <class StringType, typename std::enable_if<(sizeof(typename StringType::value_type) == 1)>::type* = nullptr>
diff --git a/third-party/half/ChangeLog.txt.license b/third-party/half/ChangeLog.txt.license
new file mode 100644
index 0000000..771b79e
--- /dev/null
+++ b/third-party/half/ChangeLog.txt.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2012-2017 Christian Rau
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/half/README.txt.license b/third-party/half/README.txt.license
new file mode 100644
index 0000000..771b79e
--- /dev/null
+++ b/third-party/half/README.txt.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) 2012-2017 Christian Rau
+# SPDX-License-Identifier: MIT
+#
diff --git a/third-party/half/half.hpp b/third-party/half/half.hpp
index 0d7459b..4e432b9 100644
--- a/third-party/half/half.hpp
+++ b/third-party/half/half.hpp
@@ -2,16 +2,18 @@
 //

 // Copyright (c) 2012-2017 Christian Rau <rauy@users.sourceforge.net>

 //

-// 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 

+// SPDX-License-Identifier: MIT

+//

+// 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, 

+// 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.

 

 // Version 1.12.0

@@ -195,8 +197,8 @@
 

 

 /// Default rounding mode.

-/// This specifies the rounding mode used for all conversions between [half](\ref half_float::half)s and `float`s as well as 

-/// for the half_cast() if not specifying a rounding mode explicitly. It can be redefined (before including half.hpp) to one 

+/// This specifies the rounding mode used for all conversions between [half](\ref half_float::half)s and `float`s as well as

+/// for the half_cast() if not specifying a rounding mode explicitly. It can be redefined (before including half.hpp) to one

 /// of the standard rounding modes using their respective constants or the equivalent values of `std::float_round_style`:

 ///

 /// `std::float_round_style`         | value | rounding

@@ -207,30 +209,30 @@
 /// `std::round_toward_infinity`     | 2     | toward positive infinity

 /// `std::round_toward_neg_infinity` | 3     | toward negative infinity

 ///

-/// By default this is set to `-1` (`std::round_indeterminate`), which uses truncation (round toward zero, but with overflows 

-/// set to infinity) and is the fastest rounding mode possible. It can even be set to `std::numeric_limits<float>::round_style` 

+/// By default this is set to `-1` (`std::round_indeterminate`), which uses truncation (round toward zero, but with overflows

+/// set to infinity) and is the fastest rounding mode possible. It can even be set to `std::numeric_limits<float>::round_style`

 /// to synchronize the rounding mode with that of the underlying single-precision implementation.

 #ifndef HALF_ROUND_STYLE

 	#define HALF_ROUND_STYLE	-1			// = std::round_indeterminate

 #endif

 

 /// Tie-breaking behaviour for round to nearest.

-/// This specifies if ties in round to nearest should be resolved by rounding to the nearest even value. By default this is 

-/// defined to `0` resulting in the faster but slightly more biased behaviour of rounding away from zero in half-way cases (and 

-/// thus equal to the round() function), but can be redefined to `1` (before including half.hpp) if more IEEE-conformant 

+/// This specifies if ties in round to nearest should be resolved by rounding to the nearest even value. By default this is

+/// defined to `0` resulting in the faster but slightly more biased behaviour of rounding away from zero in half-way cases (and

+/// thus equal to the round() function), but can be redefined to `1` (before including half.hpp) if more IEEE-conformant

 /// behaviour is needed.

 #ifndef HALF_ROUND_TIES_TO_EVEN

 	#define HALF_ROUND_TIES_TO_EVEN	0		// ties away from zero

 #endif

 

 /// Value signaling overflow.

-/// In correspondence with `HUGE_VAL[F|L]` from `<cmath>` this symbol expands to a positive value signaling the overflow of an 

+/// In correspondence with `HUGE_VAL[F|L]` from `<cmath>` this symbol expands to a positive value signaling the overflow of an

 /// operation, in particular it just evaluates to positive infinity.

 #define HUGE_VALH	std::numeric_limits<half_float::half>::infinity()

 

 /// Fast half-precision fma function.

-/// This symbol is only defined if the fma() function generally executes as fast as, or faster than, a separate 

-/// half-precision multiplication followed by an addition. Due to the internal single-precision implementation of all 

+/// This symbol is only defined if the fma() function generally executes as fast as, or faster than, a separate

+/// half-precision multiplication followed by an addition. Due to the internal single-precision implementation of all

 /// arithmetic operations, this is in fact always the case.

 #define FP_FAST_FMAH	1

 

@@ -366,7 +368,7 @@
 		};

 

 		/// SFINAE helper for generic half-precision functions.

-		/// This class template has to be specialized for each valid combination of argument types to provide a corresponding 

+		/// This class template has to be specialized for each valid combination of argument types to provide a corresponding

 		/// `type` member equivalent to \a T.

 		/// \tparam T type to return

 		template<typename T,typename,typename=void,typename=void> struct enable {};

diff --git a/third-party/mapbox/README.md.license b/third-party/mapbox/README.md.license
new file mode 100644
index 0000000..aba8d37
--- /dev/null
+++ b/third-party/mapbox/README.md.license
@@ -0,0 +1,4 @@
+#
+# Copyright (c) MapBox 2016. All rights reserved.
+# SPDX-License-Identifier: BSD-3-Clause
+#
\ No newline at end of file
diff --git a/third-party/mapbox/optional.hpp b/third-party/mapbox/optional.hpp
index d84705c..b9e682a 100644
--- a/third-party/mapbox/optional.hpp
+++ b/third-party/mapbox/optional.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef MAPBOX_UTIL_OPTIONAL_HPP
 #define MAPBOX_UTIL_OPTIONAL_HPP
 
diff --git a/third-party/mapbox/recursive_wrapper.hpp b/third-party/mapbox/recursive_wrapper.hpp
index 4ffcbd7..8a85d30 100644
--- a/third-party/mapbox/recursive_wrapper.hpp
+++ b/third-party/mapbox/recursive_wrapper.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef MAPBOX_UTIL_RECURSIVE_WRAPPER_HPP
 #define MAPBOX_UTIL_RECURSIVE_WRAPPER_HPP
 
diff --git a/third-party/mapbox/variant.hpp b/third-party/mapbox/variant.hpp
index 06a46ab..7110857 100644
--- a/third-party/mapbox/variant.hpp
+++ b/third-party/mapbox/variant.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef MAPBOX_UTIL_VARIANT_HPP
 #define MAPBOX_UTIL_VARIANT_HPP
 
diff --git a/third-party/mapbox/variant_cast.hpp b/third-party/mapbox/variant_cast.hpp
index fe1ab35..0795bcf 100644
--- a/third-party/mapbox/variant_cast.hpp
+++ b/third-party/mapbox/variant_cast.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef VARIANT_CAST_HPP
 #define VARIANT_CAST_HPP
 
diff --git a/third-party/mapbox/variant_io.hpp b/third-party/mapbox/variant_io.hpp
index 1456cc5..7fdb818 100644
--- a/third-party/mapbox/variant_io.hpp
+++ b/third-party/mapbox/variant_io.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef MAPBOX_UTIL_VARIANT_IO_HPP
 #define MAPBOX_UTIL_VARIANT_IO_HPP
 
diff --git a/third-party/mapbox/variant_visitor.hpp b/third-party/mapbox/variant_visitor.hpp
index 54ddba0..a5657d3 100644
--- a/third-party/mapbox/variant_visitor.hpp
+++ b/third-party/mapbox/variant_visitor.hpp
@@ -1,3 +1,8 @@
+//
+// Copyright (c) MapBox All rights reserved.
+// SPDX-License-Identifier: BSD-3-Clause
+//
+
 #ifndef MAPBOX_UTIL_VARIANT_VISITOR_HPP
 #define MAPBOX_UTIL_VARIANT_VISITOR_HPP
 
@@ -15,7 +20,7 @@
     using Fn::operator();
 
     template<typename T>
-    visitor(T&& fn) : Fn(std::forward<T>(fn)) {}    
+    visitor(T&& fn) : Fn(std::forward<T>(fn)) {}
 };
 
 template <typename Fn, typename... Fns>
@@ -36,7 +41,7 @@
     return visitor<typename std::decay<Fns>::type...>
         (std::forward<Fns>(fns)...);
 }
-    
+
 } // namespace util
 } // namespace mapbox
 
diff --git a/third-party/stb/stb_image.h b/third-party/stb/stb_image.h
index f0cc581..5d4d5cf 100644
--- a/third-party/stb/stb_image.h
+++ b/third-party/stb/stb_image.h
@@ -1,3 +1,8 @@
+//
+// Copyright (c) 2017 Sean Barrett
+// SPDX-License-Identifier: MIT
+//
+
 /* stb_image - v2.16 - public domain image loader - http://nothings.org/stb_image.h
                                      no warranty implied; use at your own risk
 
diff --git a/third-party/stb/stb_image_resize.h b/third-party/stb/stb_image_resize.h
index 858cc87..cece8ef 100644
--- a/third-party/stb/stb_image_resize.h
+++ b/third-party/stb/stb_image_resize.h
@@ -1,3 +1,8 @@
+//
+// Copyright (c) 2017 Sean Barrett
+// SPDX-License-Identifier: MIT
+//
+
 /* stb_image_resize - v0.95 - public domain image resizing
    by Jorge L Rodriguez (@VinoBS) - 2014
    http://github.com/nothings/stb
@@ -20,8 +25,8 @@
                                output_pixels, out_w, out_h, 0,
                                num_channels , alpha_chan  , 0)
       stbir_resize_uint8_srgb_edgemode(
-                               input_pixels , in_w , in_h , 0, 
-                               output_pixels, out_w, out_h, 0, 
+                               input_pixels , in_w , in_h , 0,
+                               output_pixels, out_w, out_h, 0,
                                num_channels , alpha_chan  , 0, STBIR_EDGE_CLAMP)
                                                             // WRAP/REFLECT/ZERO
 
@@ -231,7 +236,7 @@
                                      int num_channels);
 
 
-// The following functions interpret image data as gamma-corrected sRGB. 
+// The following functions interpret image data as gamma-corrected sRGB.
 // Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel,
 // or otherwise provide the index of the alpha channel. Flags value
 // of 0 will probably do the right thing if you're not sure what
@@ -304,19 +309,19 @@
 STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
                                                unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context);
 
 STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels  , int input_w , int input_h , int input_stride_in_bytes,
                                                stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context);
 
 STBIRDEF int stbir_resize_float_generic( const float *input_pixels         , int input_w , int input_h , int input_stride_in_bytes,
                                                float *output_pixels        , int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context);
 
 
@@ -348,7 +353,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context);
 
@@ -356,7 +361,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context,
                                    float x_scale, float y_scale,
@@ -366,7 +371,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context,
                                    float s0, float t0, float s1, float t1);
@@ -668,14 +673,14 @@
     0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559,
     0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723,
 };
- 
+
 static stbir_uint8 stbir__linear_to_srgb_uchar(float in)
 {
     static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps
     static const stbir__FP32 minval = { (127-13) << 23 };
     stbir_uint32 tab,bias,scale,t;
     stbir__FP32 f;
- 
+
     // Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively.
     // The tests are carefully written so that NaNs map to 0, same as in the reference
     // implementation.
@@ -683,13 +688,13 @@
         in = minval.f;
     if (in > almostone.f)
         in = almostone.f;
- 
+
     // Do the table lookup and unpack bias, scale
     f.f = in;
     tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20];
     bias = (tab >> 16) << 9;
     scale = tab & 0xffff;
- 
+
     // Grab next-highest mantissa bits and perform linear interpolation
     t = (f.u >> 12) & 0xff;
     return (unsigned char) ((bias + scale*t) >> 16);
@@ -2442,7 +2447,7 @@
         return 0;
 
     result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes,
-                                            output_data, output_stride_in_bytes, 
+                                            output_data, output_stride_in_bytes,
                                             alpha_channel, flags, type,
                                             edge_horizontal, edge_vertical,
                                             colorspace, extra_memory, memory_required);
@@ -2496,7 +2501,7 @@
 STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
                                                unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context)
 {
     return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
@@ -2508,7 +2513,7 @@
 STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels  , int input_w , int input_h , int input_stride_in_bytes,
                                                stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context)
 {
     return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
@@ -2521,7 +2526,7 @@
 STBIRDEF int stbir_resize_float_generic( const float *input_pixels         , int input_w , int input_h , int input_stride_in_bytes,
                                                float *output_pixels        , int output_w, int output_h, int output_stride_in_bytes,
                                          int num_channels, int alpha_channel, int flags,
-                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, 
+                                         stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
                                          void *alloc_context)
 {
     return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
@@ -2535,7 +2540,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context)
 {
@@ -2550,7 +2555,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context,
                                    float x_scale, float y_scale,
@@ -2571,7 +2576,7 @@
                                          void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
                                    stbir_datatype datatype,
                                    int num_channels, int alpha_channel, int flags,
-                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, 
+                                   stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
                                    stbir_filter filter_horizontal,  stbir_filter filter_vertical,
                                    stbir_colorspace space, void *alloc_context,
                                    float s0, float t0, float s1, float t1)
@@ -2588,20 +2593,20 @@
 ------------------------------------------------------------------------------
 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 
+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 
+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 
+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.
 ------------------------------------------------------------------------------
 */
diff --git a/third-party/stb/stb_image_write.h b/third-party/stb/stb_image_write.h
index bcbb16f..bf5bd1d 100644
--- a/third-party/stb/stb_image_write.h
+++ b/third-party/stb/stb_image_write.h
@@ -1,3 +1,8 @@
+//
+// Copyright (c) 2017 Sean Barrett
+// SPDX-License-Identifier: MIT
+//
+
 /* stb_image_write - v1.06 - public domain - http://nothings.org/stb/stb_image_write.h
    writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015
                                      no warranty implied; use at your own risk
@@ -81,7 +86,7 @@
 
    TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
    data, set the global variable 'stbi_write_tga_with_rle' to 0.
-   
+
    JPEG does ignore alpha channels in input data; quality is between 1 and 100.
    Higher quality looks better but results in a bigger image.
    JPEG baseline (no JPEG progressive).
@@ -114,7 +119,7 @@
       Thatcher Ulrich
       github:poppolopoppo
       Patrick Boettcher
-      
+
 LICENSE
 
   See end of file for license information.
@@ -1250,7 +1255,7 @@
                              37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99};
    static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,
                               99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99};
-   static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, 
+   static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,
                                  1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f };
 
    int row, col, i, k;
@@ -1417,20 +1422,20 @@
 ------------------------------------------------------------------------------
 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 
+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 
+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 
+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.
 ------------------------------------------------------------------------------
 */