From aa03741f9186b211a265940ccc2ae6f82d72198f Mon Sep 17 00:00:00 2001 From: BESNIER AURELIEN Date: Wed, 24 Jun 2026 16:16:00 +0200 Subject: [PATCH 01/27] moving references to doc section --- .gitignore | 2 +- doc/Makefile | 102 +++++++++++++++---- doc/index.rst | 1 + doc/make.bat | 244 --------------------------------------------- doc/references.rst | 15 +++ 5 files changed, 102 insertions(+), 262 deletions(-) delete mode 100644 doc/make.bat create mode 100644 doc/references.rst diff --git a/.gitignore b/.gitignore index 69c6493..f8050cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .vscode/ .cache/ build/ -doc/ +doc/_build .idea/ .DS_Store CMakeLists.txt.user diff --git a/doc/Makefile b/doc/Makefile index 8b7a1b7..e99f4d1 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,17 +1,12 @@ -# {# pkglts, sphinx # Makefile for Sphinx documentation # # You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXATUOBUILD = sphinx-autobuild +PAPER = +BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 @@ -20,19 +15,22 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - +.PHONY: help help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" + @echo " rtdhtml Build html using same settings used on ReadtheDocs" + @echo " livehtml Make standalone HTML files and rebuild the documentation when a change is detected. Also includes a livereload enabled web server" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" + @echo " epub3 to make an epub3" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @@ -46,64 +44,112 @@ help: @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" +.PHONY: clean clean: rm -rf $(BUILDDIR)/* + rm -rf generated/* + rm -rf auto_gallery/ +.PHONY: html html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." +.PHONY: rtdhtml +rtdhtml: + $(SPHINXBUILD) -T -j auto -E -W --keep-going -b html -d $(BUILDDIR)/doctrees -D language=en . $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + + +.PHONY: livehtml +livehtml: + # @echo "$(SPHINXATUOBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html" + $(SPHINXATUOBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + +.PHONY: dirhtml dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." +.PHONY: singlehtml singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." +.PHONY: html-noplot +html-noplot: + $(SPHINXBUILD) -D plot_gallery=0 -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: pickle pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." +.PHONY: json json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." +.PHONY: htmlhelp htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." +.PHONY: qthelp qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pkglts.qhcp" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/xarray.qhcp" @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pkglts.qhc" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/xarray.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." +.PHONY: devhelp devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/pkglts" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pkglts" + @echo "# mkdir -p $$HOME/.local/share/devhelp/xarray" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/xarray" @echo "# devhelp" +.PHONY: epub epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @@ -111,28 +157,33 @@ latex: @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." +.PHONY: latexpdf latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +.PHONY: latexpdfja latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +.PHONY: text text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." +.PHONY: man man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." +.PHONY: texinfo texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @@ -140,41 +191,58 @@ texinfo: @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." +.PHONY: info info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." +.PHONY: gettext gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." +.PHONY: changes changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." +.PHONY: linkcheck linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." +.PHONY: doctest doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." +.PHONY: pseudoxml pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." -# #} \ No newline at end of file +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." \ No newline at end of file diff --git a/doc/index.rst b/doc/index.rst index 987fd63..e7e13ef 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -15,6 +15,7 @@ Openalea Spice documentation guide.rst code_example.rst notebook_examples.rst + references.rst .. include:: ../README.md diff --git a/doc/make.bat b/doc/make.bat deleted file mode 100644 index 9220cc0..0000000 --- a/doc/make.bat +++ /dev/null @@ -1,244 +0,0 @@ -REM {# pkglts, sphinx -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pkglts.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pkglts.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end -REM #} diff --git a/doc/references.rst b/doc/references.rst new file mode 100644 index 0000000..dbc3ded --- /dev/null +++ b/doc/references.rst @@ -0,0 +1,15 @@ +References +======================================= + +original photon mapping git: https://github.com/yumcyaWiz/photon_mapping + +* Jensen, Henrik Wann. Realistic image synthesis using photon mapping. AK Peters/crc Press, 2001. +* https://pbr-book.org/3ed-2018/Light_Transport_III_Bidirectional_Methods/Stochastic_Progressive_Photon_Mapping# +* http://www.cs.cmu.edu/afs/cs/academic/class/15462-s12/www/lec_slides/lec18.pdf +* `memoRANDOM` +* `McGuire Computer Graphics Archive` +* `Rendering Resources | Benedikt Bitterli's Portfolio` +* `Jensen, Henrik Wann. "Global illumination using photon maps." Eurographics workshop on Rendering techniques. Springer, Vienna, 1996.` +* Veach, Eric. Robust Monte Carlo methods for light transport simulation. Stanford University, 1998. +* `Christensen, Per H. "Faster photon map global illumination." Journal of graphics tools 4.3 (1999): 1-10.` +* `Hachisuka, Toshiya, Jacopo Pantaleoni, and Henrik Wann Jensen. "A path space extension for robust light transport simulation." ACM Transactions on Graphics (TOG) 31.6 (2012): 1-10.` From 5d706d46cece8b3dde21852eca072d06ac097710 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Wed, 24 Jun 2026 16:22:26 +0200 Subject: [PATCH 02/27] Updating c++ standard to 26 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8f82ac..5edb4a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.20) project(photon_mapping LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD 26) option(BUILD_TESTS "build c++ tests" OFF) option(BUILD_CXX_EXAMPLE "build c++ example" OFF) @@ -41,7 +41,7 @@ add_library(pm INTERFACE src/python/ext_photonmapping_nano.cpp) set_target_properties(pm PROPERTIES - CXX_STANDARD 23 + CXX_STANDARD 26 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS YES ) From b746cc1c0ca43f77cb46a764cf8b488699c3fe50 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Wed, 24 Jun 2026 16:31:18 +0200 Subject: [PATCH 03/27] Update citation url --- CITATION.cff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATION.cff b/CITATION.cff index b6c6e66..ceb0eed 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -31,7 +31,7 @@ authors: family-names: Boudon affiliation: CIRAD orcid: 'https://orcid.org/0000-0001-9636-3102' -repository-code: 'https://github.com/openalea-incubator/spice' +repository-code: 'https://github.com/openalea/spice' keywords: - photon mapping - light simulation From f4ff65b6b7168f01456b6851611653cfec7511db Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 16:30:23 +0200 Subject: [PATCH 04/27] Adding hiprt build function to test --- .gitmodules | 6 +++--- src/cpp/include/scene.hpp | 41 +++++++++++++++++++++++++++++++++++++++ tinyobjloader | 1 + 3 files changed, 45 insertions(+), 3 deletions(-) create mode 160000 tinyobjloader diff --git a/.gitmodules b/.gitmodules index 7124775..e449fe4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "externals/tinyobjloader"] - path = externals/tinyobjloader - url = https://github.com/tinyobjloader/tinyobjloader.git +[submodule "tinyobjloader"] + path = tinyobjloader + url = https://github.com/tinyobjloader/tinyobjloader diff --git a/src/cpp/include/scene.hpp b/src/cpp/include/scene.hpp index a8e40d2..0b4b564 100644 --- a/src/cpp/include/scene.hpp +++ b/src/cpp/include/scene.hpp @@ -932,6 +932,47 @@ class Scene rtcCommitScene(scene); } + void build_hiprt(hiprtContext context) + { + std::cout << "[Scene] Building AMD HIP RT scene..." << std::endl; + + float* d_vertices; + uint32_t* d_indices; + hipMalloc(&d_vertices, vertices.size() * sizeof(float)); + hipMalloc(&d_indices, indices.size() * sizeof(uint32_t)); + hipMemcpy(d_vertices, vertices.data(), vertices.size() * sizeof(float), hipMemcpyHostToDevice); + hipMemcpy(d_indices, indices.data(), indices.size() * sizeof(uint32_t), hipMemcpyHostToDevice); + + hiprtTriangleMeshPrimitive meshGeom = {}; + meshGeom.vertices = d_vertices; + meshGeom.vertexCount = nVertices(); + meshGeom.vertexStride = 3 * sizeof(float); + meshGeom.triangleIndices = d_indices; + meshGeom.triangleCount = nFaces(); + meshGeom.triangleStride = 3 * sizeof(uint32_t); + + hiprtGeometryBuildInput input = {}; + input.type = hiprtGeometryTypeTriangleMesh; + input.primitive.triangleMesh = meshGeom; + + hiprtBuildOptions options = {}; + options.buildFlags = hiprtBuildFlagHintFastTrace; + + hiprtGeometry geometry; + hiprtCreateGeometry(context, &input, &options, &geometry); + + size_t scratchSize; + hiprtGetGeometryBuildTemporaryBufferSize(context, &input, &options, &scratchSize); + + void* d_scratch; + hipMalloc(&d_scratch, scratchSize); + + hiprtBuildGeometry(context, hiprtBuildOperationBuild, &input, &options, d_scratch, nullptr, geometry); + + hipFree(d_scratch); + + } + /** * @fn bool intersect(const Ray &ray, IntersectInfo &info) const * @brief Gets the intersection information of a ray in the scene. diff --git a/tinyobjloader b/tinyobjloader new file mode 160000 index 0000000..45636bd --- /dev/null +++ b/tinyobjloader @@ -0,0 +1 @@ +Subproject commit 45636bdcef1a4fec140346b90c0b50bf0bc3e23b From e0e3194d5fe1be7e44c83bc3a57a2227ce7540fa Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 16:45:13 +0200 Subject: [PATCH 05/27] removing tinyobjloader external folder and installing with conda --- .gitmodules | 3 - CMakeLists.txt | 4 +- conda/environment.yml | 1 + externals/CMakeLists.txt | 4 - externals/tinyobjloader/.clang-format | 7 - externals/tinyobjloader/.drone.yml | 10 - .../.github/ISSUE_TEMPLATE/config.yml | 1 - .../.github/ISSUE_TEMPLATE/issue-report.md | 28 - externals/tinyobjloader/.gitignore | 6 - externals/tinyobjloader/.travis.yml | 56 - externals/tinyobjloader/CMakeLists.txt | 165 - externals/tinyobjloader/LICENSE | 42 - externals/tinyobjloader/README.md | 431 -- externals/tinyobjloader/appveyor.yml | 22 - externals/tinyobjloader/azure-pipelines.yml | 163 - externals/tinyobjloader/build.ninja | 53 - .../tinyobjloader/cmake_uninstall.cmake.in | 21 - externals/tinyobjloader/deps/cpplint.py | 6323 --------------- .../examples/callback_api/Makefile | 2 - .../examples/callback_api/main.cc | 171 - .../examples/obj_sticher/obj_sticher.cc | 163 - .../examples/obj_sticher/obj_writer.cc | 164 - .../examples/obj_sticher/obj_writer.h | 8 - .../examples/obj_sticher/premake4.lua | 38 - .../examples/skin_weight/Makefile | 2 - .../examples/skin_weight/README.md | 7 - .../examples/skin_weight/main.cc | 103 - .../tinyobjloader/examples/viewer/README.md | 45 - .../examples/viewer/premake4.lua | 44 - .../tinyobjloader/examples/viewer/stb_image.h | 6755 ----------------- .../examples/viewer/trackball.cc | 292 - .../tinyobjloader/examples/viewer/trackball.h | 75 - .../tinyobjloader/examples/viewer/viewer.cc | 892 --- .../tinyobjloader/examples/voxelize/Makefile | 2 - .../tinyobjloader/examples/voxelize/README.md | 5 - .../tinyobjloader/examples/voxelize/main.cc | 75 - .../examples/voxelize/voxelizer.h | 764 -- .../tinyobjloader/experimental/README.md | 26 - .../experimental/lfpAlloc/Allocator.hpp | 89 - .../experimental/lfpAlloc/ChunkList.hpp | 116 - .../experimental/lfpAlloc/LICENSE | 21 - .../experimental/lfpAlloc/Pool.hpp | 48 - .../experimental/lfpAlloc/PoolDispatcher.hpp | 79 - .../experimental/lfpAlloc/Utils.hpp | 20 - .../tinyobjloader/experimental/premake5.lua | 94 - .../experimental/tinyobj_loader_opt.h | 1722 ----- .../tinyobjloader/experimental/trackball.cc | 292 - .../tinyobjloader/experimental/trackball.h | 75 - .../tinyobjloader/experimental/viewer.cc | 748 -- externals/tinyobjloader/fuzzer/README.md | 51 - externals/tinyobjloader/fuzzer/afl.tar.gz | Bin 10719 -> 0 bytes .../fuzzer/fuzz_ParseFromString.cc | 26 - .../fuzzer/regression_runner/Makefile | 2 - .../fuzzer/regression_runner/README.md | 11 - ...ized-fuzz_ParseFromString-4877060179886080 | Bin 16 -> 0 bytes externals/tinyobjloader/fuzzer/runner.py | 19 - externals/tinyobjloader/images/rungholt.jpg | Bin 96018 -> 0 bytes externals/tinyobjloader/images/sanmugel.png | Bin 112710 -> 0 bytes externals/tinyobjloader/jni/Android.mk | 12 - externals/tinyobjloader/jni/Application.mk | 2 - externals/tinyobjloader/jni/Makefile | 2 - externals/tinyobjloader/jni/README | 1 - externals/tinyobjloader/loader_example.cc | 437 -- externals/tinyobjloader/mapbox/LICENSE | 15 - externals/tinyobjloader/mapbox/earcut.hpp | 820 -- .../models/catmark_torus_creases0.obj | 101 - .../models/colorspace-issue-184.mtl | 9 - .../models/colorspace-issue-184.obj | 7 - .../tinyobjloader/models/cornell_box.mtl | 24 - .../tinyobjloader/models/cornell_box.obj | 145 - .../models/cornell_box_multimaterial.obj | 146 - .../tinyobjloader/models/cube-vertexcol.obj | 31 - externals/tinyobjloader/models/cube.mtl | 24 - externals/tinyobjloader/models/cube.obj | 32 - .../models/invalid-face-definition.mtl | 24 - .../models/invalid-face-definition.obj | 18 - externals/tinyobjloader/models/issue-138.mtl | 23 - externals/tinyobjloader/models/issue-138.obj | 51 - .../models/issue-140-zero-face-idx.mtl | 2 - .../models/issue-140-zero-face-idx.obj | 17 - .../models/issue-161-inconsistent-f.obj | 37 - .../models/issue-162-smoothing-group.mtl | 23 - .../models/issue-162-smoothing-group.obj | 51 - .../models/issue-235-usemtl-then-o.obj | 21 - externals/tinyobjloader/models/issue-235.mtl | 11 - .../models/issue-244-mtl-searchpaths.obj | 22 - .../models/issue-246-usemtl-whitespace.mtl | 4 - .../models/issue-246-usemtl-whitespace.obj | 17 - .../models/issue-248-texres-texopt.mtl | 25 - .../models/issue-248-texres-texopt.obj | 32 - .../models/issue-295-trianguation-failure.obj | 38 - externals/tinyobjloader/models/issue-92.mtl | 6 - externals/tinyobjloader/models/issue-92.obj | 7 - externals/tinyobjloader/models/issue-95-2.mtl | 5 - externals/tinyobjloader/models/issue-95-2.obj | 7 - externals/tinyobjloader/models/issue-95.mtl | 5 - externals/tinyobjloader/models/issue-95.obj | 7 - .../models/leading-decimal-dot-issue-201.mtl | 5 - .../models/leading-decimal-dot-issue-201.obj | 7 - ...ng-zero-in-exponent-notation-issue-210.mtl | 5 - ...ng-zero-in-exponent-notation-issue-210.obj | 7 - externals/tinyobjloader/models/line-prim.obj | 16 - externals/tinyobjloader/models/map-bump.mtl | 10 - externals/tinyobjloader/models/map-bump.obj | 817 -- .../models/missing_material_file.obj | 145 - .../mtl filename with whitespace issue46.mtl | 4 - .../mtl filename with whitespace issue46.obj | 31 - .../mtllib-multiple-files-issue-112.mtl | 6 - .../mtllib-multiple-files-issue-112.obj | 7 - .../tinyobjloader/models/no_material.obj | 133 - .../tinyobjloader/models/norm-texopt.mtl | 7 - .../tinyobjloader/models/norm-texopt.obj | 7 - .../tinyobjloader/models/pbr-mat-ext.mtl | 19 - .../tinyobjloader/models/pbr-mat-ext.obj | 10 - .../tinyobjloader/models/points-prim.obj | 15 - externals/tinyobjloader/models/refl.mtl | 25 - externals/tinyobjloader/models/refl.obj | 32 - .../tinyobjloader/models/skin-weight.obj | 43 - .../models/smoothing-group-two-squares.obj | 22 - .../tinyobjloader/models/smoothing-normal.mtl | 24 - .../tinyobjloader/models/smoothing-normal.obj | 35 - externals/tinyobjloader/models/test-nan.obj | 145 - .../texture-filename-with-whitespace.mtl | 28 - .../texture-filename-with-whitespace.obj | 31 - .../models/texture-options-issue-85.mtl | 36 - .../models/texture-options-issue-85.obj | 7 - .../models/tr-and-d-issue-43.mtl | 13 - .../models/tr-and-d-issue-43.obj | 817 -- .../tinyobjloader/models/usemtl-issue-104.obj | 30 - .../tinyobjloader/models/usemtl-issue-68.mtl | 9 - .../tinyobjloader/models/usemtl-issue-68.obj | 817 -- externals/tinyobjloader/premake4.lua | 29 - externals/tinyobjloader/python/LICENSE | 21 - externals/tinyobjloader/python/MANIFEST.in | 6 - externals/tinyobjloader/python/Makefile | 7 - externals/tinyobjloader/python/README.md | 90 - externals/tinyobjloader/python/bindings.cc | 163 - externals/tinyobjloader/python/pyproject.toml | 2 - externals/tinyobjloader/python/sample.py | 78 - externals/tinyobjloader/python/setup.py | 130 - .../tinyobjloader/python/tiny_obj_loader.cc | 9 - .../tinyobjloader/tests/LICENSE.acutest.txt | 22 - externals/tinyobjloader/tests/Makefile | 17 - externals/tinyobjloader/tests/README.md | 37 - externals/tinyobjloader/tests/acutest.h | 1514 ---- .../tinyobjloader/tests/assets/issue-244.mtl | 11 - externals/tinyobjloader/tests/config-msvc.py | 52 - externals/tinyobjloader/tests/config-posix.py | 53 - externals/tinyobjloader/tests/issue-177.mtl | 24 - externals/tinyobjloader/tests/issue-177.obj | 31 - externals/tinyobjloader/tests/kuroga.py | 311 - externals/tinyobjloader/tests/tester.cc | 1470 ---- externals/tinyobjloader/tests/vcbuild.bat | 4 - externals/tinyobjloader/tiny_obj_loader.cc | 2 - externals/tinyobjloader/tiny_obj_loader.h | 3319 -------- .../tinyobjloader-config.cmake.in | 9 - externals/tinyobjloader/tinyobjloader.pc.in | 15 - .../tinyobjloader/tools/windows/premake5.exe | Bin 912896 -> 0 bytes externals/tinyobjloader/vcsetup.bat | 1 - src/cpp/include/photon_map.cpp | 2 +- src/cpp/include/scene.hpp | 74 +- tinyobjloader | 1 - 162 files changed, 41 insertions(+), 33475 deletions(-) delete mode 100644 externals/CMakeLists.txt delete mode 100644 externals/tinyobjloader/.clang-format delete mode 100644 externals/tinyobjloader/.drone.yml delete mode 100644 externals/tinyobjloader/.github/ISSUE_TEMPLATE/config.yml delete mode 100644 externals/tinyobjloader/.github/ISSUE_TEMPLATE/issue-report.md delete mode 100644 externals/tinyobjloader/.gitignore delete mode 100644 externals/tinyobjloader/.travis.yml delete mode 100644 externals/tinyobjloader/CMakeLists.txt delete mode 100644 externals/tinyobjloader/LICENSE delete mode 100644 externals/tinyobjloader/README.md delete mode 100644 externals/tinyobjloader/appveyor.yml delete mode 100644 externals/tinyobjloader/azure-pipelines.yml delete mode 100644 externals/tinyobjloader/build.ninja delete mode 100644 externals/tinyobjloader/cmake_uninstall.cmake.in delete mode 100755 externals/tinyobjloader/deps/cpplint.py delete mode 100644 externals/tinyobjloader/examples/callback_api/Makefile delete mode 100644 externals/tinyobjloader/examples/callback_api/main.cc delete mode 100644 externals/tinyobjloader/examples/obj_sticher/obj_sticher.cc delete mode 100644 externals/tinyobjloader/examples/obj_sticher/obj_writer.cc delete mode 100644 externals/tinyobjloader/examples/obj_sticher/obj_writer.h delete mode 100644 externals/tinyobjloader/examples/obj_sticher/premake4.lua delete mode 100644 externals/tinyobjloader/examples/skin_weight/Makefile delete mode 100644 externals/tinyobjloader/examples/skin_weight/README.md delete mode 100644 externals/tinyobjloader/examples/skin_weight/main.cc delete mode 100644 externals/tinyobjloader/examples/viewer/README.md delete mode 100644 externals/tinyobjloader/examples/viewer/premake4.lua delete mode 100644 externals/tinyobjloader/examples/viewer/stb_image.h delete mode 100644 externals/tinyobjloader/examples/viewer/trackball.cc delete mode 100644 externals/tinyobjloader/examples/viewer/trackball.h delete mode 100644 externals/tinyobjloader/examples/viewer/viewer.cc delete mode 100644 externals/tinyobjloader/examples/voxelize/Makefile delete mode 100644 externals/tinyobjloader/examples/voxelize/README.md delete mode 100644 externals/tinyobjloader/examples/voxelize/main.cc delete mode 100644 externals/tinyobjloader/examples/voxelize/voxelizer.h delete mode 100644 externals/tinyobjloader/experimental/README.md delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/Allocator.hpp delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/ChunkList.hpp delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/LICENSE delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/Pool.hpp delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/PoolDispatcher.hpp delete mode 100644 externals/tinyobjloader/experimental/lfpAlloc/Utils.hpp delete mode 100644 externals/tinyobjloader/experimental/premake5.lua delete mode 100644 externals/tinyobjloader/experimental/tinyobj_loader_opt.h delete mode 100644 externals/tinyobjloader/experimental/trackball.cc delete mode 100644 externals/tinyobjloader/experimental/trackball.h delete mode 100644 externals/tinyobjloader/experimental/viewer.cc delete mode 100644 externals/tinyobjloader/fuzzer/README.md delete mode 100644 externals/tinyobjloader/fuzzer/afl.tar.gz delete mode 100644 externals/tinyobjloader/fuzzer/fuzz_ParseFromString.cc delete mode 100644 externals/tinyobjloader/fuzzer/regression_runner/Makefile delete mode 100644 externals/tinyobjloader/fuzzer/regression_runner/README.md delete mode 100644 externals/tinyobjloader/fuzzer/regressions/clusterfuzz-testcase-minimized-fuzz_ParseFromString-4877060179886080 delete mode 100644 externals/tinyobjloader/fuzzer/runner.py delete mode 100644 externals/tinyobjloader/images/rungholt.jpg delete mode 100644 externals/tinyobjloader/images/sanmugel.png delete mode 100644 externals/tinyobjloader/jni/Android.mk delete mode 100644 externals/tinyobjloader/jni/Application.mk delete mode 100644 externals/tinyobjloader/jni/Makefile delete mode 100644 externals/tinyobjloader/jni/README delete mode 100644 externals/tinyobjloader/loader_example.cc delete mode 100644 externals/tinyobjloader/mapbox/LICENSE delete mode 100644 externals/tinyobjloader/mapbox/earcut.hpp delete mode 100644 externals/tinyobjloader/models/catmark_torus_creases0.obj delete mode 100644 externals/tinyobjloader/models/colorspace-issue-184.mtl delete mode 100644 externals/tinyobjloader/models/colorspace-issue-184.obj delete mode 100644 externals/tinyobjloader/models/cornell_box.mtl delete mode 100644 externals/tinyobjloader/models/cornell_box.obj delete mode 100644 externals/tinyobjloader/models/cornell_box_multimaterial.obj delete mode 100644 externals/tinyobjloader/models/cube-vertexcol.obj delete mode 100644 externals/tinyobjloader/models/cube.mtl delete mode 100644 externals/tinyobjloader/models/cube.obj delete mode 100644 externals/tinyobjloader/models/invalid-face-definition.mtl delete mode 100644 externals/tinyobjloader/models/invalid-face-definition.obj delete mode 100644 externals/tinyobjloader/models/issue-138.mtl delete mode 100644 externals/tinyobjloader/models/issue-138.obj delete mode 100644 externals/tinyobjloader/models/issue-140-zero-face-idx.mtl delete mode 100644 externals/tinyobjloader/models/issue-140-zero-face-idx.obj delete mode 100644 externals/tinyobjloader/models/issue-161-inconsistent-f.obj delete mode 100644 externals/tinyobjloader/models/issue-162-smoothing-group.mtl delete mode 100644 externals/tinyobjloader/models/issue-162-smoothing-group.obj delete mode 100644 externals/tinyobjloader/models/issue-235-usemtl-then-o.obj delete mode 100644 externals/tinyobjloader/models/issue-235.mtl delete mode 100644 externals/tinyobjloader/models/issue-244-mtl-searchpaths.obj delete mode 100644 externals/tinyobjloader/models/issue-246-usemtl-whitespace.mtl delete mode 100644 externals/tinyobjloader/models/issue-246-usemtl-whitespace.obj delete mode 100644 externals/tinyobjloader/models/issue-248-texres-texopt.mtl delete mode 100644 externals/tinyobjloader/models/issue-248-texres-texopt.obj delete mode 100644 externals/tinyobjloader/models/issue-295-trianguation-failure.obj delete mode 100644 externals/tinyobjloader/models/issue-92.mtl delete mode 100644 externals/tinyobjloader/models/issue-92.obj delete mode 100644 externals/tinyobjloader/models/issue-95-2.mtl delete mode 100644 externals/tinyobjloader/models/issue-95-2.obj delete mode 100644 externals/tinyobjloader/models/issue-95.mtl delete mode 100644 externals/tinyobjloader/models/issue-95.obj delete mode 100644 externals/tinyobjloader/models/leading-decimal-dot-issue-201.mtl delete mode 100644 externals/tinyobjloader/models/leading-decimal-dot-issue-201.obj delete mode 100644 externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.mtl delete mode 100644 externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.obj delete mode 100644 externals/tinyobjloader/models/line-prim.obj delete mode 100644 externals/tinyobjloader/models/map-bump.mtl delete mode 100644 externals/tinyobjloader/models/map-bump.obj delete mode 100644 externals/tinyobjloader/models/missing_material_file.obj delete mode 100644 externals/tinyobjloader/models/mtl filename with whitespace issue46.mtl delete mode 100644 externals/tinyobjloader/models/mtl filename with whitespace issue46.obj delete mode 100644 externals/tinyobjloader/models/mtllib-multiple-files-issue-112.mtl delete mode 100644 externals/tinyobjloader/models/mtllib-multiple-files-issue-112.obj delete mode 100644 externals/tinyobjloader/models/no_material.obj delete mode 100644 externals/tinyobjloader/models/norm-texopt.mtl delete mode 100644 externals/tinyobjloader/models/norm-texopt.obj delete mode 100644 externals/tinyobjloader/models/pbr-mat-ext.mtl delete mode 100644 externals/tinyobjloader/models/pbr-mat-ext.obj delete mode 100644 externals/tinyobjloader/models/points-prim.obj delete mode 100644 externals/tinyobjloader/models/refl.mtl delete mode 100644 externals/tinyobjloader/models/refl.obj delete mode 100644 externals/tinyobjloader/models/skin-weight.obj delete mode 100644 externals/tinyobjloader/models/smoothing-group-two-squares.obj delete mode 100644 externals/tinyobjloader/models/smoothing-normal.mtl delete mode 100644 externals/tinyobjloader/models/smoothing-normal.obj delete mode 100644 externals/tinyobjloader/models/test-nan.obj delete mode 100644 externals/tinyobjloader/models/texture-filename-with-whitespace.mtl delete mode 100644 externals/tinyobjloader/models/texture-filename-with-whitespace.obj delete mode 100644 externals/tinyobjloader/models/texture-options-issue-85.mtl delete mode 100644 externals/tinyobjloader/models/texture-options-issue-85.obj delete mode 100644 externals/tinyobjloader/models/tr-and-d-issue-43.mtl delete mode 100644 externals/tinyobjloader/models/tr-and-d-issue-43.obj delete mode 100644 externals/tinyobjloader/models/usemtl-issue-104.obj delete mode 100644 externals/tinyobjloader/models/usemtl-issue-68.mtl delete mode 100644 externals/tinyobjloader/models/usemtl-issue-68.obj delete mode 100644 externals/tinyobjloader/premake4.lua delete mode 100644 externals/tinyobjloader/python/LICENSE delete mode 100644 externals/tinyobjloader/python/MANIFEST.in delete mode 100644 externals/tinyobjloader/python/Makefile delete mode 100644 externals/tinyobjloader/python/README.md delete mode 100644 externals/tinyobjloader/python/bindings.cc delete mode 100644 externals/tinyobjloader/python/pyproject.toml delete mode 100644 externals/tinyobjloader/python/sample.py delete mode 100644 externals/tinyobjloader/python/setup.py delete mode 100644 externals/tinyobjloader/python/tiny_obj_loader.cc delete mode 100644 externals/tinyobjloader/tests/LICENSE.acutest.txt delete mode 100644 externals/tinyobjloader/tests/Makefile delete mode 100644 externals/tinyobjloader/tests/README.md delete mode 100644 externals/tinyobjloader/tests/acutest.h delete mode 100644 externals/tinyobjloader/tests/assets/issue-244.mtl delete mode 100644 externals/tinyobjloader/tests/config-msvc.py delete mode 100644 externals/tinyobjloader/tests/config-posix.py delete mode 100644 externals/tinyobjloader/tests/issue-177.mtl delete mode 100644 externals/tinyobjloader/tests/issue-177.obj delete mode 100755 externals/tinyobjloader/tests/kuroga.py delete mode 100644 externals/tinyobjloader/tests/tester.cc delete mode 100644 externals/tinyobjloader/tests/vcbuild.bat delete mode 100644 externals/tinyobjloader/tiny_obj_loader.cc delete mode 100644 externals/tinyobjloader/tiny_obj_loader.h delete mode 100644 externals/tinyobjloader/tinyobjloader-config.cmake.in delete mode 100644 externals/tinyobjloader/tinyobjloader.pc.in delete mode 100644 externals/tinyobjloader/tools/windows/premake5.exe delete mode 100644 externals/tinyobjloader/vcsetup.bat delete mode 160000 tinyobjloader diff --git a/.gitmodules b/.gitmodules index e449fe4..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "tinyobjloader"] - path = tinyobjloader - url = https://github.com/tinyobjloader/tinyobjloader diff --git a/CMakeLists.txt b/CMakeLists.txt index 5edb4a4..d58b292 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,8 +30,8 @@ else() endif() -# externals -add_subdirectory("externals") +# find tinyobjloader +find_package(tinyobjloader CONFIG REQUIRED) add_subdirectory("src/cpp/include") diff --git a/conda/environment.yml b/conda/environment.yml index a43eaee..02e2691 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -6,6 +6,7 @@ dependencies: - openalea.lpy - openalea.plantgl - openalea.widgets + - tinyobjloader - embree - make - cxx-compiler diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt deleted file mode 100644 index 8cacb8c..0000000 --- a/externals/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -# tinyobjloader -add_library(tinyobjloader INTERFACE) -target_compile_definitions(tinyobjloader INTERFACE TINYOBJLOADER_IMPLEMENTATION) -target_include_directories(tinyobjloader SYSTEM INTERFACE tinyobjloader) \ No newline at end of file diff --git a/externals/tinyobjloader/.clang-format b/externals/tinyobjloader/.clang-format deleted file mode 100644 index 74210b0..0000000 --- a/externals/tinyobjloader/.clang-format +++ /dev/null @@ -1,7 +0,0 @@ ---- -BasedOnStyle: Google -IndentWidth: 2 -TabWidth: 2 -UseTab: Never -BreakBeforeBraces: Attach -Standard: Cpp03 diff --git a/externals/tinyobjloader/.drone.yml b/externals/tinyobjloader/.drone.yml deleted file mode 100644 index 971557f..0000000 --- a/externals/tinyobjloader/.drone.yml +++ /dev/null @@ -1,10 +0,0 @@ -image: syoyo/ubu-dev -script: - - curl -L -o premake4 https://github.com/syoyo/orebuildenv/blob/master/build/linux/bin/premake4?raw=true - - chmod +x ./premake4 - - ./premake4 gmake - - make -notify: - email: - recipients: - - syoyo@lighttransport.com diff --git a/externals/tinyobjloader/.github/ISSUE_TEMPLATE/config.yml b/externals/tinyobjloader/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 3ba13e0..0000000 --- a/externals/tinyobjloader/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: false diff --git a/externals/tinyobjloader/.github/ISSUE_TEMPLATE/issue-report.md b/externals/tinyobjloader/.github/ISSUE_TEMPLATE/issue-report.md deleted file mode 100644 index 1361a32..0000000 --- a/externals/tinyobjloader/.github/ISSUE_TEMPLATE/issue-report.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: Issue report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the issue** -A clear and concise description of what the issue is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Compile TinyObjLoader with '...' -2. Load .obj file '...' -3. See error - -Please attach minimal and reproducible files(source codes, .obj/.mtl files, etc) - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Environment** - - TinyObjLoader version - - OS: [e.g. Linux] - - Compiler [e.g. gcc 7.3] - - Other environment [e.g. Python version if you use python binding] diff --git a/externals/tinyobjloader/.gitignore b/externals/tinyobjloader/.gitignore deleted file mode 100644 index 0f8d620..0000000 --- a/externals/tinyobjloader/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -#common folder for building objects -build/ -/python/dist/ -/python/*.egg-info -/python/.eggs -/python/tiny_obj_loader.h diff --git a/externals/tinyobjloader/.travis.yml b/externals/tinyobjloader/.travis.yml deleted file mode 100644 index 12b67f2..0000000 --- a/externals/tinyobjloader/.travis.yml +++ /dev/null @@ -1,56 +0,0 @@ -language: cpp -sudo: required -matrix: - include: - - addons: &1 - apt: - sources: - - george-edison55-precise-backports - - ubuntu-toolchain-r-test - - llvm-toolchain-precise-3.7 - packages: - - cmake - - cmake-data - - ninja-build - - g++-4.9 - - clang-3.7 - compiler: clang - env: DEPLOY_BUILD=1 COMPILER_VERSION=3.7 BUILD_TYPE=Debug - - addons: *1 - compiler: clang - env: COMPILER_VERSION=3.7 BUILD_TYPE=Release - - addons: &2 - apt: - sources: - - george-edison55-precise-backports - - ubuntu-toolchain-r-test - packages: - - cmake - - cmake-data - - ninja-build - - g++-4.9 - compiler: gcc - env: COMPILER_VERSION=4.9 BUILD_TYPE=Debug - - addons: *2 - compiler: gcc - env: COMPILER_VERSION=4.9 BUILD_TYPE=Release - - addons: *1 - compiler: clang - env: COMPILER_VERSION=3.7 BUILD_TYPE=Debug -before_install: -- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade; fi -- if [ -n "$REPORT_COVERAGE" ]; then sudo apt-get update python; fi -- if [ -n "$REPORT_COVERAGE" ]; then sudo apt-get install python-dev libffi-dev libssl-dev; fi -- if [ -n "$REPORT_COVERAGE" ]; then sudo pip install --upgrade pip; fi -- if [ -n "$REPORT_COVERAGE" ]; then CXX=g++ pip install --user requests[security]; fi -- if [ -n "$REPORT_COVERAGE" ]; then CXX=g++ pip install --user cpp-coveralls; fi -script: -- cd tests -- make check -- if [ -n "$REPORT_COVERAGE" ]; then coveralls -b . -r .. -e examples -e tools -e - jni -e python -e images -E ".*CompilerId.*" -E ".*feature_tests.*" ; fi -- cd .. -- rm -rf dist -- mkdir dist -- cp tiny_obj_loader.h dist/ - diff --git a/externals/tinyobjloader/CMakeLists.txt b/externals/tinyobjloader/CMakeLists.txt deleted file mode 100644 index f64b42c..0000000 --- a/externals/tinyobjloader/CMakeLists.txt +++ /dev/null @@ -1,165 +0,0 @@ -#Tiny Object Loader Cmake configuration file. -#This configures the Cmake system with multiple properties, depending -#on the platform and configuration it is set to build in. -project(tinyobjloader) -cmake_minimum_required(VERSION 3.2) -set(TINYOBJLOADER_SOVERSION 2) -set(TINYOBJLOADER_VERSION 2.0.0-rc.9) - -#optional double precision support -option(TINYOBJLOADER_USE_DOUBLE "Build library with double precision instead of single (float)" OFF) - -if(TINYOBJLOADER_USE_DOUBLE) - set(LIBRARY_NAME ${PROJECT_NAME}_double) -else() - set(LIBRARY_NAME ${PROJECT_NAME}) -endif() - - -#Folder Shortcuts -set(TINYOBJLOADEREXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) - -set(tinyobjloader-Source - ${CMAKE_CURRENT_SOURCE_DIR}/tiny_obj_loader.h - ${CMAKE_CURRENT_SOURCE_DIR}/tiny_obj_loader.cc - ) - -set(tinyobjloader-Example-Source - ${CMAKE_CURRENT_SOURCE_DIR}/loader_example.cc - ) - -set(tinyobjloader-examples-objsticher - ${TINYOBJLOADEREXAMPLES_DIR}/obj_sticher/obj_writer.h - ${TINYOBJLOADEREXAMPLES_DIR}/obj_sticher/obj_writer.cc - ${TINYOBJLOADEREXAMPLES_DIR}/obj_sticher/obj_sticher.cc - ) - -#Install destinations -include(GNUInstallDirs) - -set(TINYOBJLOADER_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake) -set(TINYOBJLOADER_DOC_DIR ${CMAKE_INSTALL_DOCDIR}) -set(TINYOBJLOADER_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) -set(TINYOBJLOADER_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) -set(TINYOBJLOADER_PKGCONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -set(TINYOBJLOADER_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) - -option(TINYOBJLOADER_BUILD_TEST_LOADER "Build Example Loader Application" OFF) - -add_library(${LIBRARY_NAME} ${tinyobjloader-Source}) - -if(BUILD_SHARED_LIBS) - set_target_properties(${LIBRARY_NAME} PROPERTIES - SOVERSION ${TINYOBJLOADER_SOVERSION} - WINDOWS_EXPORT_ALL_SYMBOLS ON - ) -endif() - -if(TINYOBJLOADER_USE_DOUBLE) - target_compile_definitions(${LIBRARY_NAME} PUBLIC TINYOBJLOADER_USE_DOUBLE) -endif() - -set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION ${TINYOBJLOADER_VERSION}) - -target_include_directories(${LIBRARY_NAME} INTERFACE - $ - $ - ) - -export(TARGETS ${LIBRARY_NAME} FILE ${PROJECT_NAME}-targets.cmake) - -if(TINYOBJLOADER_BUILD_TEST_LOADER) - add_executable(test_loader ${tinyobjloader-Example-Source}) - target_link_libraries(test_loader ${LIBRARY_NAME}) -endif() - -option(TINYOBJLOADER_BUILD_OBJ_STICHER "Build OBJ Sticher Application" OFF) -if(TINYOBJLOADER_BUILD_OBJ_STICHER) - add_executable(obj_sticher ${tinyobjloader-examples-objsticher}) - target_link_libraries(obj_sticher ${LIBRARY_NAME}) - - install(TARGETS - obj_sticher - DESTINATION - ${TINYOBJLOADER_RUNTIME_DIR} - ) -endif() - -#Write CMake package config files -include(CMakePackageConfigHelpers) - -configure_package_config_file( - ${PROJECT_NAME}-config.cmake.in - ${PROJECT_NAME}-config.cmake - INSTALL_DESTINATION - ${TINYOBJLOADER_CMAKE_DIR} - PATH_VARS - TINYOBJLOADER_INCLUDE_DIR - TINYOBJLOADER_LIBRARY_DIR - NO_CHECK_REQUIRED_COMPONENTS_MACRO - ) - -write_basic_package_version_file(${PROJECT_NAME}-config-version.cmake - VERSION - ${TINYOBJLOADER_VERSION} - COMPATIBILITY - SameMajorVersion - ) - -#pkg-config file -configure_file(${PROJECT_NAME}.pc.in ${LIBRARY_NAME}.pc @ONLY) - -if(DEFINED ENV{LIB_FUZZING_ENGINE}) - add_executable(fuzz_ParseFromString fuzzer/fuzz_ParseFromString.cc) - target_link_libraries(fuzz_ParseFromString ${LIBRARY_NAME} $ENV{LIB_FUZZING_ENGINE}) -endif() - -#Installation -install(TARGETS - ${LIBRARY_NAME} - EXPORT ${PROJECT_NAME}-targets - DESTINATION - ${TINYOBJLOADER_LIBRARY_DIR} - PUBLIC_HEADER DESTINATION - ${TINYOBJLOADER_INCLUDE_DIR} - RUNTIME DESTINATION - ${TINYOBJLOADER_RUNTIME_DIR} - ) -install(EXPORT - ${PROJECT_NAME}-targets - NAMESPACE - tinyobjloader:: - DESTINATION - ${TINYOBJLOADER_CMAKE_DIR} - ) -install(FILES - tiny_obj_loader.h - DESTINATION - ${TINYOBJLOADER_INCLUDE_DIR} - ) -install(FILES - LICENSE - DESTINATION - ${TINYOBJLOADER_DOC_DIR} - ) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" - DESTINATION - ${TINYOBJLOADER_CMAKE_DIR} - ) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}.pc" - DESTINATION - ${TINYOBJLOADER_PKGCONFIG_DIR} - ) - -if(NOT TARGET uninstall) - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake IMMEDIATE @ONLY) - - add_custom_target( - uninstall COMMAND ${CMAKE_COMMAND} -P - ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) -endif() diff --git a/externals/tinyobjloader/LICENSE b/externals/tinyobjloader/LICENSE deleted file mode 100644 index e9fbe44..0000000 --- a/externals/tinyobjloader/LICENSE +++ /dev/null @@ -1,42 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2019 Syoyo Fujita and many contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ----------------------------------- - -mapbox/earcut.hpp - -ISC License - -Copyright (c) 2015, Mapbox - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - diff --git a/externals/tinyobjloader/README.md b/externals/tinyobjloader/README.md deleted file mode 100644 index 143e042..0000000 --- a/externals/tinyobjloader/README.md +++ /dev/null @@ -1,431 +0,0 @@ -# tinyobjloader - -[![Build Status](https://travis-ci.org/tinyobjloader/tinyobjloader.svg?branch=master)](https://travis-ci.org/tinyobjloader/tinyobjloader) - -[![AZ Build Status](https://dev.azure.com/tinyobjloader/tinyobjloader/_apis/build/status/tinyobjloader.tinyobjloader?branchName=master)](https://dev.azure.com/tinyobjloader/tinyobjloader/_build/latest?definitionId=1&branchName=master) - -[![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/m6wfkvket7gth8wn/branch/master?svg=true)](https://ci.appveyor.com/project/syoyo/tinyobjloader-6e4qf/branch/master) - -[![Coverage Status](https://coveralls.io/repos/github/syoyo/tinyobjloader/badge.svg?branch=master)](https://coveralls.io/github/syoyo/tinyobjloader?branch=master) - -[![AUR version](https://img.shields.io/aur/version/tinyobjloader?logo=arch-linux)](https://aur.archlinux.org/packages/tinyobjloader) - -Tiny but powerful single file wavefront obj loader written in C++03. No dependency except for C++ STL. It can parse over 10M polygons with moderate memory and time. - -`tinyobjloader` is good for embedding .obj loader to your (global illumination) renderer ;-) - -If you are looking for C89 version, please see https://github.com/syoyo/tinyobjloader-c . - -Version notice --------------- - -We recommend to use `master`(`main`) branch. Its v2.0 release candidate. Most features are now nearly robust and stable(Remaining task for release v2.0 is polishing C++ and Python API). - -We have released new version v1.0.0 on 20 Aug, 2016. -Old version is available as `v0.9.x` branch https://github.com/syoyo/tinyobjloader/tree/v0.9.x - -## What's new - -* 29 Jul, 2021 : Added Mapbox's earcut for robust triangulation. Also fixes triangulation bug. -* 19 Feb, 2020 : The repository has been moved to https://github.com/tinyobjloader/tinyobjloader ! -* 18 May, 2019 : Python binding!(See `python` folder. Also see https://pypi.org/project/tinyobjloader/) -* 14 Apr, 2019 : Bump version v2.0.0 rc0. New C++ API and python bindings!(1.x API still exists for backward compatibility) -* 20 Aug, 2016 : Bump version v1.0.0. New data structure and API! - -## Requirements - -* C++03 compiler - -### Old version - -Previous old version is available in `v0.9.x` branch. - -## Example - -![Rungholt](images/rungholt.jpg) - -tinyobjloader can successfully load 6M triangles Rungholt scene. -http://casual-effects.com/data/index.html - -![](images/sanmugel.png) - -* [examples/viewer/](examples/viewer) OpenGL .obj viewer -* [examples/callback_api/](examples/callback_api/) Callback API example -* [examples/voxelize/](examples/voxelize/) Voxelizer example - -## Use case - -TinyObjLoader is successfully used in ... - -### New version(v1.0.x) - -* Double precision support through `TINYOBJLOADER_USE_DOUBLE` thanks to noma -* Loading models in Vulkan Tutorial https://vulkan-tutorial.com/Loading_models -* .obj viewer with Metal https://github.com/middlefeng/NuoModelViewer/tree/master -* Vulkan Cookbook https://github.com/PacktPublishing/Vulkan-Cookbook -* cudabox: CUDA Solid Voxelizer Engine https://github.com/gaspardzoss/cudavox -* Drake: A planning, control, and analysis toolbox for nonlinear dynamical systems https://github.com/RobotLocomotion/drake -* VFPR - a Vulkan Forward Plus Renderer : https://github.com/WindyDarian/Vulkan-Forward-Plus-Renderer -* glslViewer: https://github.com/patriciogonzalezvivo/glslViewer -* Lighthouse2: https://github.com/jbikker/lighthouse2 -* rayrender(an open source R package for raytracing scenes in created in R): https://github.com/tylermorganwall/rayrender -* liblava - A modern C++ and easy-to-use framework for the Vulkan API. [MIT]: https://github.com/liblava/liblava -* rtxON - Simple Vulkan raytracing tutorials https://github.com/iOrange/rtxON -* metal-ray-tracer - Writing ray-tracer using Metal Performance Shaders https://github.com/sergeyreznik/metal-ray-tracer https://sergeyreznik.github.io/metal-ray-tracer/index.html -* Your project here! (Letting us know via github issue is welcome!) - -### Old version(v0.9.x) - -* bullet3 https://github.com/erwincoumans/bullet3 -* pbrt-v2 https://github.com/mmp/pbrt-v2 -* OpenGL game engine development http://swarminglogic.com/jotting/2013_10_gamedev01 -* mallie https://lighttransport.github.io/mallie -* IBLBaker (Image Based Lighting Baker). http://www.derkreature.com/iblbaker/ -* Stanford CS148 http://web.stanford.edu/class/cs148/assignments/assignment3.pdf -* Awesome Bump http://awesomebump.besaba.com/about/ -* sdlgl3-wavefront OpenGL .obj viewer https://github.com/chrisliebert/sdlgl3-wavefront -* pbrt-v3 https://github.com/mmp/pbrt-v3 -* cocos2d-x https://github.com/cocos2d/cocos2d-x/ -* Android Vulkan demo https://github.com/SaschaWillems/Vulkan -* voxelizer https://github.com/karimnaaji/voxelizer -* Probulator https://github.com/kayru/Probulator -* OptiX Prime baking https://github.com/nvpro-samples/optix_prime_baking -* FireRays SDK https://github.com/GPUOpen-LibrariesAndSDKs/FireRays_SDK -* parg, tiny C library of various graphics utilities and GL demos https://github.com/prideout/parg -* Opengl unit of ChronoEngine https://github.com/projectchrono/chrono-opengl -* Point Based Global Illumination on modern GPU https://pbgi.wordpress.com/code-source/ -* Fast OBJ file importing and parsing in CUDA http://researchonline.jcu.edu.au/42515/1/2015.CVM.OBJCUDA.pdf -* Sorted Shading for Uni-Directional Pathtracing by Joshua Bainbridge https://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc15/02Josh/joshua_bainbridge_thesis.pdf -* GeeXLab http://www.geeks3d.com/hacklab/20160531/geexlab-0-12-0-0-released-for-windows/ - - -## Features - -* Group(parse multiple group name) -* Vertex - * Vertex color(as an extension: https://blender.stackexchange.com/questions/31997/how-can-i-get-vertex-painted-obj-files-to-import-into-blender) -* Texcoord -* Normal -* Material - * Unknown material attributes are returned as key-value(value is string) map. -* Crease tag('t'). This is OpenSubdiv specific(not in wavefront .obj specification) -* PBR material extension for .MTL. Its proposed here: http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr -* Callback API for custom loading. -* Double precision support(for HPC application). -* Smoothing group -* Python binding : See `python` folder. - * Precompiled binary(manylinux1-x86_64 only) is hosted at pypi https://pypi.org/project/tinyobjloader/) - -### Primitives - -* [x] face(`f`) -* [x] lines(`l`) -* [ ] points(`p`) -* [ ] curve -* [ ] 2D curve -* [ ] surface. -* [ ] Free form curve/surfaces - - -## TODO - -* [ ] Fix obj_sticker example. -* [ ] More unit test codes. -* [x] Texture options - -## License - -TinyObjLoader is licensed under MIT license. - -### Third party licenses. - -* pybind11 : BSD-style license. -* mapbox earcut.hpp: ISC License. - -## Usage - -### Installation - -One option is to simply copy the header file into your project and to make sure that `TINYOBJLOADER_IMPLEMENTATION` is defined exactly once. - -### Building tinyobjloader - Using vcpkg(not recommended though) - -Alghouth it is not a recommended way, you can download and install tinyobjloader using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: - - git clone https://github.com/Microsoft/vcpkg.git - cd vcpkg - ./bootstrap-vcpkg.sh - ./vcpkg integrate install - ./vcpkg install tinyobjloader - -The tinyobjloader port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. - -### Data format - -`attrib_t` contains single and linear array of vertex data(position, normal and texcoord). - -``` -attrib_t::vertices => 3 floats per vertex - - v[0] v[1] v[2] v[3] v[n-1] - +-----------+-----------+-----------+-----------+ +-----------+ - | x | y | z | x | y | z | x | y | z | x | y | z | .... | x | y | z | - +-----------+-----------+-----------+-----------+ +-----------+ - -attrib_t::normals => 3 floats per vertex - - n[0] n[1] n[2] n[3] n[n-1] - +-----------+-----------+-----------+-----------+ +-----------+ - | x | y | z | x | y | z | x | y | z | x | y | z | .... | x | y | z | - +-----------+-----------+-----------+-----------+ +-----------+ - -attrib_t::texcoords => 2 floats per vertex - - t[0] t[1] t[2] t[3] t[n-1] - +-----------+-----------+-----------+-----------+ +-----------+ - | u | v | u | v | u | v | u | v | .... | u | v | - +-----------+-----------+-----------+-----------+ +-----------+ - -attrib_t::colors => 3 floats per vertex(vertex color. optional) - - c[0] c[1] c[2] c[3] c[n-1] - +-----------+-----------+-----------+-----------+ +-----------+ - | x | y | z | x | y | z | x | y | z | x | y | z | .... | x | y | z | - +-----------+-----------+-----------+-----------+ +-----------+ - -``` - -Each `shape_t::mesh_t` does not contain vertex data but contains array index to `attrib_t`. -See `loader_example.cc` for more details. - - -``` - -mesh_t::indices => array of vertex indices. - - +----+----+----+----+----+----+----+----+----+----+ +--------+ - | i0 | i1 | i2 | i3 | i4 | i5 | i6 | i7 | i8 | i9 | ... | i(n-1) | - +----+----+----+----+----+----+----+----+----+----+ +--------+ - -Each index has an array index to attrib_t::vertices, attrib_t::normals and attrib_t::texcoords. - -mesh_t::num_face_vertices => array of the number of vertices per face(e.g. 3 = triangle, 4 = quad , 5 or more = N-gons). - - - +---+---+---+ +---+ - | 3 | 4 | 3 | ...... | 3 | - +---+---+---+ +---+ - | | | | - | | | +-----------------------------------------+ - | | | | - | | +------------------------------+ | - | | | | - | +------------------+ | | - | | | | - |/ |/ |/ |/ - - mesh_t::indices - - | face[0] | face[1] | face[2] | | face[n-1] | - +----+----+----+----+----+----+----+----+----+----+ +--------+--------+--------+ - | i0 | i1 | i2 | i3 | i4 | i5 | i6 | i7 | i8 | i9 | ... | i(n-3) | i(n-2) | i(n-1) | - +----+----+----+----+----+----+----+----+----+----+ +--------+--------+--------+ - -``` - -Note that when `triangulate` flag is true in `tinyobj::LoadObj()` argument, `num_face_vertices` are all filled with 3(triangle). - -### float data type - -TinyObjLoader now use `real_t` for floating point data type. -Default is `float(32bit)`. -You can enable `double(64bit)` precision by using `TINYOBJLOADER_USE_DOUBLE` define. - -### Robust triangulation - -When you enable `triangulation`(default is enabled), -TinyObjLoader triangulate polygons(faces with 4 or more vertices). - -Built-in trinagulation code may not work well in some polygon shape. - -You can define `TINYOBJLOADER_USE_MAPBOX_EARCUT` for robust triangulation using `mapbox/earcut.hpp`. -This requires C++11 compiler though. And you need to copy `mapbox/earcut.hpp` to your project. -If you have your own `mapbox/earcut.hpp` file incuded in your project, you can define `TINYOBJLOADER_DONOT_INCLUDE_MAPBOX_EARCUT` so that `mapbox/earcut.hpp` is not included inside of `tiny_obj_loader.h`. - -#### Example code (Deprecated API) - -```c++ -#define TINYOBJLOADER_IMPLEMENTATION // define this in only *one* .cc -// Optional. define TINYOBJLOADER_USE_MAPBOX_EARCUT gives robust trinagulation. Requires C++11 -//#define TINYOBJLOADER_USE_MAPBOX_EARCUT -#include "tiny_obj_loader.h" - -std::string inputfile = "cornell_box.obj"; -tinyobj::attrib_t attrib; -std::vector shapes; -std::vector materials; - -std::string warn; -std::string err; - -bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, inputfile.c_str()); - -if (!warn.empty()) { - std::cout << warn << std::endl; -} - -if (!err.empty()) { - std::cerr << err << std::endl; -} - -if (!ret) { - exit(1); -} - -// Loop over shapes -for (size_t s = 0; s < shapes.size(); s++) { - // Loop over faces(polygon) - size_t index_offset = 0; - for (size_t f = 0; f < shapes[s].mesh.num_face_vertices.size(); f++) { - size_t fv = size_t(shapes[s].mesh.num_face_vertices[f]); - - // Loop over vertices in the face. - for (size_t v = 0; v < fv; v++) { - // access to vertex - tinyobj::index_t idx = shapes[s].mesh.indices[index_offset + v]; - - tinyobj::real_t vx = attrib.vertices[3*size_t(idx.vertex_index)+0]; - tinyobj::real_t vy = attrib.vertices[3*size_t(idx.vertex_index)+1]; - tinyobj::real_t vz = attrib.vertices[3*size_t(idx.vertex_index)+2]; - - // Check if `normal_index` is zero or positive. negative = no normal data - if (idx.normal_index >= 0) { - tinyobj::real_t nx = attrib.normals[3*size_t(idx.normal_index)+0]; - tinyobj::real_t ny = attrib.normals[3*size_t(idx.normal_index)+1]; - tinyobj::real_t nz = attrib.normals[3*size_t(idx.normal_index)+2]; - } - - // Check if `texcoord_index` is zero or positive. negative = no texcoord data - if (idx.texcoord_index >= 0) { - tinyobj::real_t tx = attrib.texcoords[2*size_t(idx.texcoord_index)+0]; - tinyobj::real_t ty = attrib.texcoords[2*size_t(idx.texcoord_index)+1]; - } - // Optional: vertex colors - // tinyobj::real_t red = attrib.colors[3*size_t(idx.vertex_index)+0]; - // tinyobj::real_t green = attrib.colors[3*size_t(idx.vertex_index)+1]; - // tinyobj::real_t blue = attrib.colors[3*size_t(idx.vertex_index)+2]; - } - index_offset += fv; - - // per-face material - shapes[s].mesh.material_ids[f]; - } -} - -``` - -#### Example code (New Object Oriented API) - -```c++ -#define TINYOBJLOADER_IMPLEMENTATION // define this in only *one* .cc -// Optional. define TINYOBJLOADER_USE_MAPBOX_EARCUT gives robust trinagulation. Requires C++11 -//#define TINYOBJLOADER_USE_MAPBOX_EARCUT -#include "tiny_obj_loader.h" - - -std::string inputfile = "cornell_box.obj"; -tinyobj::ObjReaderConfig reader_config; -reader_config.mtl_search_path = "./"; // Path to material files - -tinyobj::ObjReader reader; - -if (!reader.ParseFromFile(inputfile, reader_config)) { - if (!reader.Error().empty()) { - std::cerr << "TinyObjReader: " << reader.Error(); - } - exit(1); -} - -if (!reader.Warning().empty()) { - std::cout << "TinyObjReader: " << reader.Warning(); -} - -auto& attrib = reader.GetAttrib(); -auto& shapes = reader.GetShapes(); -auto& materials = reader.GetMaterials(); - -// Loop over shapes -for (size_t s = 0; s < shapes.size(); s++) { - // Loop over faces(polygon) - size_t index_offset = 0; - for (size_t f = 0; f < shapes[s].mesh.num_face_vertices.size(); f++) { - size_t fv = size_t(shapes[s].mesh.num_face_vertices[f]); - - // Loop over vertices in the face. - for (size_t v = 0; v < fv; v++) { - // access to vertex - tinyobj::index_t idx = shapes[s].mesh.indices[index_offset + v]; - tinyobj::real_t vx = attrib.vertices[3*size_t(idx.vertex_index)+0]; - tinyobj::real_t vy = attrib.vertices[3*size_t(idx.vertex_index)+1]; - tinyobj::real_t vz = attrib.vertices[3*size_t(idx.vertex_index)+2]; - - // Check if `normal_index` is zero or positive. negative = no normal data - if (idx.normal_index >= 0) { - tinyobj::real_t nx = attrib.normals[3*size_t(idx.normal_index)+0]; - tinyobj::real_t ny = attrib.normals[3*size_t(idx.normal_index)+1]; - tinyobj::real_t nz = attrib.normals[3*size_t(idx.normal_index)+2]; - } - - // Check if `texcoord_index` is zero or positive. negative = no texcoord data - if (idx.texcoord_index >= 0) { - tinyobj::real_t tx = attrib.texcoords[2*size_t(idx.texcoord_index)+0]; - tinyobj::real_t ty = attrib.texcoords[2*size_t(idx.texcoord_index)+1]; - } - - // Optional: vertex colors - // tinyobj::real_t red = attrib.colors[3*size_t(idx.vertex_index)+0]; - // tinyobj::real_t green = attrib.colors[3*size_t(idx.vertex_index)+1]; - // tinyobj::real_t blue = attrib.colors[3*size_t(idx.vertex_index)+2]; - } - index_offset += fv; - - // per-face material - shapes[s].mesh.material_ids[f]; - } -} - -``` - - - -## Optimized loader - -Optimized multi-threaded .obj loader is available at `experimental/` directory. -If you want absolute performance to load .obj data, this optimized loader will fit your purpose. -Note that the optimized loader uses C++11 thread and it does less error checks but may work most .obj data. - -Here is some benchmark result. Time are measured on MacBook 12(Early 2016, Core m5 1.2GHz). - -* Rungholt scene(6M triangles) - * old version(v0.9.x): 15500 msecs. - * baseline(v1.0.x): 6800 msecs(2.3x faster than old version) - * optimised: 1500 msecs(10x faster than old version, 4.5x faster than baseline) - -## Python binding - -### CI + PyPI upload - -cibuildwheels + twine upload for each git tagging event is handled in Azure Pipeline. - -#### How to bump version(For developer) - -* Bump version in CMakeLists.txt -* Update version in `python/setup.py` -* Commit and push `master`. Confirm C.I. build is OK. -* Create tag starting with `v`(e.g. `v2.1.0`) -* `git push --tags` - * cibuildwheels + pypi upload(through twine) will be automatically triggered in Azure Pipeline. - -## Tests - -Unit tests are provided in `tests` directory. See `tests/README.md` for details. diff --git a/externals/tinyobjloader/appveyor.yml b/externals/tinyobjloader/appveyor.yml deleted file mode 100644 index 93f691c..0000000 --- a/externals/tinyobjloader/appveyor.yml +++ /dev/null @@ -1,22 +0,0 @@ -version: 1.0.{build} - -platform: x64 - -install: - ####################################################################################### - # All external dependencies are installed in C:\projects\deps - ####################################################################################### - - mkdir C:\projects\deps - - ####################################################################################### - # Install Ninja - ####################################################################################### - - set NINJA_URL="https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-win.zip" - - appveyor DownloadFile %NINJA_URL% -FileName ninja.zip - - 7z x ninja.zip -oC:\projects\deps\ninja > nul - - set PATH=C:\projects\deps\ninja;%PATH% - - ninja --version - -build_script: - - cd tests - - vcbuild.bat diff --git a/externals/tinyobjloader/azure-pipelines.yml b/externals/tinyobjloader/azure-pipelines.yml deleted file mode 100644 index a71c43b..0000000 --- a/externals/tinyobjloader/azure-pipelines.yml +++ /dev/null @@ -1,163 +0,0 @@ -variables: - # https://cibuildwheel.readthedocs.io/en/stable/cpp_standards/ - # python2.7 + C++11(pybind11) is not available. - CIBW_SKIP: "cp27-win* pp27-win32 pp36-win32" - CIBW_BEFORE_BUILD: "pip install pybind11" - #CIBW_BEFORE_BUILD_MACOS: "pip install -U pip setuptools" - #CIBW_BEFORE_BUILD_LINUX: "pip install -U pip setuptools" - #CIBW_TEST_COMMAND: TODO "python -c \"import tinyobjloader; tinyobjloader.test()\"" - CIBW_BUILD_VERBOSITY: "2" - #CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 - #CIBW_MANYLINUX_I686_IMAGE: manylinux2014 - -jobs: - - job: unit_linux - pool: { vmImage: "ubuntu-latest" } - steps: - - script: | - cd tests - make && ./tester - displayName: Run unit tests - - - job: python_format - pool: { vmImage: "ubuntu-latest" } - steps: - - task: UsePythonVersion@0 - - script: | - pip install black==19.10b0 - black --check python/ - displayName: Check Python code format - - - job: linux - pool: {vmImage: "Ubuntu-16.04"} - steps: - - task: UsePythonVersion@0 - - bash: | - python3 -m pip install --upgrade pip - pip3 install cibuildwheel twine - # Make the header files available to the build. - cp *.h python - mkdir python/mapbox - cp mapbox/earcut.hpp python/mapbox/ - cd python - - # Source dist - python3 setup.py sdist - ls -la dist/* - - # build binary wheels - cibuildwheel --output-dir wheelhouse . - - - task: CopyFiles@2 - inputs: - contents: 'python/wheelhouse/**' - targetFolder: $(Build.ArtifactStagingDirectory) - - - task: CopyFiles@2 - inputs: - contents: 'python/dist/**' - targetFolder: $(Build.ArtifactStagingDirectory) - - - task: PublishBuildArtifacts@1 - inputs: - path: $(Build.ArtifactStagingDirectory) - artifactName: tinyobjDeployLinux - - - job: macos - pool: {vmImage: 'macOS-10.15'} - variables: - # Support C++11: https://github.com/joerick/cibuildwheel/pull/156 - MACOSX_DEPLOYMENT_TARGET: 10.9 - steps: - - task: UsePythonVersion@0 - - bash: | - python3 -m pip install --upgrade pip - pip3 install cibuildwheel - # Make the header files available to the build. - cp *.h python - mkdir python/mapbox - cp mapbox/earcut.hpp python/mapbox/earcut.hpp - cd python - cibuildwheel --output-dir wheelhouse . - - task: CopyFiles@2 - inputs: - contents: 'python/wheelhouse/*.whl' - targetFolder: $(Build.ArtifactStagingDirectory) - - task: PublishBuildArtifacts@1 - inputs: - path: $(Build.ArtifactStagingDirectory) - artifactName: tinyobjDeployMacOS - - - job: windows - pool: {vmImage: 'windows-2019'} - steps: - - task: UsePythonVersion@0 - - bash: | - python -m pip install --upgrade pip - pip install cibuildwheel - # Make the header files available to the build. - cp *.h python - mkdir python/mapbox - cp mapbox/earcut.hpp python/mapbox/ - cd python - cibuildwheel --output-dir wheelhouse . - - task: CopyFiles@2 - inputs: - contents: 'python/wheelhouse/*.whl' - targetFolder: $(Build.ArtifactStagingDirectory) - - task: PublishBuildArtifacts@1 - inputs: - path: $(Build.ArtifactStagingDirectory) - artifactName: tinyobjDeployWindows - - - job: deployPyPI - # Based on vispy: https://github.com/vispy/vispy/blob/master/azure-pipelines.yml - pool: {vmImage: 'Ubuntu-16.04'} - condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v')) - dependsOn: - - linux - - macos - - windows - steps: - - task: UsePythonVersion@0 - - # TODO(syoyo): Use buildType: specific to download multiple artifacts at once? - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: 'tinyobjDeployLinux' - downloadPath: $(Pipeline.Workspace) - - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: 'tinyobjDeployMacOS' - downloadPath: $(Pipeline.Workspace) - - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: 'tinyobjDeployWindows' - downloadPath: $(Pipeline.Workspace) - - # Publish to PyPI through twine - - bash: | - cd $(Pipeline.Workspace) - find . - python -m pip install --upgrade pip - pip install twine - echo tinyobjDeployLinux/python/dist/* - echo tinyobjDeployLinux/python/wheelhouse/* tinyobjDeployMacOS/python/wheelhouse/* tinyobjDeployWindows/python/wheelhouse/* - twine upload -u "__token__" --skip-existing tinyobjDeployLinux/python/dist/* tinyobjDeployLinux/python/wheelhouse/* tinyobjDeployMacOS/python/wheelhouse/* tinyobjDeployWindows/python/wheelhouse/* - env: - TWINE_PASSWORD: $(pypiToken2) - -trigger: - branches: - include: - - '*' - tags: - include: - - 'v*' - -pr: - branches: - include: - - "*" diff --git a/externals/tinyobjloader/build.ninja b/externals/tinyobjloader/build.ninja deleted file mode 100644 index 77801bb..0000000 --- a/externals/tinyobjloader/build.ninja +++ /dev/null @@ -1,53 +0,0 @@ -ninja_required_version = 1.4 - -gnubuilddir = build -gnudefines = -gnuincludes = -I. -gnucflags = -O2 -g -gnucxxflags = -O2 -g -pedantic -Wall -Wextra -Wcast-align -Wcast-qual $ - -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self $ - -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast $ - -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion $ - -Wsign-promo -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror $ - -Wno-unused -fsanitize=address -gnuldflags = -fsanitize=address - -pool link_pool - depth = 1 - -rule gnucxx - command = $gnucxx -MMD -MF $out.d $gnudefines $gnuincludes $gnucxxflags $ - -c $in -o $out - description = CXX $out - depfile = $out.d - deps = gcc -rule gnucc - command = $gnucc -MMD -MF $out.d $gnudefines $gnuincludes $gnucflags -c $ - $in -o $out - description = CC $out - depfile = $out.d - deps = gcc -rule gnulink - command = $gnuld -o $out $in $libs $gnuldflags - description = LINK $out - pool = link_pool -rule gnuar - command = $gnuar rsc $out $in - description = AR $out - pool = link_pool -rule gnustamp - command = touch $out - description = STAMP $out - -gnucxx = g++ -gnucc = gcc -gnuld = $gnucxx -gnuar = ar - -build loader_example.o: gnucxx loader_example.cc - - -build loader_example: gnulink loader_example.o -build all: phony loader_example - -default all diff --git a/externals/tinyobjloader/cmake_uninstall.cmake.in b/externals/tinyobjloader/cmake_uninstall.cmake.in deleted file mode 100644 index 2037e36..0000000 --- a/externals/tinyobjloader/cmake_uninstall.cmake.in +++ /dev/null @@ -1,21 +0,0 @@ -if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") -endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - -file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) -string(REGEX REPLACE "\n" ";" files "${files}") -foreach(file ${files}) - message(STATUS "Uninstalling $ENV{DESTDIR}${file}") - if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - exec_program( - "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") - endif(NOT "${rm_retval}" STREQUAL 0) - else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - message(STATUS "File $ENV{DESTDIR}${file} does not exist.") - endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") -endforeach(file) diff --git a/externals/tinyobjloader/deps/cpplint.py b/externals/tinyobjloader/deps/cpplint.py deleted file mode 100755 index ccc25d4..0000000 --- a/externals/tinyobjloader/deps/cpplint.py +++ /dev/null @@ -1,6323 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (c) 2009 Google Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -"""Does google-lint on c++ files. - -The goal of this script is to identify places in the code that *may* -be in non-compliance with google style. It does not attempt to fix -up these problems -- the point is to educate. It does also not -attempt to find all problems, or to ensure that everything it does -find is legitimately a problem. - -In particular, we can get very confused by /* and // inside strings! -We do a small hack, which is to ignore //'s with "'s after them on the -same line, but it is far from perfect (in either direction). -""" - -import codecs -import copy -import getopt -import math # for log -import os -import re -import sre_compile -import string -import sys -import unicodedata - - -_USAGE = """ -Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...] - [--counting=total|toplevel|detailed] [--root=subdir] - [--linelength=digits] - [file] ... - - The style guidelines this tries to follow are those in - http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml - - Every problem is given a confidence score from 1-5, with 5 meaning we are - certain of the problem, and 1 meaning it could be a legitimate construct. - This will miss some errors, and is not a substitute for a code review. - - To suppress false-positive errors of a certain category, add a - 'NOLINT(category)' comment to the line. NOLINT or NOLINT(*) - suppresses errors of all categories on that line. - - The files passed in will be linted; at least one file must be provided. - Default linted extensions are .cc, .cpp, .cu, .cuh and .h. Change the - extensions with the --extensions flag. - - Flags: - - output=vs7 - By default, the output is formatted to ease emacs parsing. Visual Studio - compatible output (vs7) may also be used. Other formats are unsupported. - - verbose=# - Specify a number 0-5 to restrict errors to certain verbosity levels. - - filter=-x,+y,... - Specify a comma-separated list of category-filters to apply: only - error messages whose category names pass the filters will be printed. - (Category names are printed with the message and look like - "[whitespace/indent]".) Filters are evaluated left to right. - "-FOO" and "FOO" means "do not print categories that start with FOO". - "+FOO" means "do print categories that start with FOO". - - Examples: --filter=-whitespace,+whitespace/braces - --filter=whitespace,runtime/printf,+runtime/printf_format - --filter=-,+build/include_what_you_use - - To see a list of all the categories used in cpplint, pass no arg: - --filter= - - counting=total|toplevel|detailed - The total number of errors found is always printed. If - 'toplevel' is provided, then the count of errors in each of - the top-level categories like 'build' and 'whitespace' will - also be printed. If 'detailed' is provided, then a count - is provided for each category like 'build/class'. - - root=subdir - The root directory used for deriving header guard CPP variable. - By default, the header guard CPP variable is calculated as the relative - path to the directory that contains .git, .hg, or .svn. When this flag - is specified, the relative path is calculated from the specified - directory. If the specified directory does not exist, this flag is - ignored. - - Examples: - Assuming that src/.git exists, the header guard CPP variables for - src/chrome/browser/ui/browser.h are: - - No flag => CHROME_BROWSER_UI_BROWSER_H_ - --root=chrome => BROWSER_UI_BROWSER_H_ - --root=chrome/browser => UI_BROWSER_H_ - - linelength=digits - This is the allowed line length for the project. The default value is - 80 characters. - - Examples: - --linelength=120 - - extensions=extension,extension,... - The allowed file extensions that cpplint will check - - Examples: - --extensions=hpp,cpp - - cpplint.py supports per-directory configurations specified in CPPLINT.cfg - files. CPPLINT.cfg file can contain a number of key=value pairs. - Currently the following options are supported: - - set noparent - filter=+filter1,-filter2,... - exclude_files=regex - linelength=80 - - "set noparent" option prevents cpplint from traversing directory tree - upwards looking for more .cfg files in parent directories. This option - is usually placed in the top-level project directory. - - The "filter" option is similar in function to --filter flag. It specifies - message filters in addition to the |_DEFAULT_FILTERS| and those specified - through --filter command-line flag. - - "exclude_files" allows to specify a regular expression to be matched against - a file name. If the expression matches, the file is skipped and not run - through liner. - - "linelength" allows to specify the allowed line length for the project. - - CPPLINT.cfg has an effect on files in the same directory and all - sub-directories, unless overridden by a nested configuration file. - - Example file: - filter=-build/include_order,+build/include_alpha - exclude_files=.*\.cc - - The above example disables build/include_order warning and enables - build/include_alpha as well as excludes all .cc from being - processed by linter, in the current directory (where the .cfg - file is located) and all sub-directories. -""" - -# We categorize each error message we print. Here are the categories. -# We want an explicit list so we can list them all in cpplint --filter=. -# If you add a new error message with a new category, add it to the list -# here! cpplint_unittest.py should tell you if you forget to do this. -_ERROR_CATEGORIES = [ - 'build/class', - 'build/c++11', - 'build/deprecated', - 'build/endif_comment', - 'build/explicit_make_pair', - 'build/forward_decl', - 'build/header_guard', - 'build/include', - 'build/include_alpha', - 'build/include_order', - 'build/include_what_you_use', - 'build/namespaces', - 'build/printf_format', - 'build/storage_class', - 'legal/copyright', - 'readability/alt_tokens', - 'readability/braces', - 'readability/casting', - 'readability/check', - 'readability/constructors', - 'readability/fn_size', - 'readability/function', - 'readability/inheritance', - 'readability/multiline_comment', - 'readability/multiline_string', - 'readability/namespace', - 'readability/nolint', - 'readability/nul', - 'readability/strings', - 'readability/todo', - 'readability/utf8', - 'runtime/arrays', - 'runtime/casting', - 'runtime/explicit', - 'runtime/int', - 'runtime/init', - 'runtime/invalid_increment', - 'runtime/member_string_references', - 'runtime/memset', - 'runtime/indentation_namespace', - 'runtime/operator', - 'runtime/printf', - 'runtime/printf_format', - 'runtime/references', - 'runtime/string', - 'runtime/threadsafe_fn', - 'runtime/vlog', - 'whitespace/blank_line', - 'whitespace/braces', - 'whitespace/comma', - 'whitespace/comments', - 'whitespace/empty_conditional_body', - 'whitespace/empty_loop_body', - 'whitespace/end_of_line', - 'whitespace/ending_newline', - 'whitespace/forcolon', - 'whitespace/indent', - 'whitespace/line_length', - 'whitespace/newline', - 'whitespace/operators', - 'whitespace/parens', - 'whitespace/semicolon', - 'whitespace/tab', - 'whitespace/todo', - ] - -# These error categories are no longer enforced by cpplint, but for backwards- -# compatibility they may still appear in NOLINT comments. -_LEGACY_ERROR_CATEGORIES = [ - 'readability/streams', - ] - -# The default state of the category filter. This is overridden by the --filter= -# flag. By default all errors are on, so only add here categories that should be -# off by default (i.e., categories that must be enabled by the --filter= flags). -# All entries here should start with a '-' or '+', as in the --filter= flag. -_DEFAULT_FILTERS = ['-build/include_alpha'] - -# We used to check for high-bit characters, but after much discussion we -# decided those were OK, as long as they were in UTF-8 and didn't represent -# hard-coded international strings, which belong in a separate i18n file. - -# C++ headers -_CPP_HEADERS = frozenset([ - # Legacy - 'algobase.h', - 'algo.h', - 'alloc.h', - 'builtinbuf.h', - 'bvector.h', - 'complex.h', - 'defalloc.h', - 'deque.h', - 'editbuf.h', - 'fstream.h', - 'function.h', - 'hash_map', - 'hash_map.h', - 'hash_set', - 'hash_set.h', - 'hashtable.h', - 'heap.h', - 'indstream.h', - 'iomanip.h', - 'iostream.h', - 'istream.h', - 'iterator.h', - 'list.h', - 'map.h', - 'multimap.h', - 'multiset.h', - 'ostream.h', - 'pair.h', - 'parsestream.h', - 'pfstream.h', - 'procbuf.h', - 'pthread_alloc', - 'pthread_alloc.h', - 'rope', - 'rope.h', - 'ropeimpl.h', - 'set.h', - 'slist', - 'slist.h', - 'stack.h', - 'stdiostream.h', - 'stl_alloc.h', - 'stl_relops.h', - 'streambuf.h', - 'stream.h', - 'strfile.h', - 'strstream.h', - 'tempbuf.h', - 'tree.h', - 'type_traits.h', - 'vector.h', - # 17.6.1.2 C++ library headers - 'algorithm', - 'array', - 'atomic', - 'bitset', - 'chrono', - 'codecvt', - 'complex', - 'condition_variable', - 'deque', - 'exception', - 'forward_list', - 'fstream', - 'functional', - 'future', - 'initializer_list', - 'iomanip', - 'ios', - 'iosfwd', - 'iostream', - 'istream', - 'iterator', - 'limits', - 'list', - 'locale', - 'map', - 'memory', - 'mutex', - 'new', - 'numeric', - 'ostream', - 'queue', - 'random', - 'ratio', - 'regex', - 'set', - 'sstream', - 'stack', - 'stdexcept', - 'streambuf', - 'string', - 'strstream', - 'system_error', - 'thread', - 'tuple', - 'typeindex', - 'typeinfo', - 'type_traits', - 'unordered_map', - 'unordered_set', - 'utility', - 'valarray', - 'vector', - # 17.6.1.2 C++ headers for C library facilities - 'cassert', - 'ccomplex', - 'cctype', - 'cerrno', - 'cfenv', - 'cfloat', - 'cinttypes', - 'ciso646', - 'climits', - 'clocale', - 'cmath', - 'csetjmp', - 'csignal', - 'cstdalign', - 'cstdarg', - 'cstdbool', - 'cstddef', - 'cstdint', - 'cstdio', - 'cstdlib', - 'cstring', - 'ctgmath', - 'ctime', - 'cuchar', - 'cwchar', - 'cwctype', - ]) - - -# These headers are excluded from [build/include] and [build/include_order] -# checks: -# - Anything not following google file name conventions (containing an -# uppercase character, such as Python.h or nsStringAPI.h, for example). -# - Lua headers. -_THIRD_PARTY_HEADERS_PATTERN = re.compile( - r'^(?:[^/]*[A-Z][^/]*\.h|lua\.h|lauxlib\.h|lualib\.h)$') - - -# Assertion macros. These are defined in base/logging.h and -# testing/base/gunit.h. Note that the _M versions need to come first -# for substring matching to work. -_CHECK_MACROS = [ - 'DCHECK', 'CHECK', - 'EXPECT_TRUE_M', 'EXPECT_TRUE', - 'ASSERT_TRUE_M', 'ASSERT_TRUE', - 'EXPECT_FALSE_M', 'EXPECT_FALSE', - 'ASSERT_FALSE_M', 'ASSERT_FALSE', - ] - -# Replacement macros for CHECK/DCHECK/EXPECT_TRUE/EXPECT_FALSE -_CHECK_REPLACEMENT = dict([(m, {}) for m in _CHECK_MACROS]) - -for op, replacement in [('==', 'EQ'), ('!=', 'NE'), - ('>=', 'GE'), ('>', 'GT'), - ('<=', 'LE'), ('<', 'LT')]: - _CHECK_REPLACEMENT['DCHECK'][op] = 'DCHECK_%s' % replacement - _CHECK_REPLACEMENT['CHECK'][op] = 'CHECK_%s' % replacement - _CHECK_REPLACEMENT['EXPECT_TRUE'][op] = 'EXPECT_%s' % replacement - _CHECK_REPLACEMENT['ASSERT_TRUE'][op] = 'ASSERT_%s' % replacement - _CHECK_REPLACEMENT['EXPECT_TRUE_M'][op] = 'EXPECT_%s_M' % replacement - _CHECK_REPLACEMENT['ASSERT_TRUE_M'][op] = 'ASSERT_%s_M' % replacement - -for op, inv_replacement in [('==', 'NE'), ('!=', 'EQ'), - ('>=', 'LT'), ('>', 'LE'), - ('<=', 'GT'), ('<', 'GE')]: - _CHECK_REPLACEMENT['EXPECT_FALSE'][op] = 'EXPECT_%s' % inv_replacement - _CHECK_REPLACEMENT['ASSERT_FALSE'][op] = 'ASSERT_%s' % inv_replacement - _CHECK_REPLACEMENT['EXPECT_FALSE_M'][op] = 'EXPECT_%s_M' % inv_replacement - _CHECK_REPLACEMENT['ASSERT_FALSE_M'][op] = 'ASSERT_%s_M' % inv_replacement - -# Alternative tokens and their replacements. For full list, see section 2.5 -# Alternative tokens [lex.digraph] in the C++ standard. -# -# Digraphs (such as '%:') are not included here since it's a mess to -# match those on a word boundary. -_ALT_TOKEN_REPLACEMENT = { - 'and': '&&', - 'bitor': '|', - 'or': '||', - 'xor': '^', - 'compl': '~', - 'bitand': '&', - 'and_eq': '&=', - 'or_eq': '|=', - 'xor_eq': '^=', - 'not': '!', - 'not_eq': '!=' - } - -# Compile regular expression that matches all the above keywords. The "[ =()]" -# bit is meant to avoid matching these keywords outside of boolean expressions. -# -# False positives include C-style multi-line comments and multi-line strings -# but those have always been troublesome for cpplint. -_ALT_TOKEN_REPLACEMENT_PATTERN = re.compile( - r'[ =()](' + ('|'.join(_ALT_TOKEN_REPLACEMENT.keys())) + r')(?=[ (]|$)') - - -# These constants define types of headers for use with -# _IncludeState.CheckNextIncludeOrder(). -_C_SYS_HEADER = 1 -_CPP_SYS_HEADER = 2 -_LIKELY_MY_HEADER = 3 -_POSSIBLE_MY_HEADER = 4 -_OTHER_HEADER = 5 - -# These constants define the current inline assembly state -_NO_ASM = 0 # Outside of inline assembly block -_INSIDE_ASM = 1 # Inside inline assembly block -_END_ASM = 2 # Last line of inline assembly block -_BLOCK_ASM = 3 # The whole block is an inline assembly block - -# Match start of assembly blocks -_MATCH_ASM = re.compile(r'^\s*(?:asm|_asm|__asm|__asm__)' - r'(?:\s+(volatile|__volatile__))?' - r'\s*[{(]') - - -_regexp_compile_cache = {} - -# {str, set(int)}: a map from error categories to sets of linenumbers -# on which those errors are expected and should be suppressed. -_error_suppressions = {} - -# The root directory used for deriving header guard CPP variable. -# This is set by --root flag. -_root = None - -# The allowed line length of files. -# This is set by --linelength flag. -_line_length = 80 - -# The allowed extensions for file names -# This is set by --extensions flag. -_valid_extensions = set(['cc', 'h', 'cpp', 'cu', 'cuh']) - -def ParseNolintSuppressions(filename, raw_line, linenum, error): - """Updates the global list of error-suppressions. - - Parses any NOLINT comments on the current line, updating the global - error_suppressions store. Reports an error if the NOLINT comment - was malformed. - - Args: - filename: str, the name of the input file. - raw_line: str, the line of input text, with comments. - linenum: int, the number of the current line. - error: function, an error handler. - """ - matched = Search(r'\bNOLINT(NEXTLINE)?\b(\([^)]+\))?', raw_line) - if matched: - if matched.group(1): - suppressed_line = linenum + 1 - else: - suppressed_line = linenum - category = matched.group(2) - if category in (None, '(*)'): # => "suppress all" - _error_suppressions.setdefault(None, set()).add(suppressed_line) - else: - if category.startswith('(') and category.endswith(')'): - category = category[1:-1] - if category in _ERROR_CATEGORIES: - _error_suppressions.setdefault(category, set()).add(suppressed_line) - elif category not in _LEGACY_ERROR_CATEGORIES: - error(filename, linenum, 'readability/nolint', 5, - 'Unknown NOLINT error category: %s' % category) - - -def ResetNolintSuppressions(): - """Resets the set of NOLINT suppressions to empty.""" - _error_suppressions.clear() - - -def IsErrorSuppressedByNolint(category, linenum): - """Returns true if the specified error category is suppressed on this line. - - Consults the global error_suppressions map populated by - ParseNolintSuppressions/ResetNolintSuppressions. - - Args: - category: str, the category of the error. - linenum: int, the current line number. - Returns: - bool, True iff the error should be suppressed due to a NOLINT comment. - """ - return (linenum in _error_suppressions.get(category, set()) or - linenum in _error_suppressions.get(None, set())) - - -def Match(pattern, s): - """Matches the string with the pattern, caching the compiled regexp.""" - # The regexp compilation caching is inlined in both Match and Search for - # performance reasons; factoring it out into a separate function turns out - # to be noticeably expensive. - if pattern not in _regexp_compile_cache: - _regexp_compile_cache[pattern] = sre_compile.compile(pattern) - return _regexp_compile_cache[pattern].match(s) - - -def ReplaceAll(pattern, rep, s): - """Replaces instances of pattern in a string with a replacement. - - The compiled regex is kept in a cache shared by Match and Search. - - Args: - pattern: regex pattern - rep: replacement text - s: search string - - Returns: - string with replacements made (or original string if no replacements) - """ - if pattern not in _regexp_compile_cache: - _regexp_compile_cache[pattern] = sre_compile.compile(pattern) - return _regexp_compile_cache[pattern].sub(rep, s) - - -def Search(pattern, s): - """Searches the string for the pattern, caching the compiled regexp.""" - if pattern not in _regexp_compile_cache: - _regexp_compile_cache[pattern] = sre_compile.compile(pattern) - return _regexp_compile_cache[pattern].search(s) - - -class _IncludeState(object): - """Tracks line numbers for includes, and the order in which includes appear. - - include_list contains list of lists of (header, line number) pairs. - It's a lists of lists rather than just one flat list to make it - easier to update across preprocessor boundaries. - - Call CheckNextIncludeOrder() once for each header in the file, passing - in the type constants defined above. Calls in an illegal order will - raise an _IncludeError with an appropriate error message. - - """ - # self._section will move monotonically through this set. If it ever - # needs to move backwards, CheckNextIncludeOrder will raise an error. - _INITIAL_SECTION = 0 - _MY_H_SECTION = 1 - _C_SECTION = 2 - _CPP_SECTION = 3 - _OTHER_H_SECTION = 4 - - _TYPE_NAMES = { - _C_SYS_HEADER: 'C system header', - _CPP_SYS_HEADER: 'C++ system header', - _LIKELY_MY_HEADER: 'header this file implements', - _POSSIBLE_MY_HEADER: 'header this file may implement', - _OTHER_HEADER: 'other header', - } - _SECTION_NAMES = { - _INITIAL_SECTION: "... nothing. (This can't be an error.)", - _MY_H_SECTION: 'a header this file implements', - _C_SECTION: 'C system header', - _CPP_SECTION: 'C++ system header', - _OTHER_H_SECTION: 'other header', - } - - def __init__(self): - self.include_list = [[]] - self.ResetSection('') - - def FindHeader(self, header): - """Check if a header has already been included. - - Args: - header: header to check. - Returns: - Line number of previous occurrence, or -1 if the header has not - been seen before. - """ - for section_list in self.include_list: - for f in section_list: - if f[0] == header: - return f[1] - return -1 - - def ResetSection(self, directive): - """Reset section checking for preprocessor directive. - - Args: - directive: preprocessor directive (e.g. "if", "else"). - """ - # The name of the current section. - self._section = self._INITIAL_SECTION - # The path of last found header. - self._last_header = '' - - # Update list of includes. Note that we never pop from the - # include list. - if directive in ('if', 'ifdef', 'ifndef'): - self.include_list.append([]) - elif directive in ('else', 'elif'): - self.include_list[-1] = [] - - def SetLastHeader(self, header_path): - self._last_header = header_path - - def CanonicalizeAlphabeticalOrder(self, header_path): - """Returns a path canonicalized for alphabetical comparison. - - - replaces "-" with "_" so they both cmp the same. - - removes '-inl' since we don't require them to be after the main header. - - lowercase everything, just in case. - - Args: - header_path: Path to be canonicalized. - - Returns: - Canonicalized path. - """ - return header_path.replace('-inl.h', '.h').replace('-', '_').lower() - - def IsInAlphabeticalOrder(self, clean_lines, linenum, header_path): - """Check if a header is in alphabetical order with the previous header. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - header_path: Canonicalized header to be checked. - - Returns: - Returns true if the header is in alphabetical order. - """ - # If previous section is different from current section, _last_header will - # be reset to empty string, so it's always less than current header. - # - # If previous line was a blank line, assume that the headers are - # intentionally sorted the way they are. - if (self._last_header > header_path and - Match(r'^\s*#\s*include\b', clean_lines.elided[linenum - 1])): - return False - return True - - def CheckNextIncludeOrder(self, header_type): - """Returns a non-empty error message if the next header is out of order. - - This function also updates the internal state to be ready to check - the next include. - - Args: - header_type: One of the _XXX_HEADER constants defined above. - - Returns: - The empty string if the header is in the right order, or an - error message describing what's wrong. - - """ - error_message = ('Found %s after %s' % - (self._TYPE_NAMES[header_type], - self._SECTION_NAMES[self._section])) - - last_section = self._section - - if header_type == _C_SYS_HEADER: - if self._section <= self._C_SECTION: - self._section = self._C_SECTION - else: - self._last_header = '' - return error_message - elif header_type == _CPP_SYS_HEADER: - if self._section <= self._CPP_SECTION: - self._section = self._CPP_SECTION - else: - self._last_header = '' - return error_message - elif header_type == _LIKELY_MY_HEADER: - if self._section <= self._MY_H_SECTION: - self._section = self._MY_H_SECTION - else: - self._section = self._OTHER_H_SECTION - elif header_type == _POSSIBLE_MY_HEADER: - if self._section <= self._MY_H_SECTION: - self._section = self._MY_H_SECTION - else: - # This will always be the fallback because we're not sure - # enough that the header is associated with this file. - self._section = self._OTHER_H_SECTION - else: - assert header_type == _OTHER_HEADER - self._section = self._OTHER_H_SECTION - - if last_section != self._section: - self._last_header = '' - - return '' - - -class _CppLintState(object): - """Maintains module-wide state..""" - - def __init__(self): - self.verbose_level = 1 # global setting. - self.error_count = 0 # global count of reported errors - # filters to apply when emitting error messages - self.filters = _DEFAULT_FILTERS[:] - # backup of filter list. Used to restore the state after each file. - self._filters_backup = self.filters[:] - self.counting = 'total' # In what way are we counting errors? - self.errors_by_category = {} # string to int dict storing error counts - - # output format: - # "emacs" - format that emacs can parse (default) - # "vs7" - format that Microsoft Visual Studio 7 can parse - self.output_format = 'emacs' - - def SetOutputFormat(self, output_format): - """Sets the output format for errors.""" - self.output_format = output_format - - def SetVerboseLevel(self, level): - """Sets the module's verbosity, and returns the previous setting.""" - last_verbose_level = self.verbose_level - self.verbose_level = level - return last_verbose_level - - def SetCountingStyle(self, counting_style): - """Sets the module's counting options.""" - self.counting = counting_style - - def SetFilters(self, filters): - """Sets the error-message filters. - - These filters are applied when deciding whether to emit a given - error message. - - Args: - filters: A string of comma-separated filters (eg "+whitespace/indent"). - Each filter should start with + or -; else we die. - - Raises: - ValueError: The comma-separated filters did not all start with '+' or '-'. - E.g. "-,+whitespace,-whitespace/indent,whitespace/badfilter" - """ - # Default filters always have less priority than the flag ones. - self.filters = _DEFAULT_FILTERS[:] - self.AddFilters(filters) - - def AddFilters(self, filters): - """ Adds more filters to the existing list of error-message filters. """ - for filt in filters.split(','): - clean_filt = filt.strip() - if clean_filt: - self.filters.append(clean_filt) - for filt in self.filters: - if not (filt.startswith('+') or filt.startswith('-')): - raise ValueError('Every filter in --filters must start with + or -' - ' (%s does not)' % filt) - - def BackupFilters(self): - """ Saves the current filter list to backup storage.""" - self._filters_backup = self.filters[:] - - def RestoreFilters(self): - """ Restores filters previously backed up.""" - self.filters = self._filters_backup[:] - - def ResetErrorCounts(self): - """Sets the module's error statistic back to zero.""" - self.error_count = 0 - self.errors_by_category = {} - - def IncrementErrorCount(self, category): - """Bumps the module's error statistic.""" - self.error_count += 1 - if self.counting in ('toplevel', 'detailed'): - if self.counting != 'detailed': - category = category.split('/')[0] - if category not in self.errors_by_category: - self.errors_by_category[category] = 0 - self.errors_by_category[category] += 1 - - def PrintErrorCounts(self): - """Print a summary of errors by category, and the total.""" - for category, count in self.errors_by_category.iteritems(): - sys.stderr.write('Category \'%s\' errors found: %d\n' % - (category, count)) - sys.stderr.write('Total errors found: %d\n' % self.error_count) - -_cpplint_state = _CppLintState() - - -def _OutputFormat(): - """Gets the module's output format.""" - return _cpplint_state.output_format - - -def _SetOutputFormat(output_format): - """Sets the module's output format.""" - _cpplint_state.SetOutputFormat(output_format) - - -def _VerboseLevel(): - """Returns the module's verbosity setting.""" - return _cpplint_state.verbose_level - - -def _SetVerboseLevel(level): - """Sets the module's verbosity, and returns the previous setting.""" - return _cpplint_state.SetVerboseLevel(level) - - -def _SetCountingStyle(level): - """Sets the module's counting options.""" - _cpplint_state.SetCountingStyle(level) - - -def _Filters(): - """Returns the module's list of output filters, as a list.""" - return _cpplint_state.filters - - -def _SetFilters(filters): - """Sets the module's error-message filters. - - These filters are applied when deciding whether to emit a given - error message. - - Args: - filters: A string of comma-separated filters (eg "whitespace/indent"). - Each filter should start with + or -; else we die. - """ - _cpplint_state.SetFilters(filters) - -def _AddFilters(filters): - """Adds more filter overrides. - - Unlike _SetFilters, this function does not reset the current list of filters - available. - - Args: - filters: A string of comma-separated filters (eg "whitespace/indent"). - Each filter should start with + or -; else we die. - """ - _cpplint_state.AddFilters(filters) - -def _BackupFilters(): - """ Saves the current filter list to backup storage.""" - _cpplint_state.BackupFilters() - -def _RestoreFilters(): - """ Restores filters previously backed up.""" - _cpplint_state.RestoreFilters() - -class _FunctionState(object): - """Tracks current function name and the number of lines in its body.""" - - _NORMAL_TRIGGER = 250 # for --v=0, 500 for --v=1, etc. - _TEST_TRIGGER = 400 # about 50% more than _NORMAL_TRIGGER. - - def __init__(self): - self.in_a_function = False - self.lines_in_function = 0 - self.current_function = '' - - def Begin(self, function_name): - """Start analyzing function body. - - Args: - function_name: The name of the function being tracked. - """ - self.in_a_function = True - self.lines_in_function = 0 - self.current_function = function_name - - def Count(self): - """Count line in current function body.""" - if self.in_a_function: - self.lines_in_function += 1 - - def Check(self, error, filename, linenum): - """Report if too many lines in function body. - - Args: - error: The function to call with any errors found. - filename: The name of the current file. - linenum: The number of the line to check. - """ - if Match(r'T(EST|est)', self.current_function): - base_trigger = self._TEST_TRIGGER - else: - base_trigger = self._NORMAL_TRIGGER - trigger = base_trigger * 2**_VerboseLevel() - - if self.lines_in_function > trigger: - error_level = int(math.log(self.lines_in_function / base_trigger, 2)) - # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ... - if error_level > 5: - error_level = 5 - error(filename, linenum, 'readability/fn_size', error_level, - 'Small and focused functions are preferred:' - ' %s has %d non-comment lines' - ' (error triggered by exceeding %d lines).' % ( - self.current_function, self.lines_in_function, trigger)) - - def End(self): - """Stop analyzing function body.""" - self.in_a_function = False - - -class _IncludeError(Exception): - """Indicates a problem with the include order in a file.""" - pass - - -class FileInfo(object): - """Provides utility functions for filenames. - - FileInfo provides easy access to the components of a file's path - relative to the project root. - """ - - def __init__(self, filename): - self._filename = filename - - def FullName(self): - """Make Windows paths like Unix.""" - return os.path.abspath(self._filename).replace('\\', '/') - - def RepositoryName(self): - """FullName after removing the local path to the repository. - - If we have a real absolute path name here we can try to do something smart: - detecting the root of the checkout and truncating /path/to/checkout from - the name so that we get header guards that don't include things like - "C:\Documents and Settings\..." or "/home/username/..." in them and thus - people on different computers who have checked the source out to different - locations won't see bogus errors. - """ - fullname = self.FullName() - - if os.path.exists(fullname): - project_dir = os.path.dirname(fullname) - - if os.path.exists(os.path.join(project_dir, ".svn")): - # If there's a .svn file in the current directory, we recursively look - # up the directory tree for the top of the SVN checkout - root_dir = project_dir - one_up_dir = os.path.dirname(root_dir) - while os.path.exists(os.path.join(one_up_dir, ".svn")): - root_dir = os.path.dirname(root_dir) - one_up_dir = os.path.dirname(one_up_dir) - - prefix = os.path.commonprefix([root_dir, project_dir]) - return fullname[len(prefix) + 1:] - - # Not SVN <= 1.6? Try to find a git, hg, or svn top level directory by - # searching up from the current path. - root_dir = os.path.dirname(fullname) - while (root_dir != os.path.dirname(root_dir) and - not os.path.exists(os.path.join(root_dir, ".git")) and - not os.path.exists(os.path.join(root_dir, ".hg")) and - not os.path.exists(os.path.join(root_dir, ".svn"))): - root_dir = os.path.dirname(root_dir) - - if (os.path.exists(os.path.join(root_dir, ".git")) or - os.path.exists(os.path.join(root_dir, ".hg")) or - os.path.exists(os.path.join(root_dir, ".svn"))): - prefix = os.path.commonprefix([root_dir, project_dir]) - return fullname[len(prefix) + 1:] - - # Don't know what to do; header guard warnings may be wrong... - return fullname - - def Split(self): - """Splits the file into the directory, basename, and extension. - - For 'chrome/browser/browser.cc', Split() would - return ('chrome/browser', 'browser', '.cc') - - Returns: - A tuple of (directory, basename, extension). - """ - - googlename = self.RepositoryName() - project, rest = os.path.split(googlename) - return (project,) + os.path.splitext(rest) - - def BaseName(self): - """File base name - text after the final slash, before the final period.""" - return self.Split()[1] - - def Extension(self): - """File extension - text following the final period.""" - return self.Split()[2] - - def NoExtension(self): - """File has no source file extension.""" - return '/'.join(self.Split()[0:2]) - - def IsSource(self): - """File has a source file extension.""" - return self.Extension()[1:] in ('c', 'cc', 'cpp', 'cxx') - - -def _ShouldPrintError(category, confidence, linenum): - """If confidence >= verbose, category passes filter and is not suppressed.""" - - # There are three ways we might decide not to print an error message: - # a "NOLINT(category)" comment appears in the source, - # the verbosity level isn't high enough, or the filters filter it out. - if IsErrorSuppressedByNolint(category, linenum): - return False - - if confidence < _cpplint_state.verbose_level: - return False - - is_filtered = False - for one_filter in _Filters(): - if one_filter.startswith('-'): - if category.startswith(one_filter[1:]): - is_filtered = True - elif one_filter.startswith('+'): - if category.startswith(one_filter[1:]): - is_filtered = False - else: - assert False # should have been checked for in SetFilter. - if is_filtered: - return False - - return True - - -def Error(filename, linenum, category, confidence, message): - """Logs the fact we've found a lint error. - - We log where the error was found, and also our confidence in the error, - that is, how certain we are this is a legitimate style regression, and - not a misidentification or a use that's sometimes justified. - - False positives can be suppressed by the use of - "cpplint(category)" comments on the offending line. These are - parsed into _error_suppressions. - - Args: - filename: The name of the file containing the error. - linenum: The number of the line containing the error. - category: A string used to describe the "category" this bug - falls under: "whitespace", say, or "runtime". Categories - may have a hierarchy separated by slashes: "whitespace/indent". - confidence: A number from 1-5 representing a confidence score for - the error, with 5 meaning that we are certain of the problem, - and 1 meaning that it could be a legitimate construct. - message: The error message. - """ - if _ShouldPrintError(category, confidence, linenum): - _cpplint_state.IncrementErrorCount(category) - if _cpplint_state.output_format == 'vs7': - sys.stderr.write('%s(%s): %s [%s] [%d]\n' % ( - filename, linenum, message, category, confidence)) - elif _cpplint_state.output_format == 'eclipse': - sys.stderr.write('%s:%s: warning: %s [%s] [%d]\n' % ( - filename, linenum, message, category, confidence)) - else: - sys.stderr.write('%s:%s: %s [%s] [%d]\n' % ( - filename, linenum, message, category, confidence)) - - -# Matches standard C++ escape sequences per 2.13.2.3 of the C++ standard. -_RE_PATTERN_CLEANSE_LINE_ESCAPES = re.compile( - r'\\([abfnrtv?"\\\']|\d+|x[0-9a-fA-F]+)') -# Match a single C style comment on the same line. -_RE_PATTERN_C_COMMENTS = r'/\*(?:[^*]|\*(?!/))*\*/' -# Matches multi-line C style comments. -# This RE is a little bit more complicated than one might expect, because we -# have to take care of space removals tools so we can handle comments inside -# statements better. -# The current rule is: We only clear spaces from both sides when we're at the -# end of the line. Otherwise, we try to remove spaces from the right side, -# if this doesn't work we try on left side but only if there's a non-character -# on the right. -_RE_PATTERN_CLEANSE_LINE_C_COMMENTS = re.compile( - r'(\s*' + _RE_PATTERN_C_COMMENTS + r'\s*$|' + - _RE_PATTERN_C_COMMENTS + r'\s+|' + - r'\s+' + _RE_PATTERN_C_COMMENTS + r'(?=\W)|' + - _RE_PATTERN_C_COMMENTS + r')') - - -def IsCppString(line): - """Does line terminate so, that the next symbol is in string constant. - - This function does not consider single-line nor multi-line comments. - - Args: - line: is a partial line of code starting from the 0..n. - - Returns: - True, if next character appended to 'line' is inside a - string constant. - """ - - line = line.replace(r'\\', 'XX') # after this, \\" does not match to \" - return ((line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1 - - -def CleanseRawStrings(raw_lines): - """Removes C++11 raw strings from lines. - - Before: - static const char kData[] = R"( - multi-line string - )"; - - After: - static const char kData[] = "" - (replaced by blank line) - ""; - - Args: - raw_lines: list of raw lines. - - Returns: - list of lines with C++11 raw strings replaced by empty strings. - """ - - delimiter = None - lines_without_raw_strings = [] - for line in raw_lines: - if delimiter: - # Inside a raw string, look for the end - end = line.find(delimiter) - if end >= 0: - # Found the end of the string, match leading space for this - # line and resume copying the original lines, and also insert - # a "" on the last line. - leading_space = Match(r'^(\s*)\S', line) - line = leading_space.group(1) + '""' + line[end + len(delimiter):] - delimiter = None - else: - # Haven't found the end yet, append a blank line. - line = '""' - - # Look for beginning of a raw string, and replace them with - # empty strings. This is done in a loop to handle multiple raw - # strings on the same line. - while delimiter is None: - # Look for beginning of a raw string. - # See 2.14.15 [lex.string] for syntax. - matched = Match(r'^(.*)\b(?:R|u8R|uR|UR|LR)"([^\s\\()]*)\((.*)$', line) - if matched: - delimiter = ')' + matched.group(2) + '"' - - end = matched.group(3).find(delimiter) - if end >= 0: - # Raw string ended on same line - line = (matched.group(1) + '""' + - matched.group(3)[end + len(delimiter):]) - delimiter = None - else: - # Start of a multi-line raw string - line = matched.group(1) + '""' - else: - break - - lines_without_raw_strings.append(line) - - # TODO(unknown): if delimiter is not None here, we might want to - # emit a warning for unterminated string. - return lines_without_raw_strings - - -def FindNextMultiLineCommentStart(lines, lineix): - """Find the beginning marker for a multiline comment.""" - while lineix < len(lines): - if lines[lineix].strip().startswith('/*'): - # Only return this marker if the comment goes beyond this line - if lines[lineix].strip().find('*/', 2) < 0: - return lineix - lineix += 1 - return len(lines) - - -def FindNextMultiLineCommentEnd(lines, lineix): - """We are inside a comment, find the end marker.""" - while lineix < len(lines): - if lines[lineix].strip().endswith('*/'): - return lineix - lineix += 1 - return len(lines) - - -def RemoveMultiLineCommentsFromRange(lines, begin, end): - """Clears a range of lines for multi-line comments.""" - # Having // dummy comments makes the lines non-empty, so we will not get - # unnecessary blank line warnings later in the code. - for i in range(begin, end): - lines[i] = '/**/' - - -def RemoveMultiLineComments(filename, lines, error): - """Removes multiline (c-style) comments from lines.""" - lineix = 0 - while lineix < len(lines): - lineix_begin = FindNextMultiLineCommentStart(lines, lineix) - if lineix_begin >= len(lines): - return - lineix_end = FindNextMultiLineCommentEnd(lines, lineix_begin) - if lineix_end >= len(lines): - error(filename, lineix_begin + 1, 'readability/multiline_comment', 5, - 'Could not find end of multi-line comment') - return - RemoveMultiLineCommentsFromRange(lines, lineix_begin, lineix_end + 1) - lineix = lineix_end + 1 - - -def CleanseComments(line): - """Removes //-comments and single-line C-style /* */ comments. - - Args: - line: A line of C++ source. - - Returns: - The line with single-line comments removed. - """ - commentpos = line.find('//') - if commentpos != -1 and not IsCppString(line[:commentpos]): - line = line[:commentpos].rstrip() - # get rid of /* ... */ - return _RE_PATTERN_CLEANSE_LINE_C_COMMENTS.sub('', line) - - -class CleansedLines(object): - """Holds 4 copies of all lines with different preprocessing applied to them. - - 1) elided member contains lines without strings and comments. - 2) lines member contains lines without comments. - 3) raw_lines member contains all the lines without processing. - 4) lines_without_raw_strings member is same as raw_lines, but with C++11 raw - strings removed. - All these members are of , and of the same length. - """ - - def __init__(self, lines): - self.elided = [] - self.lines = [] - self.raw_lines = lines - self.num_lines = len(lines) - self.lines_without_raw_strings = CleanseRawStrings(lines) - for linenum in range(len(self.lines_without_raw_strings)): - self.lines.append(CleanseComments( - self.lines_without_raw_strings[linenum])) - elided = self._CollapseStrings(self.lines_without_raw_strings[linenum]) - self.elided.append(CleanseComments(elided)) - - def NumLines(self): - """Returns the number of lines represented.""" - return self.num_lines - - @staticmethod - def _CollapseStrings(elided): - """Collapses strings and chars on a line to simple "" or '' blocks. - - We nix strings first so we're not fooled by text like '"http://"' - - Args: - elided: The line being processed. - - Returns: - The line with collapsed strings. - """ - if _RE_PATTERN_INCLUDE.match(elided): - return elided - - # Remove escaped characters first to make quote/single quote collapsing - # basic. Things that look like escaped characters shouldn't occur - # outside of strings and chars. - elided = _RE_PATTERN_CLEANSE_LINE_ESCAPES.sub('', elided) - - # Replace quoted strings and digit separators. Both single quotes - # and double quotes are processed in the same loop, otherwise - # nested quotes wouldn't work. - collapsed = '' - while True: - # Find the first quote character - match = Match(r'^([^\'"]*)([\'"])(.*)$', elided) - if not match: - collapsed += elided - break - head, quote, tail = match.groups() - - if quote == '"': - # Collapse double quoted strings - second_quote = tail.find('"') - if second_quote >= 0: - collapsed += head + '""' - elided = tail[second_quote + 1:] - else: - # Unmatched double quote, don't bother processing the rest - # of the line since this is probably a multiline string. - collapsed += elided - break - else: - # Found single quote, check nearby text to eliminate digit separators. - # - # There is no special handling for floating point here, because - # the integer/fractional/exponent parts would all be parsed - # correctly as long as there are digits on both sides of the - # separator. So we are fine as long as we don't see something - # like "0.'3" (gcc 4.9.0 will not allow this literal). - if Search(r'\b(?:0[bBxX]?|[1-9])[0-9a-fA-F]*$', head): - match_literal = Match(r'^((?:\'?[0-9a-zA-Z_])*)(.*)$', "'" + tail) - collapsed += head + match_literal.group(1).replace("'", '') - elided = match_literal.group(2) - else: - second_quote = tail.find('\'') - if second_quote >= 0: - collapsed += head + "''" - elided = tail[second_quote + 1:] - else: - # Unmatched single quote - collapsed += elided - break - - return collapsed - - -def FindEndOfExpressionInLine(line, startpos, stack): - """Find the position just after the end of current parenthesized expression. - - Args: - line: a CleansedLines line. - startpos: start searching at this position. - stack: nesting stack at startpos. - - Returns: - On finding matching end: (index just after matching end, None) - On finding an unclosed expression: (-1, None) - Otherwise: (-1, new stack at end of this line) - """ - for i in xrange(startpos, len(line)): - char = line[i] - if char in '([{': - # Found start of parenthesized expression, push to expression stack - stack.append(char) - elif char == '<': - # Found potential start of template argument list - if i > 0 and line[i - 1] == '<': - # Left shift operator - if stack and stack[-1] == '<': - stack.pop() - if not stack: - return (-1, None) - elif i > 0 and Search(r'\boperator\s*$', line[0:i]): - # operator<, don't add to stack - continue - else: - # Tentative start of template argument list - stack.append('<') - elif char in ')]}': - # Found end of parenthesized expression. - # - # If we are currently expecting a matching '>', the pending '<' - # must have been an operator. Remove them from expression stack. - while stack and stack[-1] == '<': - stack.pop() - if not stack: - return (-1, None) - if ((stack[-1] == '(' and char == ')') or - (stack[-1] == '[' and char == ']') or - (stack[-1] == '{' and char == '}')): - stack.pop() - if not stack: - return (i + 1, None) - else: - # Mismatched parentheses - return (-1, None) - elif char == '>': - # Found potential end of template argument list. - - # Ignore "->" and operator functions - if (i > 0 and - (line[i - 1] == '-' or Search(r'\boperator\s*$', line[0:i - 1]))): - continue - - # Pop the stack if there is a matching '<'. Otherwise, ignore - # this '>' since it must be an operator. - if stack: - if stack[-1] == '<': - stack.pop() - if not stack: - return (i + 1, None) - elif char == ';': - # Found something that look like end of statements. If we are currently - # expecting a '>', the matching '<' must have been an operator, since - # template argument list should not contain statements. - while stack and stack[-1] == '<': - stack.pop() - if not stack: - return (-1, None) - - # Did not find end of expression or unbalanced parentheses on this line - return (-1, stack) - - -def CloseExpression(clean_lines, linenum, pos): - """If input points to ( or { or [ or <, finds the position that closes it. - - If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the - linenum/pos that correspond to the closing of the expression. - - TODO(unknown): cpplint spends a fair bit of time matching parentheses. - Ideally we would want to index all opening and closing parentheses once - and have CloseExpression be just a simple lookup, but due to preprocessor - tricks, this is not so easy. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - pos: A position on the line. - - Returns: - A tuple (line, linenum, pos) pointer *past* the closing brace, or - (line, len(lines), -1) if we never find a close. Note we ignore - strings and comments when matching; and the line we return is the - 'cleansed' line at linenum. - """ - - line = clean_lines.elided[linenum] - if (line[pos] not in '({[<') or Match(r'<[<=]', line[pos:]): - return (line, clean_lines.NumLines(), -1) - - # Check first line - (end_pos, stack) = FindEndOfExpressionInLine(line, pos, []) - if end_pos > -1: - return (line, linenum, end_pos) - - # Continue scanning forward - while stack and linenum < clean_lines.NumLines() - 1: - linenum += 1 - line = clean_lines.elided[linenum] - (end_pos, stack) = FindEndOfExpressionInLine(line, 0, stack) - if end_pos > -1: - return (line, linenum, end_pos) - - # Did not find end of expression before end of file, give up - return (line, clean_lines.NumLines(), -1) - - -def FindStartOfExpressionInLine(line, endpos, stack): - """Find position at the matching start of current expression. - - This is almost the reverse of FindEndOfExpressionInLine, but note - that the input position and returned position differs by 1. - - Args: - line: a CleansedLines line. - endpos: start searching at this position. - stack: nesting stack at endpos. - - Returns: - On finding matching start: (index at matching start, None) - On finding an unclosed expression: (-1, None) - Otherwise: (-1, new stack at beginning of this line) - """ - i = endpos - while i >= 0: - char = line[i] - if char in ')]}': - # Found end of expression, push to expression stack - stack.append(char) - elif char == '>': - # Found potential end of template argument list. - # - # Ignore it if it's a "->" or ">=" or "operator>" - if (i > 0 and - (line[i - 1] == '-' or - Match(r'\s>=\s', line[i - 1:]) or - Search(r'\boperator\s*$', line[0:i]))): - i -= 1 - else: - stack.append('>') - elif char == '<': - # Found potential start of template argument list - if i > 0 and line[i - 1] == '<': - # Left shift operator - i -= 1 - else: - # If there is a matching '>', we can pop the expression stack. - # Otherwise, ignore this '<' since it must be an operator. - if stack and stack[-1] == '>': - stack.pop() - if not stack: - return (i, None) - elif char in '([{': - # Found start of expression. - # - # If there are any unmatched '>' on the stack, they must be - # operators. Remove those. - while stack and stack[-1] == '>': - stack.pop() - if not stack: - return (-1, None) - if ((char == '(' and stack[-1] == ')') or - (char == '[' and stack[-1] == ']') or - (char == '{' and stack[-1] == '}')): - stack.pop() - if not stack: - return (i, None) - else: - # Mismatched parentheses - return (-1, None) - elif char == ';': - # Found something that look like end of statements. If we are currently - # expecting a '<', the matching '>' must have been an operator, since - # template argument list should not contain statements. - while stack and stack[-1] == '>': - stack.pop() - if not stack: - return (-1, None) - - i -= 1 - - return (-1, stack) - - -def ReverseCloseExpression(clean_lines, linenum, pos): - """If input points to ) or } or ] or >, finds the position that opens it. - - If lines[linenum][pos] points to a ')' or '}' or ']' or '>', finds the - linenum/pos that correspond to the opening of the expression. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - pos: A position on the line. - - Returns: - A tuple (line, linenum, pos) pointer *at* the opening brace, or - (line, 0, -1) if we never find the matching opening brace. Note - we ignore strings and comments when matching; and the line we - return is the 'cleansed' line at linenum. - """ - line = clean_lines.elided[linenum] - if line[pos] not in ')}]>': - return (line, 0, -1) - - # Check last line - (start_pos, stack) = FindStartOfExpressionInLine(line, pos, []) - if start_pos > -1: - return (line, linenum, start_pos) - - # Continue scanning backward - while stack and linenum > 0: - linenum -= 1 - line = clean_lines.elided[linenum] - (start_pos, stack) = FindStartOfExpressionInLine(line, len(line) - 1, stack) - if start_pos > -1: - return (line, linenum, start_pos) - - # Did not find start of expression before beginning of file, give up - return (line, 0, -1) - - -def CheckForCopyright(filename, lines, error): - """Logs an error if no Copyright message appears at the top of the file.""" - - # We'll say it should occur by line 10. Don't forget there's a - # dummy line at the front. - for line in xrange(1, min(len(lines), 11)): - if re.search(r'Copyright', lines[line], re.I): break - else: # means no copyright line was found - error(filename, 0, 'legal/copyright', 5, - 'No copyright message found. ' - 'You should have a line: "Copyright [year] "') - - -def GetIndentLevel(line): - """Return the number of leading spaces in line. - - Args: - line: A string to check. - - Returns: - An integer count of leading spaces, possibly zero. - """ - indent = Match(r'^( *)\S', line) - if indent: - return len(indent.group(1)) - else: - return 0 - - -def GetHeaderGuardCPPVariable(filename): - """Returns the CPP variable that should be used as a header guard. - - Args: - filename: The name of a C++ header file. - - Returns: - The CPP variable that should be used as a header guard in the - named file. - - """ - - # Restores original filename in case that cpplint is invoked from Emacs's - # flymake. - filename = re.sub(r'_flymake\.h$', '.h', filename) - filename = re.sub(r'/\.flymake/([^/]*)$', r'/\1', filename) - # Replace 'c++' with 'cpp'. - filename = filename.replace('C++', 'cpp').replace('c++', 'cpp') - - fileinfo = FileInfo(filename) - file_path_from_root = fileinfo.RepositoryName() - if _root: - file_path_from_root = re.sub('^' + _root + os.sep, '', file_path_from_root) - return re.sub(r'[^a-zA-Z0-9]', '_', file_path_from_root).upper() + '_' - - -def CheckForHeaderGuard(filename, clean_lines, error): - """Checks that the file contains a header guard. - - Logs an error if no #ifndef header guard is present. For other - headers, checks that the full pathname is used. - - Args: - filename: The name of the C++ header file. - clean_lines: A CleansedLines instance containing the file. - error: The function to call with any errors found. - """ - - # Don't check for header guards if there are error suppression - # comments somewhere in this file. - # - # Because this is silencing a warning for a nonexistent line, we - # only support the very specific NOLINT(build/header_guard) syntax, - # and not the general NOLINT or NOLINT(*) syntax. - raw_lines = clean_lines.lines_without_raw_strings - for i in raw_lines: - if Search(r'//\s*NOLINT\(build/header_guard\)', i): - return - - cppvar = GetHeaderGuardCPPVariable(filename) - - ifndef = '' - ifndef_linenum = 0 - define = '' - endif = '' - endif_linenum = 0 - for linenum, line in enumerate(raw_lines): - linesplit = line.split() - if len(linesplit) >= 2: - # find the first occurrence of #ifndef and #define, save arg - if not ifndef and linesplit[0] == '#ifndef': - # set ifndef to the header guard presented on the #ifndef line. - ifndef = linesplit[1] - ifndef_linenum = linenum - if not define and linesplit[0] == '#define': - define = linesplit[1] - # find the last occurrence of #endif, save entire line - if line.startswith('#endif'): - endif = line - endif_linenum = linenum - - if not ifndef or not define or ifndef != define: - error(filename, 0, 'build/header_guard', 5, - 'No #ifndef header guard found, suggested CPP variable is: %s' % - cppvar) - return - - # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__ - # for backward compatibility. - if ifndef != cppvar: - error_level = 0 - if ifndef != cppvar + '_': - error_level = 5 - - ParseNolintSuppressions(filename, raw_lines[ifndef_linenum], ifndef_linenum, - error) - error(filename, ifndef_linenum, 'build/header_guard', error_level, - '#ifndef header guard has wrong style, please use: %s' % cppvar) - - # Check for "//" comments on endif line. - ParseNolintSuppressions(filename, raw_lines[endif_linenum], endif_linenum, - error) - match = Match(r'#endif\s*//\s*' + cppvar + r'(_)?\b', endif) - if match: - if match.group(1) == '_': - # Issue low severity warning for deprecated double trailing underscore - error(filename, endif_linenum, 'build/header_guard', 0, - '#endif line should be "#endif // %s"' % cppvar) - return - - # Didn't find the corresponding "//" comment. If this file does not - # contain any "//" comments at all, it could be that the compiler - # only wants "/**/" comments, look for those instead. - no_single_line_comments = True - for i in xrange(1, len(raw_lines) - 1): - line = raw_lines[i] - if Match(r'^(?:(?:\'(?:\.|[^\'])*\')|(?:"(?:\.|[^"])*")|[^\'"])*//', line): - no_single_line_comments = False - break - - if no_single_line_comments: - match = Match(r'#endif\s*/\*\s*' + cppvar + r'(_)?\s*\*/', endif) - if match: - if match.group(1) == '_': - # Low severity warning for double trailing underscore - error(filename, endif_linenum, 'build/header_guard', 0, - '#endif line should be "#endif /* %s */"' % cppvar) - return - - # Didn't find anything - error(filename, endif_linenum, 'build/header_guard', 5, - '#endif line should be "#endif // %s"' % cppvar) - - -def CheckHeaderFileIncluded(filename, include_state, error): - """Logs an error if a .cc file does not include its header.""" - - # Do not check test files - if filename.endswith('_test.cc') or filename.endswith('_unittest.cc'): - return - - fileinfo = FileInfo(filename) - headerfile = filename[0:len(filename) - 2] + 'h' - if not os.path.exists(headerfile): - return - headername = FileInfo(headerfile).RepositoryName() - first_include = 0 - for section_list in include_state.include_list: - for f in section_list: - if headername in f[0] or f[0] in headername: - return - if not first_include: - first_include = f[1] - - error(filename, first_include, 'build/include', 5, - '%s should include its header file %s' % (fileinfo.RepositoryName(), - headername)) - - -def CheckForBadCharacters(filename, lines, error): - """Logs an error for each line containing bad characters. - - Two kinds of bad characters: - - 1. Unicode replacement characters: These indicate that either the file - contained invalid UTF-8 (likely) or Unicode replacement characters (which - it shouldn't). Note that it's possible for this to throw off line - numbering if the invalid UTF-8 occurred adjacent to a newline. - - 2. NUL bytes. These are problematic for some tools. - - Args: - filename: The name of the current file. - lines: An array of strings, each representing a line of the file. - error: The function to call with any errors found. - """ - for linenum, line in enumerate(lines): - if u'\ufffd' in line: - error(filename, linenum, 'readability/utf8', 5, - 'Line contains invalid UTF-8 (or Unicode replacement character).') - if '\0' in line: - error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.') - - -def CheckForNewlineAtEOF(filename, lines, error): - """Logs an error if there is no newline char at the end of the file. - - Args: - filename: The name of the current file. - lines: An array of strings, each representing a line of the file. - error: The function to call with any errors found. - """ - - # The array lines() was created by adding two newlines to the - # original file (go figure), then splitting on \n. - # To verify that the file ends in \n, we just have to make sure the - # last-but-two element of lines() exists and is empty. - if len(lines) < 3 or lines[-2]: - error(filename, len(lines) - 2, 'whitespace/ending_newline', 5, - 'Could not find a newline character at the end of the file.') - - -def CheckForMultilineCommentsAndStrings(filename, clean_lines, linenum, error): - """Logs an error if we see /* ... */ or "..." that extend past one line. - - /* ... */ comments are legit inside macros, for one line. - Otherwise, we prefer // comments, so it's ok to warn about the - other. Likewise, it's ok for strings to extend across multiple - lines, as long as a line continuation character (backslash) - terminates each line. Although not currently prohibited by the C++ - style guide, it's ugly and unnecessary. We don't do well with either - in this lint program, so we warn about both. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Remove all \\ (escaped backslashes) from the line. They are OK, and the - # second (escaped) slash may trigger later \" detection erroneously. - line = line.replace('\\\\', '') - - if line.count('/*') > line.count('*/'): - error(filename, linenum, 'readability/multiline_comment', 5, - 'Complex multi-line /*...*/-style comment found. ' - 'Lint may give bogus warnings. ' - 'Consider replacing these with //-style comments, ' - 'with #if 0...#endif, ' - 'or with more clearly structured multi-line comments.') - - if (line.count('"') - line.count('\\"')) % 2: - error(filename, linenum, 'readability/multiline_string', 5, - 'Multi-line string ("...") found. This lint script doesn\'t ' - 'do well with such strings, and may give bogus warnings. ' - 'Use C++11 raw strings or concatenation instead.') - - -# (non-threadsafe name, thread-safe alternative, validation pattern) -# -# The validation pattern is used to eliminate false positives such as: -# _rand(); // false positive due to substring match. -# ->rand(); // some member function rand(). -# ACMRandom rand(seed); // some variable named rand. -# ISAACRandom rand(); // another variable named rand. -# -# Basically we require the return value of these functions to be used -# in some expression context on the same line by matching on some -# operator before the function name. This eliminates constructors and -# member function calls. -_UNSAFE_FUNC_PREFIX = r'(?:[-+*/=%^&|(<]\s*|>\s+)' -_THREADING_LIST = ( - ('asctime(', 'asctime_r(', _UNSAFE_FUNC_PREFIX + r'asctime\([^)]+\)'), - ('ctime(', 'ctime_r(', _UNSAFE_FUNC_PREFIX + r'ctime\([^)]+\)'), - ('getgrgid(', 'getgrgid_r(', _UNSAFE_FUNC_PREFIX + r'getgrgid\([^)]+\)'), - ('getgrnam(', 'getgrnam_r(', _UNSAFE_FUNC_PREFIX + r'getgrnam\([^)]+\)'), - ('getlogin(', 'getlogin_r(', _UNSAFE_FUNC_PREFIX + r'getlogin\(\)'), - ('getpwnam(', 'getpwnam_r(', _UNSAFE_FUNC_PREFIX + r'getpwnam\([^)]+\)'), - ('getpwuid(', 'getpwuid_r(', _UNSAFE_FUNC_PREFIX + r'getpwuid\([^)]+\)'), - ('gmtime(', 'gmtime_r(', _UNSAFE_FUNC_PREFIX + r'gmtime\([^)]+\)'), - ('localtime(', 'localtime_r(', _UNSAFE_FUNC_PREFIX + r'localtime\([^)]+\)'), - ('rand(', 'rand_r(', _UNSAFE_FUNC_PREFIX + r'rand\(\)'), - ('strtok(', 'strtok_r(', - _UNSAFE_FUNC_PREFIX + r'strtok\([^)]+\)'), - ('ttyname(', 'ttyname_r(', _UNSAFE_FUNC_PREFIX + r'ttyname\([^)]+\)'), - ) - - -def CheckPosixThreading(filename, clean_lines, linenum, error): - """Checks for calls to thread-unsafe functions. - - Much code has been originally written without consideration of - multi-threading. Also, engineers are relying on their old experience; - they have learned posix before threading extensions were added. These - tests guide the engineers to use thread-safe functions (when using - posix directly). - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - for single_thread_func, multithread_safe_func, pattern in _THREADING_LIST: - # Additional pattern matching check to confirm that this is the - # function we are looking for - if Search(pattern, line): - error(filename, linenum, 'runtime/threadsafe_fn', 2, - 'Consider using ' + multithread_safe_func + - '...) instead of ' + single_thread_func + - '...) for improved thread safety.') - - -def CheckVlogArguments(filename, clean_lines, linenum, error): - """Checks that VLOG() is only used for defining a logging level. - - For example, VLOG(2) is correct. VLOG(INFO), VLOG(WARNING), VLOG(ERROR), and - VLOG(FATAL) are not. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - if Search(r'\bVLOG\((INFO|ERROR|WARNING|DFATAL|FATAL)\)', line): - error(filename, linenum, 'runtime/vlog', 5, - 'VLOG() should be used with numeric verbosity level. ' - 'Use LOG() if you want symbolic severity levels.') - -# Matches invalid increment: *count++, which moves pointer instead of -# incrementing a value. -_RE_PATTERN_INVALID_INCREMENT = re.compile( - r'^\s*\*\w+(\+\+|--);') - - -def CheckInvalidIncrement(filename, clean_lines, linenum, error): - """Checks for invalid increment *count++. - - For example following function: - void increment_counter(int* count) { - *count++; - } - is invalid, because it effectively does count++, moving pointer, and should - be replaced with ++*count, (*count)++ or *count += 1. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - if _RE_PATTERN_INVALID_INCREMENT.match(line): - error(filename, linenum, 'runtime/invalid_increment', 5, - 'Changing pointer instead of value (or unused value of operator*).') - - -def IsMacroDefinition(clean_lines, linenum): - if Search(r'^#define', clean_lines[linenum]): - return True - - if linenum > 0 and Search(r'\\$', clean_lines[linenum - 1]): - return True - - return False - - -def IsForwardClassDeclaration(clean_lines, linenum): - return Match(r'^\s*(\btemplate\b)*.*class\s+\w+;\s*$', clean_lines[linenum]) - - -class _BlockInfo(object): - """Stores information about a generic block of code.""" - - def __init__(self, seen_open_brace): - self.seen_open_brace = seen_open_brace - self.open_parentheses = 0 - self.inline_asm = _NO_ASM - self.check_namespace_indentation = False - - def CheckBegin(self, filename, clean_lines, linenum, error): - """Run checks that applies to text up to the opening brace. - - This is mostly for checking the text after the class identifier - and the "{", usually where the base class is specified. For other - blocks, there isn't much to check, so we always pass. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - pass - - def CheckEnd(self, filename, clean_lines, linenum, error): - """Run checks that applies to text after the closing brace. - - This is mostly used for checking end of namespace comments. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - pass - - def IsBlockInfo(self): - """Returns true if this block is a _BlockInfo. - - This is convenient for verifying that an object is an instance of - a _BlockInfo, but not an instance of any of the derived classes. - - Returns: - True for this class, False for derived classes. - """ - return self.__class__ == _BlockInfo - - -class _ExternCInfo(_BlockInfo): - """Stores information about an 'extern "C"' block.""" - - def __init__(self): - _BlockInfo.__init__(self, True) - - -class _ClassInfo(_BlockInfo): - """Stores information about a class.""" - - def __init__(self, name, class_or_struct, clean_lines, linenum): - _BlockInfo.__init__(self, False) - self.name = name - self.starting_linenum = linenum - self.is_derived = False - self.check_namespace_indentation = True - if class_or_struct == 'struct': - self.access = 'public' - self.is_struct = True - else: - self.access = 'private' - self.is_struct = False - - # Remember initial indentation level for this class. Using raw_lines here - # instead of elided to account for leading comments. - self.class_indent = GetIndentLevel(clean_lines.raw_lines[linenum]) - - # Try to find the end of the class. This will be confused by things like: - # class A { - # } *x = { ... - # - # But it's still good enough for CheckSectionSpacing. - self.last_line = 0 - depth = 0 - for i in range(linenum, clean_lines.NumLines()): - line = clean_lines.elided[i] - depth += line.count('{') - line.count('}') - if not depth: - self.last_line = i - break - - def CheckBegin(self, filename, clean_lines, linenum, error): - # Look for a bare ':' - if Search('(^|[^:]):($|[^:])', clean_lines.elided[linenum]): - self.is_derived = True - - def CheckEnd(self, filename, clean_lines, linenum, error): - # If there is a DISALLOW macro, it should appear near the end of - # the class. - seen_last_thing_in_class = False - for i in xrange(linenum - 1, self.starting_linenum, -1): - match = Search( - r'\b(DISALLOW_COPY_AND_ASSIGN|DISALLOW_IMPLICIT_CONSTRUCTORS)\(' + - self.name + r'\)', - clean_lines.elided[i]) - if match: - if seen_last_thing_in_class: - error(filename, i, 'readability/constructors', 3, - match.group(1) + ' should be the last thing in the class') - break - - if not Match(r'^\s*$', clean_lines.elided[i]): - seen_last_thing_in_class = True - - # Check that closing brace is aligned with beginning of the class. - # Only do this if the closing brace is indented by only whitespaces. - # This means we will not check single-line class definitions. - indent = Match(r'^( *)\}', clean_lines.elided[linenum]) - if indent and len(indent.group(1)) != self.class_indent: - if self.is_struct: - parent = 'struct ' + self.name - else: - parent = 'class ' + self.name - error(filename, linenum, 'whitespace/indent', 3, - 'Closing brace should be aligned with beginning of %s' % parent) - - -class _NamespaceInfo(_BlockInfo): - """Stores information about a namespace.""" - - def __init__(self, name, linenum): - _BlockInfo.__init__(self, False) - self.name = name or '' - self.starting_linenum = linenum - self.check_namespace_indentation = True - - def CheckEnd(self, filename, clean_lines, linenum, error): - """Check end of namespace comments.""" - line = clean_lines.raw_lines[linenum] - - # Check how many lines is enclosed in this namespace. Don't issue - # warning for missing namespace comments if there aren't enough - # lines. However, do apply checks if there is already an end of - # namespace comment and it's incorrect. - # - # TODO(unknown): We always want to check end of namespace comments - # if a namespace is large, but sometimes we also want to apply the - # check if a short namespace contained nontrivial things (something - # other than forward declarations). There is currently no logic on - # deciding what these nontrivial things are, so this check is - # triggered by namespace size only, which works most of the time. - if (linenum - self.starting_linenum < 10 - and not Match(r'};*\s*(//|/\*).*\bnamespace\b', line)): - return - - # Look for matching comment at end of namespace. - # - # Note that we accept C style "/* */" comments for terminating - # namespaces, so that code that terminate namespaces inside - # preprocessor macros can be cpplint clean. - # - # We also accept stuff like "// end of namespace ." with the - # period at the end. - # - # Besides these, we don't accept anything else, otherwise we might - # get false negatives when existing comment is a substring of the - # expected namespace. - if self.name: - # Named namespace - if not Match((r'};*\s*(//|/\*).*\bnamespace\s+' + re.escape(self.name) + - r'[\*/\.\\\s]*$'), - line): - error(filename, linenum, 'readability/namespace', 5, - 'Namespace should be terminated with "// namespace %s"' % - self.name) - else: - # Anonymous namespace - if not Match(r'};*\s*(//|/\*).*\bnamespace[\*/\.\\\s]*$', line): - # If "// namespace anonymous" or "// anonymous namespace (more text)", - # mention "// anonymous namespace" as an acceptable form - if Match(r'}.*\b(namespace anonymous|anonymous namespace)\b', line): - error(filename, linenum, 'readability/namespace', 5, - 'Anonymous namespace should be terminated with "// namespace"' - ' or "// anonymous namespace"') - else: - error(filename, linenum, 'readability/namespace', 5, - 'Anonymous namespace should be terminated with "// namespace"') - - -class _PreprocessorInfo(object): - """Stores checkpoints of nesting stacks when #if/#else is seen.""" - - def __init__(self, stack_before_if): - # The entire nesting stack before #if - self.stack_before_if = stack_before_if - - # The entire nesting stack up to #else - self.stack_before_else = [] - - # Whether we have already seen #else or #elif - self.seen_else = False - - -class NestingState(object): - """Holds states related to parsing braces.""" - - def __init__(self): - # Stack for tracking all braces. An object is pushed whenever we - # see a "{", and popped when we see a "}". Only 3 types of - # objects are possible: - # - _ClassInfo: a class or struct. - # - _NamespaceInfo: a namespace. - # - _BlockInfo: some other type of block. - self.stack = [] - - # Top of the previous stack before each Update(). - # - # Because the nesting_stack is updated at the end of each line, we - # had to do some convoluted checks to find out what is the current - # scope at the beginning of the line. This check is simplified by - # saving the previous top of nesting stack. - # - # We could save the full stack, but we only need the top. Copying - # the full nesting stack would slow down cpplint by ~10%. - self.previous_stack_top = [] - - # Stack of _PreprocessorInfo objects. - self.pp_stack = [] - - def SeenOpenBrace(self): - """Check if we have seen the opening brace for the innermost block. - - Returns: - True if we have seen the opening brace, False if the innermost - block is still expecting an opening brace. - """ - return (not self.stack) or self.stack[-1].seen_open_brace - - def InNamespaceBody(self): - """Check if we are currently one level inside a namespace body. - - Returns: - True if top of the stack is a namespace block, False otherwise. - """ - return self.stack and isinstance(self.stack[-1], _NamespaceInfo) - - def InExternC(self): - """Check if we are currently one level inside an 'extern "C"' block. - - Returns: - True if top of the stack is an extern block, False otherwise. - """ - return self.stack and isinstance(self.stack[-1], _ExternCInfo) - - def InClassDeclaration(self): - """Check if we are currently one level inside a class or struct declaration. - - Returns: - True if top of the stack is a class/struct, False otherwise. - """ - return self.stack and isinstance(self.stack[-1], _ClassInfo) - - def InAsmBlock(self): - """Check if we are currently one level inside an inline ASM block. - - Returns: - True if the top of the stack is a block containing inline ASM. - """ - return self.stack and self.stack[-1].inline_asm != _NO_ASM - - def InTemplateArgumentList(self, clean_lines, linenum, pos): - """Check if current position is inside template argument list. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - pos: position just after the suspected template argument. - Returns: - True if (linenum, pos) is inside template arguments. - """ - while linenum < clean_lines.NumLines(): - # Find the earliest character that might indicate a template argument - line = clean_lines.elided[linenum] - match = Match(r'^[^{};=\[\]\.<>]*(.)', line[pos:]) - if not match: - linenum += 1 - pos = 0 - continue - token = match.group(1) - pos += len(match.group(0)) - - # These things do not look like template argument list: - # class Suspect { - # class Suspect x; } - if token in ('{', '}', ';'): return False - - # These things look like template argument list: - # template - # template - # template - # template - if token in ('>', '=', '[', ']', '.'): return True - - # Check if token is an unmatched '<'. - # If not, move on to the next character. - if token != '<': - pos += 1 - if pos >= len(line): - linenum += 1 - pos = 0 - continue - - # We can't be sure if we just find a single '<', and need to - # find the matching '>'. - (_, end_line, end_pos) = CloseExpression(clean_lines, linenum, pos - 1) - if end_pos < 0: - # Not sure if template argument list or syntax error in file - return False - linenum = end_line - pos = end_pos - return False - - def UpdatePreprocessor(self, line): - """Update preprocessor stack. - - We need to handle preprocessors due to classes like this: - #ifdef SWIG - struct ResultDetailsPageElementExtensionPoint { - #else - struct ResultDetailsPageElementExtensionPoint : public Extension { - #endif - - We make the following assumptions (good enough for most files): - - Preprocessor condition evaluates to true from #if up to first - #else/#elif/#endif. - - - Preprocessor condition evaluates to false from #else/#elif up - to #endif. We still perform lint checks on these lines, but - these do not affect nesting stack. - - Args: - line: current line to check. - """ - if Match(r'^\s*#\s*(if|ifdef|ifndef)\b', line): - # Beginning of #if block, save the nesting stack here. The saved - # stack will allow us to restore the parsing state in the #else case. - self.pp_stack.append(_PreprocessorInfo(copy.deepcopy(self.stack))) - elif Match(r'^\s*#\s*(else|elif)\b', line): - # Beginning of #else block - if self.pp_stack: - if not self.pp_stack[-1].seen_else: - # This is the first #else or #elif block. Remember the - # whole nesting stack up to this point. This is what we - # keep after the #endif. - self.pp_stack[-1].seen_else = True - self.pp_stack[-1].stack_before_else = copy.deepcopy(self.stack) - - # Restore the stack to how it was before the #if - self.stack = copy.deepcopy(self.pp_stack[-1].stack_before_if) - else: - # TODO(unknown): unexpected #else, issue warning? - pass - elif Match(r'^\s*#\s*endif\b', line): - # End of #if or #else blocks. - if self.pp_stack: - # If we saw an #else, we will need to restore the nesting - # stack to its former state before the #else, otherwise we - # will just continue from where we left off. - if self.pp_stack[-1].seen_else: - # Here we can just use a shallow copy since we are the last - # reference to it. - self.stack = self.pp_stack[-1].stack_before_else - # Drop the corresponding #if - self.pp_stack.pop() - else: - # TODO(unknown): unexpected #endif, issue warning? - pass - - # TODO(unknown): Update() is too long, but we will refactor later. - def Update(self, filename, clean_lines, linenum, error): - """Update nesting state with current line. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Remember top of the previous nesting stack. - # - # The stack is always pushed/popped and not modified in place, so - # we can just do a shallow copy instead of copy.deepcopy. Using - # deepcopy would slow down cpplint by ~28%. - if self.stack: - self.previous_stack_top = self.stack[-1] - else: - self.previous_stack_top = None - - # Update pp_stack - self.UpdatePreprocessor(line) - - # Count parentheses. This is to avoid adding struct arguments to - # the nesting stack. - if self.stack: - inner_block = self.stack[-1] - depth_change = line.count('(') - line.count(')') - inner_block.open_parentheses += depth_change - - # Also check if we are starting or ending an inline assembly block. - if inner_block.inline_asm in (_NO_ASM, _END_ASM): - if (depth_change != 0 and - inner_block.open_parentheses == 1 and - _MATCH_ASM.match(line)): - # Enter assembly block - inner_block.inline_asm = _INSIDE_ASM - else: - # Not entering assembly block. If previous line was _END_ASM, - # we will now shift to _NO_ASM state. - inner_block.inline_asm = _NO_ASM - elif (inner_block.inline_asm == _INSIDE_ASM and - inner_block.open_parentheses == 0): - # Exit assembly block - inner_block.inline_asm = _END_ASM - - # Consume namespace declaration at the beginning of the line. Do - # this in a loop so that we catch same line declarations like this: - # namespace proto2 { namespace bridge { class MessageSet; } } - while True: - # Match start of namespace. The "\b\s*" below catches namespace - # declarations even if it weren't followed by a whitespace, this - # is so that we don't confuse our namespace checker. The - # missing spaces will be flagged by CheckSpacing. - namespace_decl_match = Match(r'^\s*namespace\b\s*([:\w]+)?(.*)$', line) - if not namespace_decl_match: - break - - new_namespace = _NamespaceInfo(namespace_decl_match.group(1), linenum) - self.stack.append(new_namespace) - - line = namespace_decl_match.group(2) - if line.find('{') != -1: - new_namespace.seen_open_brace = True - line = line[line.find('{') + 1:] - - # Look for a class declaration in whatever is left of the line - # after parsing namespaces. The regexp accounts for decorated classes - # such as in: - # class LOCKABLE API Object { - # }; - class_decl_match = Match( - r'^(\s*(?:template\s*<[\w\s<>,:]*>\s*)?' - r'(class|struct)\s+(?:[A-Z_]+\s+)*(\w+(?:::\w+)*))' - r'(.*)$', line) - if (class_decl_match and - (not self.stack or self.stack[-1].open_parentheses == 0)): - # We do not want to accept classes that are actually template arguments: - # template , - # template class Ignore3> - # void Function() {}; - # - # To avoid template argument cases, we scan forward and look for - # an unmatched '>'. If we see one, assume we are inside a - # template argument list. - end_declaration = len(class_decl_match.group(1)) - if not self.InTemplateArgumentList(clean_lines, linenum, end_declaration): - self.stack.append(_ClassInfo( - class_decl_match.group(3), class_decl_match.group(2), - clean_lines, linenum)) - line = class_decl_match.group(4) - - # If we have not yet seen the opening brace for the innermost block, - # run checks here. - if not self.SeenOpenBrace(): - self.stack[-1].CheckBegin(filename, clean_lines, linenum, error) - - # Update access control if we are inside a class/struct - if self.stack and isinstance(self.stack[-1], _ClassInfo): - classinfo = self.stack[-1] - access_match = Match( - r'^(.*)\b(public|private|protected|signals)(\s+(?:slots\s*)?)?' - r':(?:[^:]|$)', - line) - if access_match: - classinfo.access = access_match.group(2) - - # Check that access keywords are indented +1 space. Skip this - # check if the keywords are not preceded by whitespaces. - indent = access_match.group(1) - if (len(indent) != classinfo.class_indent + 1 and - Match(r'^\s*$', indent)): - if classinfo.is_struct: - parent = 'struct ' + classinfo.name - else: - parent = 'class ' + classinfo.name - slots = '' - if access_match.group(3): - slots = access_match.group(3) - error(filename, linenum, 'whitespace/indent', 3, - '%s%s: should be indented +1 space inside %s' % ( - access_match.group(2), slots, parent)) - - # Consume braces or semicolons from what's left of the line - while True: - # Match first brace, semicolon, or closed parenthesis. - matched = Match(r'^[^{;)}]*([{;)}])(.*)$', line) - if not matched: - break - - token = matched.group(1) - if token == '{': - # If namespace or class hasn't seen a opening brace yet, mark - # namespace/class head as complete. Push a new block onto the - # stack otherwise. - if not self.SeenOpenBrace(): - self.stack[-1].seen_open_brace = True - elif Match(r'^extern\s*"[^"]*"\s*\{', line): - self.stack.append(_ExternCInfo()) - else: - self.stack.append(_BlockInfo(True)) - if _MATCH_ASM.match(line): - self.stack[-1].inline_asm = _BLOCK_ASM - - elif token == ';' or token == ')': - # If we haven't seen an opening brace yet, but we already saw - # a semicolon, this is probably a forward declaration. Pop - # the stack for these. - # - # Similarly, if we haven't seen an opening brace yet, but we - # already saw a closing parenthesis, then these are probably - # function arguments with extra "class" or "struct" keywords. - # Also pop these stack for these. - if not self.SeenOpenBrace(): - self.stack.pop() - else: # token == '}' - # Perform end of block checks and pop the stack. - if self.stack: - self.stack[-1].CheckEnd(filename, clean_lines, linenum, error) - self.stack.pop() - line = matched.group(2) - - def InnermostClass(self): - """Get class info on the top of the stack. - - Returns: - A _ClassInfo object if we are inside a class, or None otherwise. - """ - for i in range(len(self.stack), 0, -1): - classinfo = self.stack[i - 1] - if isinstance(classinfo, _ClassInfo): - return classinfo - return None - - def CheckCompletedBlocks(self, filename, error): - """Checks that all classes and namespaces have been completely parsed. - - Call this when all lines in a file have been processed. - Args: - filename: The name of the current file. - error: The function to call with any errors found. - """ - # Note: This test can result in false positives if #ifdef constructs - # get in the way of brace matching. See the testBuildClass test in - # cpplint_unittest.py for an example of this. - for obj in self.stack: - if isinstance(obj, _ClassInfo): - error(filename, obj.starting_linenum, 'build/class', 5, - 'Failed to find complete declaration of class %s' % - obj.name) - elif isinstance(obj, _NamespaceInfo): - error(filename, obj.starting_linenum, 'build/namespaces', 5, - 'Failed to find complete declaration of namespace %s' % - obj.name) - - -def CheckForNonStandardConstructs(filename, clean_lines, linenum, - nesting_state, error): - r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2. - - Complain about several constructs which gcc-2 accepts, but which are - not standard C++. Warning about these in lint is one way to ease the - transition to new compilers. - - put storage class first (e.g. "static const" instead of "const static"). - - "%lld" instead of %qd" in printf-type functions. - - "%1$d" is non-standard in printf-type functions. - - "\%" is an undefined character escape sequence. - - text after #endif is not allowed. - - invalid inner-style forward declaration. - - >? and ?= and )\?=?\s*(\w+|[+-]?\d+)(\.\d*)?', - line): - error(filename, linenum, 'build/deprecated', 3, - '>? and ))?' - # r'\s*const\s*' + type_name + '\s*&\s*\w+\s*;' - error(filename, linenum, 'runtime/member_string_references', 2, - 'const string& members are dangerous. It is much better to use ' - 'alternatives, such as pointers or simple constants.') - - # Everything else in this function operates on class declarations. - # Return early if the top of the nesting stack is not a class, or if - # the class head is not completed yet. - classinfo = nesting_state.InnermostClass() - if not classinfo or not classinfo.seen_open_brace: - return - - # The class may have been declared with namespace or classname qualifiers. - # The constructor and destructor will not have those qualifiers. - base_classname = classinfo.name.split('::')[-1] - - # Look for single-argument constructors that aren't marked explicit. - # Technically a valid construct, but against style. Also look for - # non-single-argument constructors which are also technically valid, but - # strongly suggest something is wrong. - explicit_constructor_match = Match( - r'\s+(?:inline\s+)?(explicit\s+)?(?:inline\s+)?%s\s*' - r'\(((?:[^()]|\([^()]*\))*)\)' - % re.escape(base_classname), - line) - - if explicit_constructor_match: - is_marked_explicit = explicit_constructor_match.group(1) - - if not explicit_constructor_match.group(2): - constructor_args = [] - else: - constructor_args = explicit_constructor_match.group(2).split(',') - - # collapse arguments so that commas in template parameter lists and function - # argument parameter lists don't split arguments in two - i = 0 - while i < len(constructor_args): - constructor_arg = constructor_args[i] - while (constructor_arg.count('<') > constructor_arg.count('>') or - constructor_arg.count('(') > constructor_arg.count(')')): - constructor_arg += ',' + constructor_args[i + 1] - del constructor_args[i + 1] - constructor_args[i] = constructor_arg - i += 1 - - defaulted_args = [arg for arg in constructor_args if '=' in arg] - noarg_constructor = (not constructor_args or # empty arg list - # 'void' arg specifier - (len(constructor_args) == 1 and - constructor_args[0].strip() == 'void')) - onearg_constructor = ((len(constructor_args) == 1 and # exactly one arg - not noarg_constructor) or - # all but at most one arg defaulted - (len(constructor_args) >= 1 and - not noarg_constructor and - len(defaulted_args) >= len(constructor_args) - 1)) - initializer_list_constructor = bool( - onearg_constructor and - Search(r'\bstd\s*::\s*initializer_list\b', constructor_args[0])) - copy_constructor = bool( - onearg_constructor and - Match(r'(const\s+)?%s(\s*<[^>]*>)?(\s+const)?\s*(?:<\w+>\s*)?&' - % re.escape(base_classname), constructor_args[0].strip())) - - if (not is_marked_explicit and - onearg_constructor and - not initializer_list_constructor and - not copy_constructor): - if defaulted_args: - error(filename, linenum, 'runtime/explicit', 5, - 'Constructors callable with one argument ' - 'should be marked explicit.') - else: - error(filename, linenum, 'runtime/explicit', 5, - 'Single-parameter constructors should be marked explicit.') - elif is_marked_explicit and not onearg_constructor: - if noarg_constructor: - error(filename, linenum, 'runtime/explicit', 5, - 'Zero-parameter constructors should not be marked explicit.') - else: - error(filename, linenum, 'runtime/explicit', 0, - 'Constructors that require multiple arguments ' - 'should not be marked explicit.') - - -def CheckSpacingForFunctionCall(filename, clean_lines, linenum, error): - """Checks for the correctness of various spacing around function calls. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Since function calls often occur inside if/for/while/switch - # expressions - which have their own, more liberal conventions - we - # first see if we should be looking inside such an expression for a - # function call, to which we can apply more strict standards. - fncall = line # if there's no control flow construct, look at whole line - for pattern in (r'\bif\s*\((.*)\)\s*{', - r'\bfor\s*\((.*)\)\s*{', - r'\bwhile\s*\((.*)\)\s*[{;]', - r'\bswitch\s*\((.*)\)\s*{'): - match = Search(pattern, line) - if match: - fncall = match.group(1) # look inside the parens for function calls - break - - # Except in if/for/while/switch, there should never be space - # immediately inside parens (eg "f( 3, 4 )"). We make an exception - # for nested parens ( (a+b) + c ). Likewise, there should never be - # a space before a ( when it's a function argument. I assume it's a - # function argument when the char before the whitespace is legal in - # a function name (alnum + _) and we're not starting a macro. Also ignore - # pointers and references to arrays and functions coz they're too tricky: - # we use a very simple way to recognize these: - # " (something)(maybe-something)" or - # " (something)(maybe-something," or - # " (something)[something]" - # Note that we assume the contents of [] to be short enough that - # they'll never need to wrap. - if ( # Ignore control structures. - not Search(r'\b(if|for|while|switch|return|new|delete|catch|sizeof)\b', - fncall) and - # Ignore pointers/references to functions. - not Search(r' \([^)]+\)\([^)]*(\)|,$)', fncall) and - # Ignore pointers/references to arrays. - not Search(r' \([^)]+\)\[[^\]]+\]', fncall)): - if Search(r'\w\s*\(\s(?!\s*\\$)', fncall): # a ( used for a fn call - error(filename, linenum, 'whitespace/parens', 4, - 'Extra space after ( in function call') - elif Search(r'\(\s+(?!(\s*\\)|\()', fncall): - error(filename, linenum, 'whitespace/parens', 2, - 'Extra space after (') - if (Search(r'\w\s+\(', fncall) and - not Search(r'#\s*define|typedef|using\s+\w+\s*=', fncall) and - not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall) and - not Search(r'\bcase\s+\(', fncall)): - # TODO(unknown): Space after an operator function seem to be a common - # error, silence those for now by restricting them to highest verbosity. - if Search(r'\boperator_*\b', line): - error(filename, linenum, 'whitespace/parens', 0, - 'Extra space before ( in function call') - else: - error(filename, linenum, 'whitespace/parens', 4, - 'Extra space before ( in function call') - # If the ) is followed only by a newline or a { + newline, assume it's - # part of a control statement (if/while/etc), and don't complain - if Search(r'[^)]\s+\)\s*[^{\s]', fncall): - # If the closing parenthesis is preceded by only whitespaces, - # try to give a more descriptive error message. - if Search(r'^\s+\)', fncall): - error(filename, linenum, 'whitespace/parens', 2, - 'Closing ) should be moved to the previous line') - else: - error(filename, linenum, 'whitespace/parens', 2, - 'Extra space before )') - - -def IsBlankLine(line): - """Returns true if the given line is blank. - - We consider a line to be blank if the line is empty or consists of - only white spaces. - - Args: - line: A line of a string. - - Returns: - True, if the given line is blank. - """ - return not line or line.isspace() - - -def CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line, - error): - is_namespace_indent_item = ( - len(nesting_state.stack) > 1 and - nesting_state.stack[-1].check_namespace_indentation and - isinstance(nesting_state.previous_stack_top, _NamespaceInfo) and - nesting_state.previous_stack_top == nesting_state.stack[-2]) - - if ShouldCheckNamespaceIndentation(nesting_state, is_namespace_indent_item, - clean_lines.elided, line): - CheckItemIndentationInNamespace(filename, clean_lines.elided, - line, error) - - -def CheckForFunctionLengths(filename, clean_lines, linenum, - function_state, error): - """Reports for long function bodies. - - For an overview why this is done, see: - http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions - - Uses a simplistic algorithm assuming other style guidelines - (especially spacing) are followed. - Only checks unindented functions, so class members are unchecked. - Trivial bodies are unchecked, so constructors with huge initializer lists - may be missed. - Blank/comment lines are not counted so as to avoid encouraging the removal - of vertical space and comments just to get through a lint check. - NOLINT *on the last line of a function* disables this check. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - function_state: Current function name and lines in body so far. - error: The function to call with any errors found. - """ - lines = clean_lines.lines - line = lines[linenum] - joined_line = '' - - starting_func = False - regexp = r'(\w(\w|::|\*|\&|\s)*)\(' # decls * & space::name( ... - match_result = Match(regexp, line) - if match_result: - # If the name is all caps and underscores, figure it's a macro and - # ignore it, unless it's TEST or TEST_F. - function_name = match_result.group(1).split()[-1] - if function_name == 'TEST' or function_name == 'TEST_F' or ( - not Match(r'[A-Z_]+$', function_name)): - starting_func = True - - if starting_func: - body_found = False - for start_linenum in xrange(linenum, clean_lines.NumLines()): - start_line = lines[start_linenum] - joined_line += ' ' + start_line.lstrip() - if Search(r'(;|})', start_line): # Declarations and trivial functions - body_found = True - break # ... ignore - elif Search(r'{', start_line): - body_found = True - function = Search(r'((\w|:)*)\(', line).group(1) - if Match(r'TEST', function): # Handle TEST... macros - parameter_regexp = Search(r'(\(.*\))', joined_line) - if parameter_regexp: # Ignore bad syntax - function += parameter_regexp.group(1) - else: - function += '()' - function_state.Begin(function) - break - if not body_found: - # No body for the function (or evidence of a non-function) was found. - error(filename, linenum, 'readability/fn_size', 5, - 'Lint failed to find start of function body.') - elif Match(r'^\}\s*$', line): # function end - function_state.Check(error, filename, linenum) - function_state.End() - elif not Match(r'^\s*$', line): - function_state.Count() # Count non-blank/non-comment lines. - - -_RE_PATTERN_TODO = re.compile(r'^//(\s*)TODO(\(.+?\))?:?(\s|$)?') - - -def CheckComment(line, filename, linenum, next_line_start, error): - """Checks for common mistakes in comments. - - Args: - line: The line in question. - filename: The name of the current file. - linenum: The number of the line to check. - next_line_start: The first non-whitespace column of the next line. - error: The function to call with any errors found. - """ - commentpos = line.find('//') - if commentpos != -1: - # Check if the // may be in quotes. If so, ignore it - # Comparisons made explicit for clarity -- pylint: disable=g-explicit-bool-comparison - if (line.count('"', 0, commentpos) - - line.count('\\"', 0, commentpos)) % 2 == 0: # not in quotes - # Allow one space for new scopes, two spaces otherwise: - if (not (Match(r'^.*{ *//', line) and next_line_start == commentpos) and - ((commentpos >= 1 and - line[commentpos-1] not in string.whitespace) or - (commentpos >= 2 and - line[commentpos-2] not in string.whitespace))): - error(filename, linenum, 'whitespace/comments', 2, - 'At least two spaces is best between code and comments') - - # Checks for common mistakes in TODO comments. - comment = line[commentpos:] - match = _RE_PATTERN_TODO.match(comment) - if match: - # One whitespace is correct; zero whitespace is handled elsewhere. - leading_whitespace = match.group(1) - if len(leading_whitespace) > 1: - error(filename, linenum, 'whitespace/todo', 2, - 'Too many spaces before TODO') - - username = match.group(2) - if not username: - error(filename, linenum, 'readability/todo', 2, - 'Missing username in TODO; it should look like ' - '"// TODO(my_username): Stuff."') - - middle_whitespace = match.group(3) - # Comparisons made explicit for correctness -- pylint: disable=g-explicit-bool-comparison - if middle_whitespace != ' ' and middle_whitespace != '': - error(filename, linenum, 'whitespace/todo', 2, - 'TODO(my_username) should be followed by a space') - - # If the comment contains an alphanumeric character, there - # should be a space somewhere between it and the // unless - # it's a /// or //! Doxygen comment. - if (Match(r'//[^ ]*\w', comment) and - not Match(r'(///|//\!)(\s+|$)', comment)): - error(filename, linenum, 'whitespace/comments', 4, - 'Should have a space between // and comment') - - -def CheckAccess(filename, clean_lines, linenum, nesting_state, error): - """Checks for improper use of DISALLOW* macros. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] # get rid of comments and strings - - matched = Match((r'\s*(DISALLOW_COPY_AND_ASSIGN|' - r'DISALLOW_IMPLICIT_CONSTRUCTORS)'), line) - if not matched: - return - if nesting_state.stack and isinstance(nesting_state.stack[-1], _ClassInfo): - if nesting_state.stack[-1].access != 'private': - error(filename, linenum, 'readability/constructors', 3, - '%s must be in the private: section' % matched.group(1)) - - else: - # Found DISALLOW* macro outside a class declaration, or perhaps it - # was used inside a function when it should have been part of the - # class declaration. We could issue a warning here, but it - # probably resulted in a compiler error already. - pass - - -def CheckSpacing(filename, clean_lines, linenum, nesting_state, error): - """Checks for the correctness of various spacing issues in the code. - - Things we check for: spaces around operators, spaces after - if/for/while/switch, no spaces around parens in function calls, two - spaces between code and comment, don't start a block with a blank - line, don't end a function with a blank line, don't add a blank line - after public/protected/private, don't have too many blank lines in a row. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - - # Don't use "elided" lines here, otherwise we can't check commented lines. - # Don't want to use "raw" either, because we don't want to check inside C++11 - # raw strings, - raw = clean_lines.lines_without_raw_strings - line = raw[linenum] - - # Before nixing comments, check if the line is blank for no good - # reason. This includes the first line after a block is opened, and - # blank lines at the end of a function (ie, right before a line like '}' - # - # Skip all the blank line checks if we are immediately inside a - # namespace body. In other words, don't issue blank line warnings - # for this block: - # namespace { - # - # } - # - # A warning about missing end of namespace comments will be issued instead. - # - # Also skip blank line checks for 'extern "C"' blocks, which are formatted - # like namespaces. - if (IsBlankLine(line) and - not nesting_state.InNamespaceBody() and - not nesting_state.InExternC()): - elided = clean_lines.elided - prev_line = elided[linenum - 1] - prevbrace = prev_line.rfind('{') - # TODO(unknown): Don't complain if line before blank line, and line after, - # both start with alnums and are indented the same amount. - # This ignores whitespace at the start of a namespace block - # because those are not usually indented. - if prevbrace != -1 and prev_line[prevbrace:].find('}') == -1: - # OK, we have a blank line at the start of a code block. Before we - # complain, we check if it is an exception to the rule: The previous - # non-empty line has the parameters of a function header that are indented - # 4 spaces (because they did not fit in a 80 column line when placed on - # the same line as the function name). We also check for the case where - # the previous line is indented 6 spaces, which may happen when the - # initializers of a constructor do not fit into a 80 column line. - exception = False - if Match(r' {6}\w', prev_line): # Initializer list? - # We are looking for the opening column of initializer list, which - # should be indented 4 spaces to cause 6 space indentation afterwards. - search_position = linenum-2 - while (search_position >= 0 - and Match(r' {6}\w', elided[search_position])): - search_position -= 1 - exception = (search_position >= 0 - and elided[search_position][:5] == ' :') - else: - # Search for the function arguments or an initializer list. We use a - # simple heuristic here: If the line is indented 4 spaces; and we have a - # closing paren, without the opening paren, followed by an opening brace - # or colon (for initializer lists) we assume that it is the last line of - # a function header. If we have a colon indented 4 spaces, it is an - # initializer list. - exception = (Match(r' {4}\w[^\(]*\)\s*(const\s*)?(\{\s*$|:)', - prev_line) - or Match(r' {4}:', prev_line)) - - if not exception: - error(filename, linenum, 'whitespace/blank_line', 2, - 'Redundant blank line at the start of a code block ' - 'should be deleted.') - # Ignore blank lines at the end of a block in a long if-else - # chain, like this: - # if (condition1) { - # // Something followed by a blank line - # - # } else if (condition2) { - # // Something else - # } - if linenum + 1 < clean_lines.NumLines(): - next_line = raw[linenum + 1] - if (next_line - and Match(r'\s*}', next_line) - and next_line.find('} else ') == -1): - error(filename, linenum, 'whitespace/blank_line', 3, - 'Redundant blank line at the end of a code block ' - 'should be deleted.') - - matched = Match(r'\s*(public|protected|private):', prev_line) - if matched: - error(filename, linenum, 'whitespace/blank_line', 3, - 'Do not leave a blank line after "%s:"' % matched.group(1)) - - # Next, check comments - next_line_start = 0 - if linenum + 1 < clean_lines.NumLines(): - next_line = raw[linenum + 1] - next_line_start = len(next_line) - len(next_line.lstrip()) - CheckComment(line, filename, linenum, next_line_start, error) - - # get rid of comments and strings - line = clean_lines.elided[linenum] - - # You shouldn't have spaces before your brackets, except maybe after - # 'delete []' or 'return []() {};' - if Search(r'\w\s+\[', line) and not Search(r'(?:delete|return)\s+\[', line): - error(filename, linenum, 'whitespace/braces', 5, - 'Extra space before [') - - # In range-based for, we wanted spaces before and after the colon, but - # not around "::" tokens that might appear. - if (Search(r'for *\(.*[^:]:[^: ]', line) or - Search(r'for *\(.*[^: ]:[^:]', line)): - error(filename, linenum, 'whitespace/forcolon', 2, - 'Missing space around colon in range-based for loop') - - -def CheckOperatorSpacing(filename, clean_lines, linenum, error): - """Checks for horizontal spacing around operators. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Don't try to do spacing checks for operator methods. Do this by - # replacing the troublesome characters with something else, - # preserving column position for all other characters. - # - # The replacement is done repeatedly to avoid false positives from - # operators that call operators. - while True: - match = Match(r'^(.*\boperator\b)(\S+)(\s*\(.*)$', line) - if match: - line = match.group(1) + ('_' * len(match.group(2))) + match.group(3) - else: - break - - # We allow no-spaces around = within an if: "if ( (a=Foo()) == 0 )". - # Otherwise not. Note we only check for non-spaces on *both* sides; - # sometimes people put non-spaces on one side when aligning ='s among - # many lines (not that this is behavior that I approve of...) - if ((Search(r'[\w.]=', line) or - Search(r'=[\w.]', line)) - and not Search(r'\b(if|while|for) ', line) - # Operators taken from [lex.operators] in C++11 standard. - and not Search(r'(>=|<=|==|!=|&=|\^=|\|=|\+=|\*=|\/=|\%=)', line) - and not Search(r'operator=', line)): - error(filename, linenum, 'whitespace/operators', 4, - 'Missing spaces around =') - - # It's ok not to have spaces around binary operators like + - * /, but if - # there's too little whitespace, we get concerned. It's hard to tell, - # though, so we punt on this one for now. TODO. - - # You should always have whitespace around binary operators. - # - # Check <= and >= first to avoid false positives with < and >, then - # check non-include lines for spacing around < and >. - # - # If the operator is followed by a comma, assume it's be used in a - # macro context and don't do any checks. This avoids false - # positives. - # - # Note that && is not included here. Those are checked separately - # in CheckRValueReference - match = Search(r'[^<>=!\s](==|!=|<=|>=|\|\|)[^<>=!\s,;\)]', line) - if match: - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around %s' % match.group(1)) - elif not Match(r'#.*include', line): - # Look for < that is not surrounded by spaces. This is only - # triggered if both sides are missing spaces, even though - # technically should should flag if at least one side is missing a - # space. This is done to avoid some false positives with shifts. - match = Match(r'^(.*[^\s<])<[^\s=<,]', line) - if match: - (_, _, end_pos) = CloseExpression( - clean_lines, linenum, len(match.group(1))) - if end_pos <= -1: - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around <') - - # Look for > that is not surrounded by spaces. Similar to the - # above, we only trigger if both sides are missing spaces to avoid - # false positives with shifts. - match = Match(r'^(.*[^-\s>])>[^\s=>,]', line) - if match: - (_, _, start_pos) = ReverseCloseExpression( - clean_lines, linenum, len(match.group(1))) - if start_pos <= -1: - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around >') - - # We allow no-spaces around << when used like this: 10<<20, but - # not otherwise (particularly, not when used as streams) - # - # We also allow operators following an opening parenthesis, since - # those tend to be macros that deal with operators. - match = Search(r'(operator|[^\s(<])(?:L|UL|ULL|l|ul|ull)?<<([^\s,=<])', line) - if (match and not (match.group(1).isdigit() and match.group(2).isdigit()) and - not (match.group(1) == 'operator' and match.group(2) == ';')): - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around <<') - - # We allow no-spaces around >> for almost anything. This is because - # C++11 allows ">>" to close nested templates, which accounts for - # most cases when ">>" is not followed by a space. - # - # We still warn on ">>" followed by alpha character, because that is - # likely due to ">>" being used for right shifts, e.g.: - # value >> alpha - # - # When ">>" is used to close templates, the alphanumeric letter that - # follows would be part of an identifier, and there should still be - # a space separating the template type and the identifier. - # type> alpha - match = Search(r'>>[a-zA-Z_]', line) - if match: - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around >>') - - # There shouldn't be space around unary operators - match = Search(r'(!\s|~\s|[\s]--[\s;]|[\s]\+\+[\s;])', line) - if match: - error(filename, linenum, 'whitespace/operators', 4, - 'Extra space for operator %s' % match.group(1)) - - -def CheckParenthesisSpacing(filename, clean_lines, linenum, error): - """Checks for horizontal spacing around parentheses. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # No spaces after an if, while, switch, or for - match = Search(r' (if\(|for\(|while\(|switch\()', line) - if match: - error(filename, linenum, 'whitespace/parens', 5, - 'Missing space before ( in %s' % match.group(1)) - - # For if/for/while/switch, the left and right parens should be - # consistent about how many spaces are inside the parens, and - # there should either be zero or one spaces inside the parens. - # We don't want: "if ( foo)" or "if ( foo )". - # Exception: "for ( ; foo; bar)" and "for (foo; bar; )" are allowed. - match = Search(r'\b(if|for|while|switch)\s*' - r'\(([ ]*)(.).*[^ ]+([ ]*)\)\s*{\s*$', - line) - if match: - if len(match.group(2)) != len(match.group(4)): - if not (match.group(3) == ';' and - len(match.group(2)) == 1 + len(match.group(4)) or - not match.group(2) and Search(r'\bfor\s*\(.*; \)', line)): - error(filename, linenum, 'whitespace/parens', 5, - 'Mismatching spaces inside () in %s' % match.group(1)) - if len(match.group(2)) not in [0, 1]: - error(filename, linenum, 'whitespace/parens', 5, - 'Should have zero or one spaces inside ( and ) in %s' % - match.group(1)) - - -def CheckCommaSpacing(filename, clean_lines, linenum, error): - """Checks for horizontal spacing near commas and semicolons. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - raw = clean_lines.lines_without_raw_strings - line = clean_lines.elided[linenum] - - # You should always have a space after a comma (either as fn arg or operator) - # - # This does not apply when the non-space character following the - # comma is another comma, since the only time when that happens is - # for empty macro arguments. - # - # We run this check in two passes: first pass on elided lines to - # verify that lines contain missing whitespaces, second pass on raw - # lines to confirm that those missing whitespaces are not due to - # elided comments. - if (Search(r',[^,\s]', ReplaceAll(r'\boperator\s*,\s*\(', 'F(', line)) and - Search(r',[^,\s]', raw[linenum])): - error(filename, linenum, 'whitespace/comma', 3, - 'Missing space after ,') - - # You should always have a space after a semicolon - # except for few corner cases - # TODO(unknown): clarify if 'if (1) { return 1;}' is requires one more - # space after ; - if Search(r';[^\s};\\)/]', line): - error(filename, linenum, 'whitespace/semicolon', 3, - 'Missing space after ;') - - -def CheckBracesSpacing(filename, clean_lines, linenum, error): - """Checks for horizontal spacing near commas. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Except after an opening paren, or after another opening brace (in case of - # an initializer list, for instance), you should have spaces before your - # braces. And since you should never have braces at the beginning of a line, - # this is an easy test. - match = Match(r'^(.*[^ ({>]){', line) - if match: - # Try a bit harder to check for brace initialization. This - # happens in one of the following forms: - # Constructor() : initializer_list_{} { ... } - # Constructor{}.MemberFunction() - # Type variable{}; - # FunctionCall(type{}, ...); - # LastArgument(..., type{}); - # LOG(INFO) << type{} << " ..."; - # map_of_type[{...}] = ...; - # ternary = expr ? new type{} : nullptr; - # OuterTemplate{}> - # - # We check for the character following the closing brace, and - # silence the warning if it's one of those listed above, i.e. - # "{.;,)<>]:". - # - # To account for nested initializer list, we allow any number of - # closing braces up to "{;,)<". We can't simply silence the - # warning on first sight of closing brace, because that would - # cause false negatives for things that are not initializer lists. - # Silence this: But not this: - # Outer{ if (...) { - # Inner{...} if (...){ // Missing space before { - # }; } - # - # There is a false negative with this approach if people inserted - # spurious semicolons, e.g. "if (cond){};", but we will catch the - # spurious semicolon with a separate check. - (endline, endlinenum, endpos) = CloseExpression( - clean_lines, linenum, len(match.group(1))) - trailing_text = '' - if endpos > -1: - trailing_text = endline[endpos:] - for offset in xrange(endlinenum + 1, - min(endlinenum + 3, clean_lines.NumLines() - 1)): - trailing_text += clean_lines.elided[offset] - if not Match(r'^[\s}]*[{.;,)<>\]:]', trailing_text): - error(filename, linenum, 'whitespace/braces', 5, - 'Missing space before {') - - # Make sure '} else {' has spaces. - if Search(r'}else', line): - error(filename, linenum, 'whitespace/braces', 5, - 'Missing space before else') - - # You shouldn't have a space before a semicolon at the end of the line. - # There's a special case for "for" since the style guide allows space before - # the semicolon there. - if Search(r':\s*;\s*$', line): - error(filename, linenum, 'whitespace/semicolon', 5, - 'Semicolon defining empty statement. Use {} instead.') - elif Search(r'^\s*;\s*$', line): - error(filename, linenum, 'whitespace/semicolon', 5, - 'Line contains only semicolon. If this should be an empty statement, ' - 'use {} instead.') - elif (Search(r'\s+;\s*$', line) and - not Search(r'\bfor\b', line)): - error(filename, linenum, 'whitespace/semicolon', 5, - 'Extra space before last semicolon. If this should be an empty ' - 'statement, use {} instead.') - - -def IsDecltype(clean_lines, linenum, column): - """Check if the token ending on (linenum, column) is decltype(). - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: the number of the line to check. - column: end column of the token to check. - Returns: - True if this token is decltype() expression, False otherwise. - """ - (text, _, start_col) = ReverseCloseExpression(clean_lines, linenum, column) - if start_col < 0: - return False - if Search(r'\bdecltype\s*$', text[0:start_col]): - return True - return False - - -def IsTemplateParameterList(clean_lines, linenum, column): - """Check if the token ending on (linenum, column) is the end of template<>. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: the number of the line to check. - column: end column of the token to check. - Returns: - True if this token is end of a template parameter list, False otherwise. - """ - (_, startline, startpos) = ReverseCloseExpression( - clean_lines, linenum, column) - if (startpos > -1 and - Search(r'\btemplate\s*$', clean_lines.elided[startline][0:startpos])): - return True - return False - - -def IsRValueType(typenames, clean_lines, nesting_state, linenum, column): - """Check if the token ending on (linenum, column) is a type. - - Assumes that text to the right of the column is "&&" or a function - name. - - Args: - typenames: set of type names from template-argument-list. - clean_lines: A CleansedLines instance containing the file. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - linenum: the number of the line to check. - column: end column of the token to check. - Returns: - True if this token is a type, False if we are not sure. - """ - prefix = clean_lines.elided[linenum][0:column] - - # Get one word to the left. If we failed to do so, this is most - # likely not a type, since it's unlikely that the type name and "&&" - # would be split across multiple lines. - match = Match(r'^(.*)(\b\w+|[>*)&])\s*$', prefix) - if not match: - return False - - # Check text following the token. If it's "&&>" or "&&," or "&&...", it's - # most likely a rvalue reference used inside a template. - suffix = clean_lines.elided[linenum][column:] - if Match(r'&&\s*(?:[>,]|\.\.\.)', suffix): - return True - - # Check for known types and end of templates: - # int&& variable - # vector&& variable - # - # Because this function is called recursively, we also need to - # recognize pointer and reference types: - # int* Function() - # int& Function() - if (match.group(2) in typenames or - match.group(2) in ['char', 'char16_t', 'char32_t', 'wchar_t', 'bool', - 'short', 'int', 'long', 'signed', 'unsigned', - 'float', 'double', 'void', 'auto', '>', '*', '&']): - return True - - # If we see a close parenthesis, look for decltype on the other side. - # decltype would unambiguously identify a type, anything else is - # probably a parenthesized expression and not a type. - if match.group(2) == ')': - return IsDecltype( - clean_lines, linenum, len(match.group(1)) + len(match.group(2)) - 1) - - # Check for casts and cv-qualifiers. - # match.group(1) remainder - # -------------- --------- - # const_cast< type&& - # const type&& - # type const&& - if Search(r'\b(?:const_cast\s*<|static_cast\s*<|dynamic_cast\s*<|' - r'reinterpret_cast\s*<|\w+\s)\s*$', - match.group(1)): - return True - - # Look for a preceding symbol that might help differentiate the context. - # These are the cases that would be ambiguous: - # match.group(1) remainder - # -------------- --------- - # Call ( expression && - # Declaration ( type&& - # sizeof ( type&& - # if ( expression && - # while ( expression && - # for ( type&& - # for( ; expression && - # statement ; type&& - # block { type&& - # constructor { expression && - start = linenum - line = match.group(1) - match_symbol = None - while start >= 0: - # We want to skip over identifiers and commas to get to a symbol. - # Commas are skipped so that we can find the opening parenthesis - # for function parameter lists. - match_symbol = Match(r'^(.*)([^\w\s,])[\w\s,]*$', line) - if match_symbol: - break - start -= 1 - line = clean_lines.elided[start] - - if not match_symbol: - # Probably the first statement in the file is an rvalue reference - return True - - if match_symbol.group(2) == '}': - # Found closing brace, probably an indicate of this: - # block{} type&& - return True - - if match_symbol.group(2) == ';': - # Found semicolon, probably one of these: - # for(; expression && - # statement; type&& - - # Look for the previous 'for(' in the previous lines. - before_text = match_symbol.group(1) - for i in xrange(start - 1, max(start - 6, 0), -1): - before_text = clean_lines.elided[i] + before_text - if Search(r'for\s*\([^{};]*$', before_text): - # This is the condition inside a for-loop - return False - - # Did not find a for-init-statement before this semicolon, so this - # is probably a new statement and not a condition. - return True - - if match_symbol.group(2) == '{': - # Found opening brace, probably one of these: - # block{ type&& = ... ; } - # constructor{ expression && expression } - - # Look for a closing brace or a semicolon. If we see a semicolon - # first, this is probably a rvalue reference. - line = clean_lines.elided[start][0:len(match_symbol.group(1)) + 1] - end = start - depth = 1 - while True: - for ch in line: - if ch == ';': - return True - elif ch == '{': - depth += 1 - elif ch == '}': - depth -= 1 - if depth == 0: - return False - end += 1 - if end >= clean_lines.NumLines(): - break - line = clean_lines.elided[end] - # Incomplete program? - return False - - if match_symbol.group(2) == '(': - # Opening parenthesis. Need to check what's to the left of the - # parenthesis. Look back one extra line for additional context. - before_text = match_symbol.group(1) - if linenum > 1: - before_text = clean_lines.elided[linenum - 1] + before_text - before_text = match_symbol.group(1) - - # Patterns that are likely to be types: - # [](type&& - # for (type&& - # sizeof(type&& - # operator=(type&& - # - if Search(r'(?:\]|\bfor|\bsizeof|\boperator\s*\S+\s*)\s*$', before_text): - return True - - # Patterns that are likely to be expressions: - # if (expression && - # while (expression && - # : initializer(expression && - # , initializer(expression && - # ( FunctionCall(expression && - # + FunctionCall(expression && - # + (expression && - # - # The last '+' represents operators such as '+' and '-'. - if Search(r'(?:\bif|\bwhile|[-+=%^(]*>)?\s*$', - match_symbol.group(1)) - if match_func: - # Check for constructors, which don't have return types. - if Search(r'\b(?:explicit|inline)$', match_func.group(1)): - return True - implicit_constructor = Match(r'\s*(\w+)\((?:const\s+)?(\w+)', prefix) - if (implicit_constructor and - implicit_constructor.group(1) == implicit_constructor.group(2)): - return True - return IsRValueType(typenames, clean_lines, nesting_state, linenum, - len(match_func.group(1))) - - # Nothing before the function name. If this is inside a block scope, - # this is probably a function call. - return not (nesting_state.previous_stack_top and - nesting_state.previous_stack_top.IsBlockInfo()) - - if match_symbol.group(2) == '>': - # Possibly a closing bracket, check that what's on the other side - # looks like the start of a template. - return IsTemplateParameterList( - clean_lines, start, len(match_symbol.group(1))) - - # Some other symbol, usually something like "a=b&&c". This is most - # likely not a type. - return False - - -def IsDeletedOrDefault(clean_lines, linenum): - """Check if current constructor or operator is deleted or default. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - Returns: - True if this is a deleted or default constructor. - """ - open_paren = clean_lines.elided[linenum].find('(') - if open_paren < 0: - return False - (close_line, _, close_paren) = CloseExpression( - clean_lines, linenum, open_paren) - if close_paren < 0: - return False - return Match(r'\s*=\s*(?:delete|default)\b', close_line[close_paren:]) - - -def IsRValueAllowed(clean_lines, linenum, typenames): - """Check if RValue reference is allowed on a particular line. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - typenames: set of type names from template-argument-list. - Returns: - True if line is within the region where RValue references are allowed. - """ - # Allow region marked by PUSH/POP macros - for i in xrange(linenum, 0, -1): - line = clean_lines.elided[i] - if Match(r'GOOGLE_ALLOW_RVALUE_REFERENCES_(?:PUSH|POP)', line): - if not line.endswith('PUSH'): - return False - for j in xrange(linenum, clean_lines.NumLines(), 1): - line = clean_lines.elided[j] - if Match(r'GOOGLE_ALLOW_RVALUE_REFERENCES_(?:PUSH|POP)', line): - return line.endswith('POP') - - # Allow operator= - line = clean_lines.elided[linenum] - if Search(r'\boperator\s*=\s*\(', line): - return IsDeletedOrDefault(clean_lines, linenum) - - # Allow constructors - match = Match(r'\s*(?:[\w<>]+::)*([\w<>]+)\s*::\s*([\w<>]+)\s*\(', line) - if match and match.group(1) == match.group(2): - return IsDeletedOrDefault(clean_lines, linenum) - if Search(r'\b(?:explicit|inline)\s+[\w<>]+\s*\(', line): - return IsDeletedOrDefault(clean_lines, linenum) - - if Match(r'\s*[\w<>]+\s*\(', line): - previous_line = 'ReturnType' - if linenum > 0: - previous_line = clean_lines.elided[linenum - 1] - if Match(r'^\s*$', previous_line) or Search(r'[{}:;]\s*$', previous_line): - return IsDeletedOrDefault(clean_lines, linenum) - - # Reject types not mentioned in template-argument-list - while line: - match = Match(r'^.*?(\w+)\s*&&(.*)$', line) - if not match: - break - if match.group(1) not in typenames: - return False - line = match.group(2) - - # All RValue types that were in template-argument-list should have - # been removed by now. Those were allowed, assuming that they will - # be forwarded. - # - # If there are no remaining RValue types left (i.e. types that were - # not found in template-argument-list), flag those as not allowed. - return line.find('&&') < 0 - - -def GetTemplateArgs(clean_lines, linenum): - """Find list of template arguments associated with this function declaration. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: Line number containing the start of the function declaration, - usually one line after the end of the template-argument-list. - Returns: - Set of type names, or empty set if this does not appear to have - any template parameters. - """ - # Find start of function - func_line = linenum - while func_line > 0: - line = clean_lines.elided[func_line] - if Match(r'^\s*$', line): - return set() - if line.find('(') >= 0: - break - func_line -= 1 - if func_line == 0: - return set() - - # Collapse template-argument-list into a single string - argument_list = '' - match = Match(r'^(\s*template\s*)<', clean_lines.elided[func_line]) - if match: - # template-argument-list on the same line as function name - start_col = len(match.group(1)) - _, end_line, end_col = CloseExpression(clean_lines, func_line, start_col) - if end_col > -1 and end_line == func_line: - start_col += 1 # Skip the opening bracket - argument_list = clean_lines.elided[func_line][start_col:end_col] - - elif func_line > 1: - # template-argument-list one line before function name - match = Match(r'^(.*)>\s*$', clean_lines.elided[func_line - 1]) - if match: - end_col = len(match.group(1)) - _, start_line, start_col = ReverseCloseExpression( - clean_lines, func_line - 1, end_col) - if start_col > -1: - start_col += 1 # Skip the opening bracket - while start_line < func_line - 1: - argument_list += clean_lines.elided[start_line][start_col:] - start_col = 0 - start_line += 1 - argument_list += clean_lines.elided[func_line - 1][start_col:end_col] - - if not argument_list: - return set() - - # Extract type names - typenames = set() - while True: - match = Match(r'^[,\s]*(?:typename|class)(?:\.\.\.)?\s+(\w+)(.*)$', - argument_list) - if not match: - break - typenames.add(match.group(1)) - argument_list = match.group(2) - return typenames - - -def CheckRValueReference(filename, clean_lines, linenum, nesting_state, error): - """Check for rvalue references. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - # Find lines missing spaces around &&. - # TODO(unknown): currently we don't check for rvalue references - # with spaces surrounding the && to avoid false positives with - # boolean expressions. - line = clean_lines.elided[linenum] - match = Match(r'^(.*\S)&&', line) - if not match: - match = Match(r'(.*)&&\S', line) - if (not match) or '(&&)' in line or Search(r'\boperator\s*$', match.group(1)): - return - - # Either poorly formed && or an rvalue reference, check the context - # to get a more accurate error message. Mostly we want to determine - # if what's to the left of "&&" is a type or not. - typenames = GetTemplateArgs(clean_lines, linenum) - and_pos = len(match.group(1)) - if IsRValueType(typenames, clean_lines, nesting_state, linenum, and_pos): - if not IsRValueAllowed(clean_lines, linenum, typenames): - error(filename, linenum, 'build/c++11', 3, - 'RValue references are an unapproved C++ feature.') - else: - error(filename, linenum, 'whitespace/operators', 3, - 'Missing spaces around &&') - - -def CheckSectionSpacing(filename, clean_lines, class_info, linenum, error): - """Checks for additional blank line issues related to sections. - - Currently the only thing checked here is blank line before protected/private. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - class_info: A _ClassInfo objects. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - # Skip checks if the class is small, where small means 25 lines or less. - # 25 lines seems like a good cutoff since that's the usual height of - # terminals, and any class that can't fit in one screen can't really - # be considered "small". - # - # Also skip checks if we are on the first line. This accounts for - # classes that look like - # class Foo { public: ... }; - # - # If we didn't find the end of the class, last_line would be zero, - # and the check will be skipped by the first condition. - if (class_info.last_line - class_info.starting_linenum <= 24 or - linenum <= class_info.starting_linenum): - return - - matched = Match(r'\s*(public|protected|private):', clean_lines.lines[linenum]) - if matched: - # Issue warning if the line before public/protected/private was - # not a blank line, but don't do this if the previous line contains - # "class" or "struct". This can happen two ways: - # - We are at the beginning of the class. - # - We are forward-declaring an inner class that is semantically - # private, but needed to be public for implementation reasons. - # Also ignores cases where the previous line ends with a backslash as can be - # common when defining classes in C macros. - prev_line = clean_lines.lines[linenum - 1] - if (not IsBlankLine(prev_line) and - not Search(r'\b(class|struct)\b', prev_line) and - not Search(r'\\$', prev_line)): - # Try a bit harder to find the beginning of the class. This is to - # account for multi-line base-specifier lists, e.g.: - # class Derived - # : public Base { - end_class_head = class_info.starting_linenum - for i in range(class_info.starting_linenum, linenum): - if Search(r'\{\s*$', clean_lines.lines[i]): - end_class_head = i - break - if end_class_head < linenum - 1: - error(filename, linenum, 'whitespace/blank_line', 3, - '"%s:" should be preceded by a blank line' % matched.group(1)) - - -def GetPreviousNonBlankLine(clean_lines, linenum): - """Return the most recent non-blank line and its line number. - - Args: - clean_lines: A CleansedLines instance containing the file contents. - linenum: The number of the line to check. - - Returns: - A tuple with two elements. The first element is the contents of the last - non-blank line before the current line, or the empty string if this is the - first non-blank line. The second is the line number of that line, or -1 - if this is the first non-blank line. - """ - - prevlinenum = linenum - 1 - while prevlinenum >= 0: - prevline = clean_lines.elided[prevlinenum] - if not IsBlankLine(prevline): # if not a blank line... - return (prevline, prevlinenum) - prevlinenum -= 1 - return ('', -1) - - -def CheckBraces(filename, clean_lines, linenum, error): - """Looks for misplaced braces (e.g. at the end of line). - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - - line = clean_lines.elided[linenum] # get rid of comments and strings - - if Match(r'\s*{\s*$', line): - # We allow an open brace to start a line in the case where someone is using - # braces in a block to explicitly create a new scope, which is commonly used - # to control the lifetime of stack-allocated variables. Braces are also - # used for brace initializers inside function calls. We don't detect this - # perfectly: we just don't complain if the last non-whitespace character on - # the previous non-blank line is ',', ';', ':', '(', '{', or '}', or if the - # previous line starts a preprocessor block. - prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0] - if (not Search(r'[,;:}{(]\s*$', prevline) and - not Match(r'\s*#', prevline)): - error(filename, linenum, 'whitespace/braces', 4, - '{ should almost always be at the end of the previous line') - - # An else clause should be on the same line as the preceding closing brace. - if Match(r'\s*else\b\s*(?:if\b|\{|$)', line): - prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0] - if Match(r'\s*}\s*$', prevline): - error(filename, linenum, 'whitespace/newline', 4, - 'An else should appear on the same line as the preceding }') - - # If braces come on one side of an else, they should be on both. - # However, we have to worry about "else if" that spans multiple lines! - if Search(r'else if\s*\(', line): # could be multi-line if - brace_on_left = bool(Search(r'}\s*else if\s*\(', line)) - # find the ( after the if - pos = line.find('else if') - pos = line.find('(', pos) - if pos > 0: - (endline, _, endpos) = CloseExpression(clean_lines, linenum, pos) - brace_on_right = endline[endpos:].find('{') != -1 - if brace_on_left != brace_on_right: # must be brace after if - error(filename, linenum, 'readability/braces', 5, - 'If an else has a brace on one side, it should have it on both') - elif Search(r'}\s*else[^{]*$', line) or Match(r'[^}]*else\s*{', line): - error(filename, linenum, 'readability/braces', 5, - 'If an else has a brace on one side, it should have it on both') - - # Likewise, an else should never have the else clause on the same line - if Search(r'\belse [^\s{]', line) and not Search(r'\belse if\b', line): - error(filename, linenum, 'whitespace/newline', 4, - 'Else clause should never be on same line as else (use 2 lines)') - - # In the same way, a do/while should never be on one line - if Match(r'\s*do [^\s{]', line): - error(filename, linenum, 'whitespace/newline', 4, - 'do/while clauses should not be on a single line') - - # Check single-line if/else bodies. The style guide says 'curly braces are not - # required for single-line statements'. We additionally allow multi-line, - # single statements, but we reject anything with more than one semicolon in - # it. This means that the first semicolon after the if should be at the end of - # its line, and the line after that should have an indent level equal to or - # lower than the if. We also check for ambiguous if/else nesting without - # braces. - if_else_match = Search(r'\b(if\s*\(|else\b)', line) - if if_else_match and not Match(r'\s*#', line): - if_indent = GetIndentLevel(line) - endline, endlinenum, endpos = line, linenum, if_else_match.end() - if_match = Search(r'\bif\s*\(', line) - if if_match: - # This could be a multiline if condition, so find the end first. - pos = if_match.end() - 1 - (endline, endlinenum, endpos) = CloseExpression(clean_lines, linenum, pos) - # Check for an opening brace, either directly after the if or on the next - # line. If found, this isn't a single-statement conditional. - if (not Match(r'\s*{', endline[endpos:]) - and not (Match(r'\s*$', endline[endpos:]) - and endlinenum < (len(clean_lines.elided) - 1) - and Match(r'\s*{', clean_lines.elided[endlinenum + 1]))): - while (endlinenum < len(clean_lines.elided) - and ';' not in clean_lines.elided[endlinenum][endpos:]): - endlinenum += 1 - endpos = 0 - if endlinenum < len(clean_lines.elided): - endline = clean_lines.elided[endlinenum] - # We allow a mix of whitespace and closing braces (e.g. for one-liner - # methods) and a single \ after the semicolon (for macros) - endpos = endline.find(';') - if not Match(r';[\s}]*(\\?)$', endline[endpos:]): - # Semicolon isn't the last character, there's something trailing. - # Output a warning if the semicolon is not contained inside - # a lambda expression. - if not Match(r'^[^{};]*\[[^\[\]]*\][^{}]*\{[^{}]*\}\s*\)*[;,]\s*$', - endline): - error(filename, linenum, 'readability/braces', 4, - 'If/else bodies with multiple statements require braces') - elif endlinenum < len(clean_lines.elided) - 1: - # Make sure the next line is dedented - next_line = clean_lines.elided[endlinenum + 1] - next_indent = GetIndentLevel(next_line) - # With ambiguous nested if statements, this will error out on the - # if that *doesn't* match the else, regardless of whether it's the - # inner one or outer one. - if (if_match and Match(r'\s*else\b', next_line) - and next_indent != if_indent): - error(filename, linenum, 'readability/braces', 4, - 'Else clause should be indented at the same level as if. ' - 'Ambiguous nested if/else chains require braces.') - elif next_indent > if_indent: - error(filename, linenum, 'readability/braces', 4, - 'If/else bodies with multiple statements require braces') - - -def CheckTrailingSemicolon(filename, clean_lines, linenum, error): - """Looks for redundant trailing semicolon. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - - line = clean_lines.elided[linenum] - - # Block bodies should not be followed by a semicolon. Due to C++11 - # brace initialization, there are more places where semicolons are - # required than not, so we use a whitelist approach to check these - # rather than a blacklist. These are the places where "};" should - # be replaced by just "}": - # 1. Some flavor of block following closing parenthesis: - # for (;;) {}; - # while (...) {}; - # switch (...) {}; - # Function(...) {}; - # if (...) {}; - # if (...) else if (...) {}; - # - # 2. else block: - # if (...) else {}; - # - # 3. const member function: - # Function(...) const {}; - # - # 4. Block following some statement: - # x = 42; - # {}; - # - # 5. Block at the beginning of a function: - # Function(...) { - # {}; - # } - # - # Note that naively checking for the preceding "{" will also match - # braces inside multi-dimensional arrays, but this is fine since - # that expression will not contain semicolons. - # - # 6. Block following another block: - # while (true) {} - # {}; - # - # 7. End of namespaces: - # namespace {}; - # - # These semicolons seems far more common than other kinds of - # redundant semicolons, possibly due to people converting classes - # to namespaces. For now we do not warn for this case. - # - # Try matching case 1 first. - match = Match(r'^(.*\)\s*)\{', line) - if match: - # Matched closing parenthesis (case 1). Check the token before the - # matching opening parenthesis, and don't warn if it looks like a - # macro. This avoids these false positives: - # - macro that defines a base class - # - multi-line macro that defines a base class - # - macro that defines the whole class-head - # - # But we still issue warnings for macros that we know are safe to - # warn, specifically: - # - TEST, TEST_F, TEST_P, MATCHER, MATCHER_P - # - TYPED_TEST - # - INTERFACE_DEF - # - EXCLUSIVE_LOCKS_REQUIRED, SHARED_LOCKS_REQUIRED, LOCKS_EXCLUDED: - # - # We implement a whitelist of safe macros instead of a blacklist of - # unsafe macros, even though the latter appears less frequently in - # google code and would have been easier to implement. This is because - # the downside for getting the whitelist wrong means some extra - # semicolons, while the downside for getting the blacklist wrong - # would result in compile errors. - # - # In addition to macros, we also don't want to warn on - # - Compound literals - # - Lambdas - # - alignas specifier with anonymous structs: - closing_brace_pos = match.group(1).rfind(')') - opening_parenthesis = ReverseCloseExpression( - clean_lines, linenum, closing_brace_pos) - if opening_parenthesis[2] > -1: - line_prefix = opening_parenthesis[0][0:opening_parenthesis[2]] - macro = Search(r'\b([A-Z_]+)\s*$', line_prefix) - func = Match(r'^(.*\])\s*$', line_prefix) - if ((macro and - macro.group(1) not in ( - 'TEST', 'TEST_F', 'MATCHER', 'MATCHER_P', 'TYPED_TEST', - 'EXCLUSIVE_LOCKS_REQUIRED', 'SHARED_LOCKS_REQUIRED', - 'LOCKS_EXCLUDED', 'INTERFACE_DEF')) or - (func and not Search(r'\boperator\s*\[\s*\]', func.group(1))) or - Search(r'\b(?:struct|union)\s+alignas\s*$', line_prefix) or - Search(r'\s+=\s*$', line_prefix)): - match = None - if (match and - opening_parenthesis[1] > 1 and - Search(r'\]\s*$', clean_lines.elided[opening_parenthesis[1] - 1])): - # Multi-line lambda-expression - match = None - - else: - # Try matching cases 2-3. - match = Match(r'^(.*(?:else|\)\s*const)\s*)\{', line) - if not match: - # Try matching cases 4-6. These are always matched on separate lines. - # - # Note that we can't simply concatenate the previous line to the - # current line and do a single match, otherwise we may output - # duplicate warnings for the blank line case: - # if (cond) { - # // blank line - # } - prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0] - if prevline and Search(r'[;{}]\s*$', prevline): - match = Match(r'^(\s*)\{', line) - - # Check matching closing brace - if match: - (endline, endlinenum, endpos) = CloseExpression( - clean_lines, linenum, len(match.group(1))) - if endpos > -1 and Match(r'^\s*;', endline[endpos:]): - # Current {} pair is eligible for semicolon check, and we have found - # the redundant semicolon, output warning here. - # - # Note: because we are scanning forward for opening braces, and - # outputting warnings for the matching closing brace, if there are - # nested blocks with trailing semicolons, we will get the error - # messages in reversed order. - error(filename, endlinenum, 'readability/braces', 4, - "You don't need a ; after a }") - - -def CheckEmptyBlockBody(filename, clean_lines, linenum, error): - """Look for empty loop/conditional body with only a single semicolon. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - - # Search for loop keywords at the beginning of the line. Because only - # whitespaces are allowed before the keywords, this will also ignore most - # do-while-loops, since those lines should start with closing brace. - # - # We also check "if" blocks here, since an empty conditional block - # is likely an error. - line = clean_lines.elided[linenum] - matched = Match(r'\s*(for|while|if)\s*\(', line) - if matched: - # Find the end of the conditional expression - (end_line, end_linenum, end_pos) = CloseExpression( - clean_lines, linenum, line.find('(')) - - # Output warning if what follows the condition expression is a semicolon. - # No warning for all other cases, including whitespace or newline, since we - # have a separate check for semicolons preceded by whitespace. - if end_pos >= 0 and Match(r';', end_line[end_pos:]): - if matched.group(1) == 'if': - error(filename, end_linenum, 'whitespace/empty_conditional_body', 5, - 'Empty conditional bodies should use {}') - else: - error(filename, end_linenum, 'whitespace/empty_loop_body', 5, - 'Empty loop bodies should use {} or continue') - - -def FindCheckMacro(line): - """Find a replaceable CHECK-like macro. - - Args: - line: line to search on. - Returns: - (macro name, start position), or (None, -1) if no replaceable - macro is found. - """ - for macro in _CHECK_MACROS: - i = line.find(macro) - if i >= 0: - # Find opening parenthesis. Do a regular expression match here - # to make sure that we are matching the expected CHECK macro, as - # opposed to some other macro that happens to contain the CHECK - # substring. - matched = Match(r'^(.*\b' + macro + r'\s*)\(', line) - if not matched: - continue - return (macro, len(matched.group(1))) - return (None, -1) - - -def CheckCheck(filename, clean_lines, linenum, error): - """Checks the use of CHECK and EXPECT macros. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - - # Decide the set of replacement macros that should be suggested - lines = clean_lines.elided - (check_macro, start_pos) = FindCheckMacro(lines[linenum]) - if not check_macro: - return - - # Find end of the boolean expression by matching parentheses - (last_line, end_line, end_pos) = CloseExpression( - clean_lines, linenum, start_pos) - if end_pos < 0: - return - - # If the check macro is followed by something other than a - # semicolon, assume users will log their own custom error messages - # and don't suggest any replacements. - if not Match(r'\s*;', last_line[end_pos:]): - return - - if linenum == end_line: - expression = lines[linenum][start_pos + 1:end_pos - 1] - else: - expression = lines[linenum][start_pos + 1:] - for i in xrange(linenum + 1, end_line): - expression += lines[i] - expression += last_line[0:end_pos - 1] - - # Parse expression so that we can take parentheses into account. - # This avoids false positives for inputs like "CHECK((a < 4) == b)", - # which is not replaceable by CHECK_LE. - lhs = '' - rhs = '' - operator = None - while expression: - matched = Match(r'^\s*(<<|<<=|>>|>>=|->\*|->|&&|\|\||' - r'==|!=|>=|>|<=|<|\()(.*)$', expression) - if matched: - token = matched.group(1) - if token == '(': - # Parenthesized operand - expression = matched.group(2) - (end, _) = FindEndOfExpressionInLine(expression, 0, ['(']) - if end < 0: - return # Unmatched parenthesis - lhs += '(' + expression[0:end] - expression = expression[end:] - elif token in ('&&', '||'): - # Logical and/or operators. This means the expression - # contains more than one term, for example: - # CHECK(42 < a && a < b); - # - # These are not replaceable with CHECK_LE, so bail out early. - return - elif token in ('<<', '<<=', '>>', '>>=', '->*', '->'): - # Non-relational operator - lhs += token - expression = matched.group(2) - else: - # Relational operator - operator = token - rhs = matched.group(2) - break - else: - # Unparenthesized operand. Instead of appending to lhs one character - # at a time, we do another regular expression match to consume several - # characters at once if possible. Trivial benchmark shows that this - # is more efficient when the operands are longer than a single - # character, which is generally the case. - matched = Match(r'^([^-=!<>()&|]+)(.*)$', expression) - if not matched: - matched = Match(r'^(\s*\S)(.*)$', expression) - if not matched: - break - lhs += matched.group(1) - expression = matched.group(2) - - # Only apply checks if we got all parts of the boolean expression - if not (lhs and operator and rhs): - return - - # Check that rhs do not contain logical operators. We already know - # that lhs is fine since the loop above parses out && and ||. - if rhs.find('&&') > -1 or rhs.find('||') > -1: - return - - # At least one of the operands must be a constant literal. This is - # to avoid suggesting replacements for unprintable things like - # CHECK(variable != iterator) - # - # The following pattern matches decimal, hex integers, strings, and - # characters (in that order). - lhs = lhs.strip() - rhs = rhs.strip() - match_constant = r'^([-+]?(\d+|0[xX][0-9a-fA-F]+)[lLuU]{0,3}|".*"|\'.*\')$' - if Match(match_constant, lhs) or Match(match_constant, rhs): - # Note: since we know both lhs and rhs, we can provide a more - # descriptive error message like: - # Consider using CHECK_EQ(x, 42) instead of CHECK(x == 42) - # Instead of: - # Consider using CHECK_EQ instead of CHECK(a == b) - # - # We are still keeping the less descriptive message because if lhs - # or rhs gets long, the error message might become unreadable. - error(filename, linenum, 'readability/check', 2, - 'Consider using %s instead of %s(a %s b)' % ( - _CHECK_REPLACEMENT[check_macro][operator], - check_macro, operator)) - - -def CheckAltTokens(filename, clean_lines, linenum, error): - """Check alternative keywords being used in boolean expressions. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Avoid preprocessor lines - if Match(r'^\s*#', line): - return - - # Last ditch effort to avoid multi-line comments. This will not help - # if the comment started before the current line or ended after the - # current line, but it catches most of the false positives. At least, - # it provides a way to workaround this warning for people who use - # multi-line comments in preprocessor macros. - # - # TODO(unknown): remove this once cpplint has better support for - # multi-line comments. - if line.find('/*') >= 0 or line.find('*/') >= 0: - return - - for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line): - error(filename, linenum, 'readability/alt_tokens', 2, - 'Use operator %s instead of %s' % ( - _ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1))) - - -def GetLineWidth(line): - """Determines the width of the line in column positions. - - Args: - line: A string, which may be a Unicode string. - - Returns: - The width of the line in column positions, accounting for Unicode - combining characters and wide characters. - """ - if isinstance(line, unicode): - width = 0 - for uc in unicodedata.normalize('NFC', line): - if unicodedata.east_asian_width(uc) in ('W', 'F'): - width += 2 - elif not unicodedata.combining(uc): - width += 1 - return width - else: - return len(line) - - -def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state, - error): - """Checks rules from the 'C++ style rules' section of cppguide.html. - - Most of these rules are hard to test (naming, comment style), but we - do what we can. In particular we check for 2-space indents, line lengths, - tab usage, spaces inside code, etc. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - file_extension: The extension (without the dot) of the filename. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - - # Don't use "elided" lines here, otherwise we can't check commented lines. - # Don't want to use "raw" either, because we don't want to check inside C++11 - # raw strings, - raw_lines = clean_lines.lines_without_raw_strings - line = raw_lines[linenum] - - if line.find('\t') != -1: - error(filename, linenum, 'whitespace/tab', 1, - 'Tab found; better to use spaces') - - # One or three blank spaces at the beginning of the line is weird; it's - # hard to reconcile that with 2-space indents. - # NOTE: here are the conditions rob pike used for his tests. Mine aren't - # as sophisticated, but it may be worth becoming so: RLENGTH==initial_spaces - # if(RLENGTH > 20) complain = 0; - # if(match($0, " +(error|private|public|protected):")) complain = 0; - # if(match(prev, "&& *$")) complain = 0; - # if(match(prev, "\\|\\| *$")) complain = 0; - # if(match(prev, "[\",=><] *$")) complain = 0; - # if(match($0, " <<")) complain = 0; - # if(match(prev, " +for \\(")) complain = 0; - # if(prevodd && match(prevprev, " +for \\(")) complain = 0; - scope_or_label_pattern = r'\s*\w+\s*:\s*\\?$' - classinfo = nesting_state.InnermostClass() - initial_spaces = 0 - cleansed_line = clean_lines.elided[linenum] - while initial_spaces < len(line) and line[initial_spaces] == ' ': - initial_spaces += 1 - if line and line[-1].isspace(): - error(filename, linenum, 'whitespace/end_of_line', 4, - 'Line ends in whitespace. Consider deleting these extra spaces.') - # There are certain situations we allow one space, notably for - # section labels, and also lines containing multi-line raw strings. - elif ((initial_spaces == 1 or initial_spaces == 3) and - not Match(scope_or_label_pattern, cleansed_line) and - not (clean_lines.raw_lines[linenum] != line and - Match(r'^\s*""', line))): - error(filename, linenum, 'whitespace/indent', 3, - 'Weird number of spaces at line-start. ' - 'Are you using a 2-space indent?') - - # Check if the line is a header guard. - is_header_guard = False - if file_extension == 'h': - cppvar = GetHeaderGuardCPPVariable(filename) - if (line.startswith('#ifndef %s' % cppvar) or - line.startswith('#define %s' % cppvar) or - line.startswith('#endif // %s' % cppvar)): - is_header_guard = True - # #include lines and header guards can be long, since there's no clean way to - # split them. - # - # URLs can be long too. It's possible to split these, but it makes them - # harder to cut&paste. - # - # The "$Id:...$" comment may also get very long without it being the - # developers fault. - if (not line.startswith('#include') and not is_header_guard and - not Match(r'^\s*//.*http(s?)://\S*$', line) and - not Match(r'^// \$Id:.*#[0-9]+ \$$', line)): - line_width = GetLineWidth(line) - extended_length = int((_line_length * 1.25)) - if line_width > extended_length: - error(filename, linenum, 'whitespace/line_length', 4, - 'Lines should very rarely be longer than %i characters' % - extended_length) - elif line_width > _line_length: - error(filename, linenum, 'whitespace/line_length', 2, - 'Lines should be <= %i characters long' % _line_length) - - if (cleansed_line.count(';') > 1 and - # for loops are allowed two ;'s (and may run over two lines). - cleansed_line.find('for') == -1 and - (GetPreviousNonBlankLine(clean_lines, linenum)[0].find('for') == -1 or - GetPreviousNonBlankLine(clean_lines, linenum)[0].find(';') != -1) and - # It's ok to have many commands in a switch case that fits in 1 line - not ((cleansed_line.find('case ') != -1 or - cleansed_line.find('default:') != -1) and - cleansed_line.find('break;') != -1)): - error(filename, linenum, 'whitespace/newline', 0, - 'More than one command on the same line') - - # Some more style checks - CheckBraces(filename, clean_lines, linenum, error) - CheckTrailingSemicolon(filename, clean_lines, linenum, error) - CheckEmptyBlockBody(filename, clean_lines, linenum, error) - CheckAccess(filename, clean_lines, linenum, nesting_state, error) - CheckSpacing(filename, clean_lines, linenum, nesting_state, error) - CheckOperatorSpacing(filename, clean_lines, linenum, error) - CheckParenthesisSpacing(filename, clean_lines, linenum, error) - CheckCommaSpacing(filename, clean_lines, linenum, error) - CheckBracesSpacing(filename, clean_lines, linenum, error) - CheckSpacingForFunctionCall(filename, clean_lines, linenum, error) - CheckRValueReference(filename, clean_lines, linenum, nesting_state, error) - CheckCheck(filename, clean_lines, linenum, error) - CheckAltTokens(filename, clean_lines, linenum, error) - classinfo = nesting_state.InnermostClass() - if classinfo: - CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error) - - -_RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$') -# Matches the first component of a filename delimited by -s and _s. That is: -# _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo' -# _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo' -# _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo' -# _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo' -_RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+') - - -def _DropCommonSuffixes(filename): - """Drops common suffixes like _test.cc or -inl.h from filename. - - For example: - >>> _DropCommonSuffixes('foo/foo-inl.h') - 'foo/foo' - >>> _DropCommonSuffixes('foo/bar/foo.cc') - 'foo/bar/foo' - >>> _DropCommonSuffixes('foo/foo_internal.h') - 'foo/foo' - >>> _DropCommonSuffixes('foo/foo_unusualinternal.h') - 'foo/foo_unusualinternal' - - Args: - filename: The input filename. - - Returns: - The filename with the common suffix removed. - """ - for suffix in ('test.cc', 'regtest.cc', 'unittest.cc', - 'inl.h', 'impl.h', 'internal.h'): - if (filename.endswith(suffix) and len(filename) > len(suffix) and - filename[-len(suffix) - 1] in ('-', '_')): - return filename[:-len(suffix) - 1] - return os.path.splitext(filename)[0] - - -def _IsTestFilename(filename): - """Determines if the given filename has a suffix that identifies it as a test. - - Args: - filename: The input filename. - - Returns: - True if 'filename' looks like a test, False otherwise. - """ - if (filename.endswith('_test.cc') or - filename.endswith('_unittest.cc') or - filename.endswith('_regtest.cc')): - return True - else: - return False - - -def _ClassifyInclude(fileinfo, include, is_system): - """Figures out what kind of header 'include' is. - - Args: - fileinfo: The current file cpplint is running over. A FileInfo instance. - include: The path to a #included file. - is_system: True if the #include used <> rather than "". - - Returns: - One of the _XXX_HEADER constants. - - For example: - >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'stdio.h', True) - _C_SYS_HEADER - >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'string', True) - _CPP_SYS_HEADER - >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', False) - _LIKELY_MY_HEADER - >>> _ClassifyInclude(FileInfo('foo/foo_unknown_extension.cc'), - ... 'bar/foo_other_ext.h', False) - _POSSIBLE_MY_HEADER - >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/bar.h', False) - _OTHER_HEADER - """ - # This is a list of all standard c++ header files, except - # those already checked for above. - is_cpp_h = include in _CPP_HEADERS - - if is_system: - if is_cpp_h: - return _CPP_SYS_HEADER - else: - return _C_SYS_HEADER - - # If the target file and the include we're checking share a - # basename when we drop common extensions, and the include - # lives in . , then it's likely to be owned by the target file. - target_dir, target_base = ( - os.path.split(_DropCommonSuffixes(fileinfo.RepositoryName()))) - include_dir, include_base = os.path.split(_DropCommonSuffixes(include)) - if target_base == include_base and ( - include_dir == target_dir or - include_dir == os.path.normpath(target_dir + '/../public')): - return _LIKELY_MY_HEADER - - # If the target and include share some initial basename - # component, it's possible the target is implementing the - # include, so it's allowed to be first, but we'll never - # complain if it's not there. - target_first_component = _RE_FIRST_COMPONENT.match(target_base) - include_first_component = _RE_FIRST_COMPONENT.match(include_base) - if (target_first_component and include_first_component and - target_first_component.group(0) == - include_first_component.group(0)): - return _POSSIBLE_MY_HEADER - - return _OTHER_HEADER - - - -def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): - """Check rules that are applicable to #include lines. - - Strings on #include lines are NOT removed from elided line, to make - certain tasks easier. However, to prevent false positives, checks - applicable to #include lines in CheckLanguage must be put here. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - include_state: An _IncludeState instance in which the headers are inserted. - error: The function to call with any errors found. - """ - fileinfo = FileInfo(filename) - line = clean_lines.lines[linenum] - - # "include" should use the new style "foo/bar.h" instead of just "bar.h" - # Only do this check if the included header follows google naming - # conventions. If not, assume that it's a 3rd party API that - # requires special include conventions. - # - # We also make an exception for Lua headers, which follow google - # naming convention but not the include convention. - match = Match(r'#include\s*"([^/]+\.h)"', line) - if match and not _THIRD_PARTY_HEADERS_PATTERN.match(match.group(1)): - error(filename, linenum, 'build/include', 4, - 'Include the directory when naming .h files') - - # we shouldn't include a file more than once. actually, there are a - # handful of instances where doing so is okay, but in general it's - # not. - match = _RE_PATTERN_INCLUDE.search(line) - if match: - include = match.group(2) - is_system = (match.group(1) == '<') - duplicate_line = include_state.FindHeader(include) - if duplicate_line >= 0: - error(filename, linenum, 'build/include', 4, - '"%s" already included at %s:%s' % - (include, filename, duplicate_line)) - elif (include.endswith('.cc') and - os.path.dirname(fileinfo.RepositoryName()) != os.path.dirname(include)): - error(filename, linenum, 'build/include', 4, - 'Do not include .cc files from other packages') - elif not _THIRD_PARTY_HEADERS_PATTERN.match(include): - include_state.include_list[-1].append((include, linenum)) - - # We want to ensure that headers appear in the right order: - # 1) for foo.cc, foo.h (preferred location) - # 2) c system files - # 3) cpp system files - # 4) for foo.cc, foo.h (deprecated location) - # 5) other google headers - # - # We classify each include statement as one of those 5 types - # using a number of techniques. The include_state object keeps - # track of the highest type seen, and complains if we see a - # lower type after that. - error_message = include_state.CheckNextIncludeOrder( - _ClassifyInclude(fileinfo, include, is_system)) - if error_message: - error(filename, linenum, 'build/include_order', 4, - '%s. Should be: %s.h, c system, c++ system, other.' % - (error_message, fileinfo.BaseName())) - canonical_include = include_state.CanonicalizeAlphabeticalOrder(include) - if not include_state.IsInAlphabeticalOrder( - clean_lines, linenum, canonical_include): - error(filename, linenum, 'build/include_alpha', 4, - 'Include "%s" not in alphabetical order' % include) - include_state.SetLastHeader(canonical_include) - - - -def _GetTextInside(text, start_pattern): - r"""Retrieves all the text between matching open and close parentheses. - - Given a string of lines and a regular expression string, retrieve all the text - following the expression and between opening punctuation symbols like - (, [, or {, and the matching close-punctuation symbol. This properly nested - occurrences of the punctuations, so for the text like - printf(a(), b(c())); - a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'. - start_pattern must match string having an open punctuation symbol at the end. - - Args: - text: The lines to extract text. Its comments and strings must be elided. - It can be single line and can span multiple lines. - start_pattern: The regexp string indicating where to start extracting - the text. - Returns: - The extracted text. - None if either the opening string or ending punctuation could not be found. - """ - # TODO(unknown): Audit cpplint.py to see what places could be profitably - # rewritten to use _GetTextInside (and use inferior regexp matching today). - - # Give opening punctuations to get the matching close-punctuations. - matching_punctuation = {'(': ')', '{': '}', '[': ']'} - closing_punctuation = set(matching_punctuation.itervalues()) - - # Find the position to start extracting text. - match = re.search(start_pattern, text, re.M) - if not match: # start_pattern not found in text. - return None - start_position = match.end(0) - - assert start_position > 0, ( - 'start_pattern must ends with an opening punctuation.') - assert text[start_position - 1] in matching_punctuation, ( - 'start_pattern must ends with an opening punctuation.') - # Stack of closing punctuations we expect to have in text after position. - punctuation_stack = [matching_punctuation[text[start_position - 1]]] - position = start_position - while punctuation_stack and position < len(text): - if text[position] == punctuation_stack[-1]: - punctuation_stack.pop() - elif text[position] in closing_punctuation: - # A closing punctuation without matching opening punctuations. - return None - elif text[position] in matching_punctuation: - punctuation_stack.append(matching_punctuation[text[position]]) - position += 1 - if punctuation_stack: - # Opening punctuations left without matching close-punctuations. - return None - # punctuations match. - return text[start_position:position - 1] - - -# Patterns for matching call-by-reference parameters. -# -# Supports nested templates up to 2 levels deep using this messy pattern: -# < (?: < (?: < [^<>]* -# > -# | [^<>] )* -# > -# | [^<>] )* -# > -_RE_PATTERN_IDENT = r'[_a-zA-Z]\w*' # =~ [[:alpha:]][[:alnum:]]* -_RE_PATTERN_TYPE = ( - r'(?:const\s+)?(?:typename\s+|class\s+|struct\s+|union\s+|enum\s+)?' - r'(?:\w|' - r'\s*<(?:<(?:<[^<>]*>|[^<>])*>|[^<>])*>|' - r'::)+') -# A call-by-reference parameter ends with '& identifier'. -_RE_PATTERN_REF_PARAM = re.compile( - r'(' + _RE_PATTERN_TYPE + r'(?:\s*(?:\bconst\b|[*]))*\s*' - r'&\s*' + _RE_PATTERN_IDENT + r')\s*(?:=[^,()]+)?[,)]') -# A call-by-const-reference parameter either ends with 'const& identifier' -# or looks like 'const type& identifier' when 'type' is atomic. -_RE_PATTERN_CONST_REF_PARAM = ( - r'(?:.*\s*\bconst\s*&\s*' + _RE_PATTERN_IDENT + - r'|const\s+' + _RE_PATTERN_TYPE + r'\s*&\s*' + _RE_PATTERN_IDENT + r')') - - -def CheckLanguage(filename, clean_lines, linenum, file_extension, - include_state, nesting_state, error): - """Checks rules from the 'C++ language rules' section of cppguide.html. - - Some of these rules are hard to test (function overloading, using - uint32 inappropriately), but we do the best we can. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - file_extension: The extension (without the dot) of the filename. - include_state: An _IncludeState instance in which the headers are inserted. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - # If the line is empty or consists of entirely a comment, no need to - # check it. - line = clean_lines.elided[linenum] - if not line: - return - - match = _RE_PATTERN_INCLUDE.search(line) - if match: - CheckIncludeLine(filename, clean_lines, linenum, include_state, error) - return - - # Reset include state across preprocessor directives. This is meant - # to silence warnings for conditional includes. - match = Match(r'^\s*#\s*(if|ifdef|ifndef|elif|else|endif)\b', line) - if match: - include_state.ResetSection(match.group(1)) - - # Make Windows paths like Unix. - fullname = os.path.abspath(filename).replace('\\', '/') - - # Perform other checks now that we are sure that this is not an include line - CheckCasts(filename, clean_lines, linenum, error) - CheckGlobalStatic(filename, clean_lines, linenum, error) - CheckPrintf(filename, clean_lines, linenum, error) - - if file_extension == 'h': - # TODO(unknown): check that 1-arg constructors are explicit. - # How to tell it's a constructor? - # (handled in CheckForNonStandardConstructs for now) - # TODO(unknown): check that classes declare or disable copy/assign - # (level 1 error) - pass - - # Check if people are using the verboten C basic types. The only exception - # we regularly allow is "unsigned short port" for port. - if Search(r'\bshort port\b', line): - if not Search(r'\bunsigned short port\b', line): - error(filename, linenum, 'runtime/int', 4, - 'Use "unsigned short" for ports, not "short"') - else: - match = Search(r'\b(short|long(?! +double)|long long)\b', line) - if match: - error(filename, linenum, 'runtime/int', 4, - 'Use int16/int64/etc, rather than the C type %s' % match.group(1)) - - # Check if some verboten operator overloading is going on - # TODO(unknown): catch out-of-line unary operator&: - # class X {}; - # int operator&(const X& x) { return 42; } // unary operator& - # The trick is it's hard to tell apart from binary operator&: - # class Y { int operator&(const Y& x) { return 23; } }; // binary operator& - if Search(r'\boperator\s*&\s*\(\s*\)', line): - error(filename, linenum, 'runtime/operator', 4, - 'Unary operator& is dangerous. Do not use it.') - - # Check for suspicious usage of "if" like - # } if (a == b) { - if Search(r'\}\s*if\s*\(', line): - error(filename, linenum, 'readability/braces', 4, - 'Did you mean "else if"? If not, start a new line for "if".') - - # Check for potential format string bugs like printf(foo). - # We constrain the pattern not to pick things like DocidForPrintf(foo). - # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str()) - # TODO(unknown): Catch the following case. Need to change the calling - # convention of the whole function to process multiple line to handle it. - # printf( - # boy_this_is_a_really_long_variable_that_cannot_fit_on_the_prev_line); - printf_args = _GetTextInside(line, r'(?i)\b(string)?printf\s*\(') - if printf_args: - match = Match(r'([\w.\->()]+)$', printf_args) - if match and match.group(1) != '__VA_ARGS__': - function_name = re.search(r'\b((?:string)?printf)\s*\(', - line, re.I).group(1) - error(filename, linenum, 'runtime/printf', 4, - 'Potential format string bug. Do %s("%%s", %s) instead.' - % (function_name, match.group(1))) - - # Check for potential memset bugs like memset(buf, sizeof(buf), 0). - match = Search(r'memset\s*\(([^,]*),\s*([^,]*),\s*0\s*\)', line) - if match and not Match(r"^''|-?[0-9]+|0x[0-9A-Fa-f]$", match.group(2)): - error(filename, linenum, 'runtime/memset', 4, - 'Did you mean "memset(%s, 0, %s)"?' - % (match.group(1), match.group(2))) - - if Search(r'\busing namespace\b', line): - error(filename, linenum, 'build/namespaces', 5, - 'Do not use namespace using-directives. ' - 'Use using-declarations instead.') - - # Detect variable-length arrays. - match = Match(r'\s*(.+::)?(\w+) [a-z]\w*\[(.+)];', line) - if (match and match.group(2) != 'return' and match.group(2) != 'delete' and - match.group(3).find(']') == -1): - # Split the size using space and arithmetic operators as delimiters. - # If any of the resulting tokens are not compile time constants then - # report the error. - tokens = re.split(r'\s|\+|\-|\*|\/|<<|>>]', match.group(3)) - is_const = True - skip_next = False - for tok in tokens: - if skip_next: - skip_next = False - continue - - if Search(r'sizeof\(.+\)', tok): continue - if Search(r'arraysize\(\w+\)', tok): continue - - tok = tok.lstrip('(') - tok = tok.rstrip(')') - if not tok: continue - if Match(r'\d+', tok): continue - if Match(r'0[xX][0-9a-fA-F]+', tok): continue - if Match(r'k[A-Z0-9]\w*', tok): continue - if Match(r'(.+::)?k[A-Z0-9]\w*', tok): continue - if Match(r'(.+::)?[A-Z][A-Z0-9_]*', tok): continue - # A catch all for tricky sizeof cases, including 'sizeof expression', - # 'sizeof(*type)', 'sizeof(const type)', 'sizeof(struct StructName)' - # requires skipping the next token because we split on ' ' and '*'. - if tok.startswith('sizeof'): - skip_next = True - continue - is_const = False - break - if not is_const: - error(filename, linenum, 'runtime/arrays', 1, - 'Do not use variable-length arrays. Use an appropriately named ' - "('k' followed by CamelCase) compile-time constant for the size.") - - # Check for use of unnamed namespaces in header files. Registration - # macros are typically OK, so we allow use of "namespace {" on lines - # that end with backslashes. - if (file_extension == 'h' - and Search(r'\bnamespace\s*{', line) - and line[-1] != '\\'): - error(filename, linenum, 'build/namespaces', 4, - 'Do not use unnamed namespaces in header files. See ' - 'http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces' - ' for more information.') - - -def CheckGlobalStatic(filename, clean_lines, linenum, error): - """Check for unsafe global or static objects. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Match two lines at a time to support multiline declarations - if linenum + 1 < clean_lines.NumLines() and not Search(r'[;({]', line): - line += clean_lines.elided[linenum + 1].strip() - - # Check for people declaring static/global STL strings at the top level. - # This is dangerous because the C++ language does not guarantee that - # globals with constructors are initialized before the first access. - match = Match( - r'((?:|static +)(?:|const +))string +([a-zA-Z0-9_:]+)\b(.*)', - line) - - # Remove false positives: - # - String pointers (as opposed to values). - # string *pointer - # const string *pointer - # string const *pointer - # string *const pointer - # - # - Functions and template specializations. - # string Function(... - # string Class::Method(... - # - # - Operators. These are matched separately because operator names - # cross non-word boundaries, and trying to match both operators - # and functions at the same time would decrease accuracy of - # matching identifiers. - # string Class::operator*() - if (match and - not Search(r'\bstring\b(\s+const)?\s*\*\s*(const\s+)?\w', line) and - not Search(r'\boperator\W', line) and - not Match(r'\s*(<.*>)?(::[a-zA-Z0-9_]+)*\s*\(([^"]|$)', match.group(3))): - error(filename, linenum, 'runtime/string', 4, - 'For a static/global string constant, use a C style string instead: ' - '"%schar %s[]".' % - (match.group(1), match.group(2))) - - if Search(r'\b([A-Za-z0-9_]*_)\(\1\)', line): - error(filename, linenum, 'runtime/init', 4, - 'You seem to be initializing a member variable with itself.') - - -def CheckPrintf(filename, clean_lines, linenum, error): - """Check for printf related issues. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # When snprintf is used, the second argument shouldn't be a literal. - match = Search(r'snprintf\s*\(([^,]*),\s*([0-9]*)\s*,', line) - if match and match.group(2) != '0': - # If 2nd arg is zero, snprintf is used to calculate size. - error(filename, linenum, 'runtime/printf', 3, - 'If you can, use sizeof(%s) instead of %s as the 2nd arg ' - 'to snprintf.' % (match.group(1), match.group(2))) - - # Check if some verboten C functions are being used. - if Search(r'\bsprintf\s*\(', line): - error(filename, linenum, 'runtime/printf', 5, - 'Never use sprintf. Use snprintf instead.') - match = Search(r'\b(strcpy|strcat)\s*\(', line) - if match: - error(filename, linenum, 'runtime/printf', 4, - 'Almost always, snprintf is better than %s' % match.group(1)) - - -def IsDerivedFunction(clean_lines, linenum): - """Check if current line contains an inherited function. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - Returns: - True if current line contains a function with "override" - virt-specifier. - """ - # Scan back a few lines for start of current function - for i in xrange(linenum, max(-1, linenum - 10), -1): - match = Match(r'^([^()]*\w+)\(', clean_lines.elided[i]) - if match: - # Look for "override" after the matching closing parenthesis - line, _, closing_paren = CloseExpression( - clean_lines, i, len(match.group(1))) - return (closing_paren >= 0 and - Search(r'\boverride\b', line[closing_paren:])) - return False - - -def IsOutOfLineMethodDefinition(clean_lines, linenum): - """Check if current line contains an out-of-line method definition. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - Returns: - True if current line contains an out-of-line method definition. - """ - # Scan back a few lines for start of current function - for i in xrange(linenum, max(-1, linenum - 10), -1): - if Match(r'^([^()]*\w+)\(', clean_lines.elided[i]): - return Match(r'^[^()]*\w+::\w+\(', clean_lines.elided[i]) is not None - return False - - -def IsInitializerList(clean_lines, linenum): - """Check if current line is inside constructor initializer list. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - Returns: - True if current line appears to be inside constructor initializer - list, False otherwise. - """ - for i in xrange(linenum, 1, -1): - line = clean_lines.elided[i] - if i == linenum: - remove_function_body = Match(r'^(.*)\{\s*$', line) - if remove_function_body: - line = remove_function_body.group(1) - - if Search(r'\s:\s*\w+[({]', line): - # A lone colon tend to indicate the start of a constructor - # initializer list. It could also be a ternary operator, which - # also tend to appear in constructor initializer lists as - # opposed to parameter lists. - return True - if Search(r'\}\s*,\s*$', line): - # A closing brace followed by a comma is probably the end of a - # brace-initialized member in constructor initializer list. - return True - if Search(r'[{};]\s*$', line): - # Found one of the following: - # - A closing brace or semicolon, probably the end of the previous - # function. - # - An opening brace, probably the start of current class or namespace. - # - # Current line is probably not inside an initializer list since - # we saw one of those things without seeing the starting colon. - return False - - # Got to the beginning of the file without seeing the start of - # constructor initializer list. - return False - - -def CheckForNonConstReference(filename, clean_lines, linenum, - nesting_state, error): - """Check for non-const references. - - Separate from CheckLanguage since it scans backwards from current - line, instead of scanning forward. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: The function to call with any errors found. - """ - # Do nothing if there is no '&' on current line. - line = clean_lines.elided[linenum] - if '&' not in line: - return - - # If a function is inherited, current function doesn't have much of - # a choice, so any non-const references should not be blamed on - # derived function. - if IsDerivedFunction(clean_lines, linenum): - return - - # Don't warn on out-of-line method definitions, as we would warn on the - # in-line declaration, if it isn't marked with 'override'. - if IsOutOfLineMethodDefinition(clean_lines, linenum): - return - - # Long type names may be broken across multiple lines, usually in one - # of these forms: - # LongType - # ::LongTypeContinued &identifier - # LongType:: - # LongTypeContinued &identifier - # LongType< - # ...>::LongTypeContinued &identifier - # - # If we detected a type split across two lines, join the previous - # line to current line so that we can match const references - # accordingly. - # - # Note that this only scans back one line, since scanning back - # arbitrary number of lines would be expensive. If you have a type - # that spans more than 2 lines, please use a typedef. - if linenum > 1: - previous = None - if Match(r'\s*::(?:[\w<>]|::)+\s*&\s*\S', line): - # previous_line\n + ::current_line - previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+[\w<>])\s*$', - clean_lines.elided[linenum - 1]) - elif Match(r'\s*[a-zA-Z_]([\w<>]|::)+\s*&\s*\S', line): - # previous_line::\n + current_line - previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+::)\s*$', - clean_lines.elided[linenum - 1]) - if previous: - line = previous.group(1) + line.lstrip() - else: - # Check for templated parameter that is split across multiple lines - endpos = line.rfind('>') - if endpos > -1: - (_, startline, startpos) = ReverseCloseExpression( - clean_lines, linenum, endpos) - if startpos > -1 and startline < linenum: - # Found the matching < on an earlier line, collect all - # pieces up to current line. - line = '' - for i in xrange(startline, linenum + 1): - line += clean_lines.elided[i].strip() - - # Check for non-const references in function parameters. A single '&' may - # found in the following places: - # inside expression: binary & for bitwise AND - # inside expression: unary & for taking the address of something - # inside declarators: reference parameter - # We will exclude the first two cases by checking that we are not inside a - # function body, including one that was just introduced by a trailing '{'. - # TODO(unknown): Doesn't account for 'catch(Exception& e)' [rare]. - if (nesting_state.previous_stack_top and - not (isinstance(nesting_state.previous_stack_top, _ClassInfo) or - isinstance(nesting_state.previous_stack_top, _NamespaceInfo))): - # Not at toplevel, not within a class, and not within a namespace - return - - # Avoid initializer lists. We only need to scan back from the - # current line for something that starts with ':'. - # - # We don't need to check the current line, since the '&' would - # appear inside the second set of parentheses on the current line as - # opposed to the first set. - if linenum > 0: - for i in xrange(linenum - 1, max(0, linenum - 10), -1): - previous_line = clean_lines.elided[i] - if not Search(r'[),]\s*$', previous_line): - break - if Match(r'^\s*:\s+\S', previous_line): - return - - # Avoid preprocessors - if Search(r'\\\s*$', line): - return - - # Avoid constructor initializer lists - if IsInitializerList(clean_lines, linenum): - return - - # We allow non-const references in a few standard places, like functions - # called "swap()" or iostream operators like "<<" or ">>". Do not check - # those function parameters. - # - # We also accept & in static_assert, which looks like a function but - # it's actually a declaration expression. - whitelisted_functions = (r'(?:[sS]wap(?:<\w:+>)?|' - r'operator\s*[<>][<>]|' - r'static_assert|COMPILE_ASSERT' - r')\s*\(') - if Search(whitelisted_functions, line): - return - elif not Search(r'\S+\([^)]*$', line): - # Don't see a whitelisted function on this line. Actually we - # didn't see any function name on this line, so this is likely a - # multi-line parameter list. Try a bit harder to catch this case. - for i in xrange(2): - if (linenum > i and - Search(whitelisted_functions, clean_lines.elided[linenum - i - 1])): - return - - decls = ReplaceAll(r'{[^}]*}', ' ', line) # exclude function body - for parameter in re.findall(_RE_PATTERN_REF_PARAM, decls): - if not Match(_RE_PATTERN_CONST_REF_PARAM, parameter): - error(filename, linenum, 'runtime/references', 2, - 'Is this a non-const reference? ' - 'If so, make const or use a pointer: ' + - ReplaceAll(' *<', '<', parameter)) - - -def CheckCasts(filename, clean_lines, linenum, error): - """Various cast related checks. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Check to see if they're using an conversion function cast. - # I just try to capture the most common basic types, though there are more. - # Parameterless conversion functions, such as bool(), are allowed as they are - # probably a member operator declaration or default constructor. - match = Search( - r'(\bnew\s+|\S<\s*(?:const\s+)?)?\b' - r'(int|float|double|bool|char|int32|uint32|int64|uint64)' - r'(\([^)].*)', line) - expecting_function = ExpectingFunctionArgs(clean_lines, linenum) - if match and not expecting_function: - matched_type = match.group(2) - - # matched_new_or_template is used to silence two false positives: - # - New operators - # - Template arguments with function types - # - # For template arguments, we match on types immediately following - # an opening bracket without any spaces. This is a fast way to - # silence the common case where the function type is the first - # template argument. False negative with less-than comparison is - # avoided because those operators are usually followed by a space. - # - # function // bracket + no space = false positive - # value < double(42) // bracket + space = true positive - matched_new_or_template = match.group(1) - - # Avoid arrays by looking for brackets that come after the closing - # parenthesis. - if Match(r'\([^()]+\)\s*\[', match.group(3)): - return - - # Other things to ignore: - # - Function pointers - # - Casts to pointer types - # - Placement new - # - Alias declarations - matched_funcptr = match.group(3) - if (matched_new_or_template is None and - not (matched_funcptr and - (Match(r'\((?:[^() ]+::\s*\*\s*)?[^() ]+\)\s*\(', - matched_funcptr) or - matched_funcptr.startswith('(*)'))) and - not Match(r'\s*using\s+\S+\s*=\s*' + matched_type, line) and - not Search(r'new\(\S+\)\s*' + matched_type, line)): - error(filename, linenum, 'readability/casting', 4, - 'Using deprecated casting style. ' - 'Use static_cast<%s>(...) instead' % - matched_type) - - if not expecting_function: - CheckCStyleCast(filename, clean_lines, linenum, 'static_cast', - r'\((int|float|double|bool|char|u?int(16|32|64))\)', error) - - # This doesn't catch all cases. Consider (const char * const)"hello". - # - # (char *) "foo" should always be a const_cast (reinterpret_cast won't - # compile). - if CheckCStyleCast(filename, clean_lines, linenum, 'const_cast', - r'\((char\s?\*+\s?)\)\s*"', error): - pass - else: - # Check pointer casts for other than string constants - CheckCStyleCast(filename, clean_lines, linenum, 'reinterpret_cast', - r'\((\w+\s?\*+\s?)\)', error) - - # In addition, we look for people taking the address of a cast. This - # is dangerous -- casts can assign to temporaries, so the pointer doesn't - # point where you think. - # - # Some non-identifier character is required before the '&' for the - # expression to be recognized as a cast. These are casts: - # expression = &static_cast(temporary()); - # function(&(int*)(temporary())); - # - # This is not a cast: - # reference_type&(int* function_param); - match = Search( - r'(?:[^\w]&\(([^)*][^)]*)\)[\w(])|' - r'(?:[^\w]&(static|dynamic|down|reinterpret)_cast\b)', line) - if match: - # Try a better error message when the & is bound to something - # dereferenced by the casted pointer, as opposed to the casted - # pointer itself. - parenthesis_error = False - match = Match(r'^(.*&(?:static|dynamic|down|reinterpret)_cast\b)<', line) - if match: - _, y1, x1 = CloseExpression(clean_lines, linenum, len(match.group(1))) - if x1 >= 0 and clean_lines.elided[y1][x1] == '(': - _, y2, x2 = CloseExpression(clean_lines, y1, x1) - if x2 >= 0: - extended_line = clean_lines.elided[y2][x2:] - if y2 < clean_lines.NumLines() - 1: - extended_line += clean_lines.elided[y2 + 1] - if Match(r'\s*(?:->|\[)', extended_line): - parenthesis_error = True - - if parenthesis_error: - error(filename, linenum, 'readability/casting', 4, - ('Are you taking an address of something dereferenced ' - 'from a cast? Wrapping the dereferenced expression in ' - 'parentheses will make the binding more obvious')) - else: - error(filename, linenum, 'runtime/casting', 4, - ('Are you taking an address of a cast? ' - 'This is dangerous: could be a temp var. ' - 'Take the address before doing the cast, rather than after')) - - -def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error): - """Checks for a C-style cast by looking for the pattern. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - cast_type: The string for the C++ cast to recommend. This is either - reinterpret_cast, static_cast, or const_cast, depending. - pattern: The regular expression used to find C-style casts. - error: The function to call with any errors found. - - Returns: - True if an error was emitted. - False otherwise. - """ - line = clean_lines.elided[linenum] - match = Search(pattern, line) - if not match: - return False - - # Exclude lines with keywords that tend to look like casts - context = line[0:match.start(1) - 1] - if Match(r'.*\b(?:sizeof|alignof|alignas|[_A-Z][_A-Z0-9]*)\s*$', context): - return False - - # Try expanding current context to see if we one level of - # parentheses inside a macro. - if linenum > 0: - for i in xrange(linenum - 1, max(0, linenum - 5), -1): - context = clean_lines.elided[i] + context - if Match(r'.*\b[_A-Z][_A-Z0-9]*\s*\((?:\([^()]*\)|[^()])*$', context): - return False - - # operator++(int) and operator--(int) - if context.endswith(' operator++') or context.endswith(' operator--'): - return False - - # A single unnamed argument for a function tends to look like old - # style cast. If we see those, don't issue warnings for deprecated - # casts, instead issue warnings for unnamed arguments where - # appropriate. - # - # These are things that we want warnings for, since the style guide - # explicitly require all parameters to be named: - # Function(int); - # Function(int) { - # ConstMember(int) const; - # ConstMember(int) const { - # ExceptionMember(int) throw (...); - # ExceptionMember(int) throw (...) { - # PureVirtual(int) = 0; - # [](int) -> bool { - # - # These are functions of some sort, where the compiler would be fine - # if they had named parameters, but people often omit those - # identifiers to reduce clutter: - # (FunctionPointer)(int); - # (FunctionPointer)(int) = value; - # Function((function_pointer_arg)(int)) - # Function((function_pointer_arg)(int), int param) - # ; - # <(FunctionPointerTemplateArgument)(int)>; - remainder = line[match.end(0):] - if Match(r'^\s*(?:;|const\b|throw\b|final\b|override\b|[=>{),]|->)', - remainder): - # Looks like an unnamed parameter. - - # Don't warn on any kind of template arguments. - if Match(r'^\s*>', remainder): - return False - - # Don't warn on assignments to function pointers, but keep warnings for - # unnamed parameters to pure virtual functions. Note that this pattern - # will also pass on assignments of "0" to function pointers, but the - # preferred values for those would be "nullptr" or "NULL". - matched_zero = Match(r'^\s=\s*(\S+)\s*;', remainder) - if matched_zero and matched_zero.group(1) != '0': - return False - - # Don't warn on function pointer declarations. For this we need - # to check what came before the "(type)" string. - if Match(r'.*\)\s*$', line[0:match.start(0)]): - return False - - # Don't warn if the parameter is named with block comments, e.g.: - # Function(int /*unused_param*/); - raw_line = clean_lines.raw_lines[linenum] - if '/*' in raw_line: - return False - - # Passed all filters, issue warning here. - error(filename, linenum, 'readability/function', 3, - 'All parameters should be named in a function') - return True - - # At this point, all that should be left is actual casts. - error(filename, linenum, 'readability/casting', 4, - 'Using C-style cast. Use %s<%s>(...) instead' % - (cast_type, match.group(1))) - - return True - - -def ExpectingFunctionArgs(clean_lines, linenum): - """Checks whether where function type arguments are expected. - - Args: - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - - Returns: - True if the line at 'linenum' is inside something that expects arguments - of function types. - """ - line = clean_lines.elided[linenum] - return (Match(r'^\s*MOCK_(CONST_)?METHOD\d+(_T)?\(', line) or - (linenum >= 2 and - (Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\((?:\S+,)?\s*$', - clean_lines.elided[linenum - 1]) or - Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\(\s*$', - clean_lines.elided[linenum - 2]) or - Search(r'\bstd::m?function\s*\<\s*$', - clean_lines.elided[linenum - 1])))) - - -_HEADERS_CONTAINING_TEMPLATES = ( - ('', ('deque',)), - ('', ('unary_function', 'binary_function', - 'plus', 'minus', 'multiplies', 'divides', 'modulus', - 'negate', - 'equal_to', 'not_equal_to', 'greater', 'less', - 'greater_equal', 'less_equal', - 'logical_and', 'logical_or', 'logical_not', - 'unary_negate', 'not1', 'binary_negate', 'not2', - 'bind1st', 'bind2nd', - 'pointer_to_unary_function', - 'pointer_to_binary_function', - 'ptr_fun', - 'mem_fun_t', 'mem_fun', 'mem_fun1_t', 'mem_fun1_ref_t', - 'mem_fun_ref_t', - 'const_mem_fun_t', 'const_mem_fun1_t', - 'const_mem_fun_ref_t', 'const_mem_fun1_ref_t', - 'mem_fun_ref', - )), - ('', ('numeric_limits',)), - ('', ('list',)), - ('', ('map', 'multimap',)), - ('', ('allocator',)), - ('', ('queue', 'priority_queue',)), - ('', ('set', 'multiset',)), - ('', ('stack',)), - ('', ('char_traits', 'basic_string',)), - ('', ('tuple',)), - ('', ('pair',)), - ('', ('vector',)), - - # gcc extensions. - # Note: std::hash is their hash, ::hash is our hash - ('', ('hash_map', 'hash_multimap',)), - ('', ('hash_set', 'hash_multiset',)), - ('', ('slist',)), - ) - -_RE_PATTERN_STRING = re.compile(r'\bstring\b') - -_re_pattern_algorithm_header = [] -for _template in ('copy', 'max', 'min', 'min_element', 'sort', 'swap', - 'transform'): - # Match max(..., ...), max(..., ...), but not foo->max, foo.max or - # type::max(). - _re_pattern_algorithm_header.append( - (re.compile(r'[^>.]\b' + _template + r'(<.*?>)?\([^\)]'), - _template, - '')) - -_re_pattern_templates = [] -for _header, _templates in _HEADERS_CONTAINING_TEMPLATES: - for _template in _templates: - _re_pattern_templates.append( - (re.compile(r'(\<|\b)' + _template + r'\s*\<'), - _template + '<>', - _header)) - - -def FilesBelongToSameModule(filename_cc, filename_h): - """Check if these two filenames belong to the same module. - - The concept of a 'module' here is a as follows: - foo.h, foo-inl.h, foo.cc, foo_test.cc and foo_unittest.cc belong to the - same 'module' if they are in the same directory. - some/path/public/xyzzy and some/path/internal/xyzzy are also considered - to belong to the same module here. - - If the filename_cc contains a longer path than the filename_h, for example, - '/absolute/path/to/base/sysinfo.cc', and this file would include - 'base/sysinfo.h', this function also produces the prefix needed to open the - header. This is used by the caller of this function to more robustly open the - header file. We don't have access to the real include paths in this context, - so we need this guesswork here. - - Known bugs: tools/base/bar.cc and base/bar.h belong to the same module - according to this implementation. Because of this, this function gives - some false positives. This should be sufficiently rare in practice. - - Args: - filename_cc: is the path for the .cc file - filename_h: is the path for the header path - - Returns: - Tuple with a bool and a string: - bool: True if filename_cc and filename_h belong to the same module. - string: the additional prefix needed to open the header file. - """ - - if not filename_cc.endswith('.cc'): - return (False, '') - filename_cc = filename_cc[:-len('.cc')] - if filename_cc.endswith('_unittest'): - filename_cc = filename_cc[:-len('_unittest')] - elif filename_cc.endswith('_test'): - filename_cc = filename_cc[:-len('_test')] - filename_cc = filename_cc.replace('/public/', '/') - filename_cc = filename_cc.replace('/internal/', '/') - - if not filename_h.endswith('.h'): - return (False, '') - filename_h = filename_h[:-len('.h')] - if filename_h.endswith('-inl'): - filename_h = filename_h[:-len('-inl')] - filename_h = filename_h.replace('/public/', '/') - filename_h = filename_h.replace('/internal/', '/') - - files_belong_to_same_module = filename_cc.endswith(filename_h) - common_path = '' - if files_belong_to_same_module: - common_path = filename_cc[:-len(filename_h)] - return files_belong_to_same_module, common_path - - -def UpdateIncludeState(filename, include_dict, io=codecs): - """Fill up the include_dict with new includes found from the file. - - Args: - filename: the name of the header to read. - include_dict: a dictionary in which the headers are inserted. - io: The io factory to use to read the file. Provided for testability. - - Returns: - True if a header was successfully added. False otherwise. - """ - headerfile = None - try: - headerfile = io.open(filename, 'r', 'utf8', 'replace') - except IOError: - return False - linenum = 0 - for line in headerfile: - linenum += 1 - clean_line = CleanseComments(line) - match = _RE_PATTERN_INCLUDE.search(clean_line) - if match: - include = match.group(2) - include_dict.setdefault(include, linenum) - return True - - -def CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error, - io=codecs): - """Reports for missing stl includes. - - This function will output warnings to make sure you are including the headers - necessary for the stl containers and functions that you use. We only give one - reason to include a header. For example, if you use both equal_to<> and - less<> in a .h file, only one (the latter in the file) of these will be - reported as a reason to include the . - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - include_state: An _IncludeState instance. - error: The function to call with any errors found. - io: The IO factory to use to read the header file. Provided for unittest - injection. - """ - required = {} # A map of header name to linenumber and the template entity. - # Example of required: { '': (1219, 'less<>') } - - for linenum in xrange(clean_lines.NumLines()): - line = clean_lines.elided[linenum] - if not line or line[0] == '#': - continue - - # String is special -- it is a non-templatized type in STL. - matched = _RE_PATTERN_STRING.search(line) - if matched: - # Don't warn about strings in non-STL namespaces: - # (We check only the first match per line; good enough.) - prefix = line[:matched.start()] - if prefix.endswith('std::') or not prefix.endswith('::'): - required[''] = (linenum, 'string') - - for pattern, template, header in _re_pattern_algorithm_header: - if pattern.search(line): - required[header] = (linenum, template) - - # The following function is just a speed up, no semantics are changed. - if not '<' in line: # Reduces the cpu time usage by skipping lines. - continue - - for pattern, template, header in _re_pattern_templates: - if pattern.search(line): - required[header] = (linenum, template) - - # The policy is that if you #include something in foo.h you don't need to - # include it again in foo.cc. Here, we will look at possible includes. - # Let's flatten the include_state include_list and copy it into a dictionary. - include_dict = dict([item for sublist in include_state.include_list - for item in sublist]) - - # Did we find the header for this file (if any) and successfully load it? - header_found = False - - # Use the absolute path so that matching works properly. - abs_filename = FileInfo(filename).FullName() - - # For Emacs's flymake. - # If cpplint is invoked from Emacs's flymake, a temporary file is generated - # by flymake and that file name might end with '_flymake.cc'. In that case, - # restore original file name here so that the corresponding header file can be - # found. - # e.g. If the file name is 'foo_flymake.cc', we should search for 'foo.h' - # instead of 'foo_flymake.h' - abs_filename = re.sub(r'_flymake\.cc$', '.cc', abs_filename) - - # include_dict is modified during iteration, so we iterate over a copy of - # the keys. - header_keys = include_dict.keys() - for header in header_keys: - (same_module, common_path) = FilesBelongToSameModule(abs_filename, header) - fullpath = common_path + header - if same_module and UpdateIncludeState(fullpath, include_dict, io): - header_found = True - - # If we can't find the header file for a .cc, assume it's because we don't - # know where to look. In that case we'll give up as we're not sure they - # didn't include it in the .h file. - # TODO(unknown): Do a better job of finding .h files so we are confident that - # not having the .h file means there isn't one. - if filename.endswith('.cc') and not header_found: - return - - # All the lines have been processed, report the errors found. - for required_header_unstripped in required: - template = required[required_header_unstripped][1] - if required_header_unstripped.strip('<>"') not in include_dict: - error(filename, required[required_header_unstripped][0], - 'build/include_what_you_use', 4, - 'Add #include ' + required_header_unstripped + ' for ' + template) - - -_RE_PATTERN_EXPLICIT_MAKEPAIR = re.compile(r'\bmake_pair\s*<') - - -def CheckMakePairUsesDeduction(filename, clean_lines, linenum, error): - """Check that make_pair's template arguments are deduced. - - G++ 4.6 in C++11 mode fails badly if make_pair's template arguments are - specified explicitly, and such use isn't intended in any case. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - match = _RE_PATTERN_EXPLICIT_MAKEPAIR.search(line) - if match: - error(filename, linenum, 'build/explicit_make_pair', - 4, # 4 = high confidence - 'For C++11-compatibility, omit template arguments from make_pair' - ' OR use pair directly OR if appropriate, construct a pair directly') - - -def CheckDefaultLambdaCaptures(filename, clean_lines, linenum, error): - """Check that default lambda captures are not used. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # A lambda introducer specifies a default capture if it starts with "[=" - # or if it starts with "[&" _not_ followed by an identifier. - match = Match(r'^(.*)\[\s*(?:=|&[^\w])', line) - if match: - # Found a potential error, check what comes after the lambda-introducer. - # If it's not open parenthesis (for lambda-declarator) or open brace - # (for compound-statement), it's not a lambda. - line, _, pos = CloseExpression(clean_lines, linenum, len(match.group(1))) - if pos >= 0 and Match(r'^\s*[{(]', line[pos:]): - error(filename, linenum, 'build/c++11', - 4, # 4 = high confidence - 'Default lambda captures are an unapproved C++ feature.') - - -def CheckRedundantVirtual(filename, clean_lines, linenum, error): - """Check if line contains a redundant "virtual" function-specifier. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - # Look for "virtual" on current line. - line = clean_lines.elided[linenum] - virtual = Match(r'^(.*)(\bvirtual\b)(.*)$', line) - if not virtual: return - - # Ignore "virtual" keywords that are near access-specifiers. These - # are only used in class base-specifier and do not apply to member - # functions. - if (Search(r'\b(public|protected|private)\s+$', virtual.group(1)) or - Match(r'^\s+(public|protected|private)\b', virtual.group(3))): - return - - # Ignore the "virtual" keyword from virtual base classes. Usually - # there is a column on the same line in these cases (virtual base - # classes are rare in google3 because multiple inheritance is rare). - if Match(r'^.*[^:]:[^:].*$', line): return - - # Look for the next opening parenthesis. This is the start of the - # parameter list (possibly on the next line shortly after virtual). - # TODO(unknown): doesn't work if there are virtual functions with - # decltype() or other things that use parentheses, but csearch suggests - # that this is rare. - end_col = -1 - end_line = -1 - start_col = len(virtual.group(2)) - for start_line in xrange(linenum, min(linenum + 3, clean_lines.NumLines())): - line = clean_lines.elided[start_line][start_col:] - parameter_list = Match(r'^([^(]*)\(', line) - if parameter_list: - # Match parentheses to find the end of the parameter list - (_, end_line, end_col) = CloseExpression( - clean_lines, start_line, start_col + len(parameter_list.group(1))) - break - start_col = 0 - - if end_col < 0: - return # Couldn't find end of parameter list, give up - - # Look for "override" or "final" after the parameter list - # (possibly on the next few lines). - for i in xrange(end_line, min(end_line + 3, clean_lines.NumLines())): - line = clean_lines.elided[i][end_col:] - match = Search(r'\b(override|final)\b', line) - if match: - error(filename, linenum, 'readability/inheritance', 4, - ('"virtual" is redundant since function is ' - 'already declared as "%s"' % match.group(1))) - - # Set end_col to check whole lines after we are done with the - # first line. - end_col = 0 - if Search(r'[^\w]\s*$', line): - break - - -def CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error): - """Check if line contains a redundant "override" or "final" virt-specifier. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - # Look for closing parenthesis nearby. We need one to confirm where - # the declarator ends and where the virt-specifier starts to avoid - # false positives. - line = clean_lines.elided[linenum] - declarator_end = line.rfind(')') - if declarator_end >= 0: - fragment = line[declarator_end:] - else: - if linenum > 1 and clean_lines.elided[linenum - 1].rfind(')') >= 0: - fragment = line - else: - return - - # Check that at most one of "override" or "final" is present, not both - if Search(r'\boverride\b', fragment) and Search(r'\bfinal\b', fragment): - error(filename, linenum, 'readability/inheritance', 4, - ('"override" is redundant since function is ' - 'already declared as "final"')) - - - - -# Returns true if we are at a new block, and it is directly -# inside of a namespace. -def IsBlockInNameSpace(nesting_state, is_forward_declaration): - """Checks that the new block is directly in a namespace. - - Args: - nesting_state: The _NestingState object that contains info about our state. - is_forward_declaration: If the class is a forward declared class. - Returns: - Whether or not the new block is directly in a namespace. - """ - if is_forward_declaration: - if len(nesting_state.stack) >= 1 and ( - isinstance(nesting_state.stack[-1], _NamespaceInfo)): - return True - else: - return False - - return (len(nesting_state.stack) > 1 and - nesting_state.stack[-1].check_namespace_indentation and - isinstance(nesting_state.stack[-2], _NamespaceInfo)) - - -def ShouldCheckNamespaceIndentation(nesting_state, is_namespace_indent_item, - raw_lines_no_comments, linenum): - """This method determines if we should apply our namespace indentation check. - - Args: - nesting_state: The current nesting state. - is_namespace_indent_item: If we just put a new class on the stack, True. - If the top of the stack is not a class, or we did not recently - add the class, False. - raw_lines_no_comments: The lines without the comments. - linenum: The current line number we are processing. - - Returns: - True if we should apply our namespace indentation check. Currently, it - only works for classes and namespaces inside of a namespace. - """ - - is_forward_declaration = IsForwardClassDeclaration(raw_lines_no_comments, - linenum) - - if not (is_namespace_indent_item or is_forward_declaration): - return False - - # If we are in a macro, we do not want to check the namespace indentation. - if IsMacroDefinition(raw_lines_no_comments, linenum): - return False - - return IsBlockInNameSpace(nesting_state, is_forward_declaration) - - -# Call this method if the line is directly inside of a namespace. -# If the line above is blank (excluding comments) or the start of -# an inner namespace, it cannot be indented. -def CheckItemIndentationInNamespace(filename, raw_lines_no_comments, linenum, - error): - line = raw_lines_no_comments[linenum] - if Match(r'^\s+', line): - error(filename, linenum, 'runtime/indentation_namespace', 4, - 'Do not indent within a namespace') - - -def ProcessLine(filename, file_extension, clean_lines, line, - include_state, function_state, nesting_state, error, - extra_check_functions=[]): - """Processes a single line in the file. - - Args: - filename: Filename of the file that is being processed. - file_extension: The extension (dot not included) of the file. - clean_lines: An array of strings, each representing a line of the file, - with comments stripped. - line: Number of line being processed. - include_state: An _IncludeState instance in which the headers are inserted. - function_state: A _FunctionState instance which counts function lines, etc. - nesting_state: A NestingState instance which maintains information about - the current stack of nested blocks being parsed. - error: A callable to which errors are reported, which takes 4 arguments: - filename, line number, error level, and message - extra_check_functions: An array of additional check functions that will be - run on each source line. Each function takes 4 - arguments: filename, clean_lines, line, error - """ - raw_lines = clean_lines.raw_lines - ParseNolintSuppressions(filename, raw_lines[line], line, error) - nesting_state.Update(filename, clean_lines, line, error) - CheckForNamespaceIndentation(filename, nesting_state, clean_lines, line, - error) - if nesting_state.InAsmBlock(): return - CheckForFunctionLengths(filename, clean_lines, line, function_state, error) - CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error) - CheckStyle(filename, clean_lines, line, file_extension, nesting_state, error) - CheckLanguage(filename, clean_lines, line, file_extension, include_state, - nesting_state, error) - CheckForNonConstReference(filename, clean_lines, line, nesting_state, error) - CheckForNonStandardConstructs(filename, clean_lines, line, - nesting_state, error) - CheckVlogArguments(filename, clean_lines, line, error) - CheckPosixThreading(filename, clean_lines, line, error) - CheckInvalidIncrement(filename, clean_lines, line, error) - CheckMakePairUsesDeduction(filename, clean_lines, line, error) - CheckDefaultLambdaCaptures(filename, clean_lines, line, error) - CheckRedundantVirtual(filename, clean_lines, line, error) - CheckRedundantOverrideOrFinal(filename, clean_lines, line, error) - for check_fn in extra_check_functions: - check_fn(filename, clean_lines, line, error) - -def FlagCxx11Features(filename, clean_lines, linenum, error): - """Flag those c++11 features that we only allow in certain places. - - Args: - filename: The name of the current file. - clean_lines: A CleansedLines instance containing the file. - linenum: The number of the line to check. - error: The function to call with any errors found. - """ - line = clean_lines.elided[linenum] - - # Flag unapproved C++11 headers. - include = Match(r'\s*#\s*include\s+[<"]([^<"]+)[">]', line) - if include and include.group(1) in ('cfenv', - 'condition_variable', - 'fenv.h', - 'future', - 'mutex', - 'thread', - 'chrono', - 'ratio', - 'regex', - 'system_error', - ): - error(filename, linenum, 'build/c++11', 5, - ('<%s> is an unapproved C++11 header.') % include.group(1)) - - # The only place where we need to worry about C++11 keywords and library - # features in preprocessor directives is in macro definitions. - if Match(r'\s*#', line) and not Match(r'\s*#\s*define\b', line): return - - # These are classes and free functions. The classes are always - # mentioned as std::*, but we only catch the free functions if - # they're not found by ADL. They're alphabetical by header. - for top_name in ( - # type_traits - 'alignment_of', - 'aligned_union', - ): - if Search(r'\bstd::%s\b' % top_name, line): - error(filename, linenum, 'build/c++11', 5, - ('std::%s is an unapproved C++11 class or function. Send c-style ' - 'an example of where it would make your code more readable, and ' - 'they may let you use it.') % top_name) - - -def ProcessFileData(filename, file_extension, lines, error, - extra_check_functions=[]): - """Performs lint checks and reports any errors to the given error function. - - Args: - filename: Filename of the file that is being processed. - file_extension: The extension (dot not included) of the file. - lines: An array of strings, each representing a line of the file, with the - last element being empty if the file is terminated with a newline. - error: A callable to which errors are reported, which takes 4 arguments: - filename, line number, error level, and message - extra_check_functions: An array of additional check functions that will be - run on each source line. Each function takes 4 - arguments: filename, clean_lines, line, error - """ - lines = (['// marker so line numbers and indices both start at 1'] + lines + - ['// marker so line numbers end in a known way']) - - include_state = _IncludeState() - function_state = _FunctionState() - nesting_state = NestingState() - - ResetNolintSuppressions() - - CheckForCopyright(filename, lines, error) - - RemoveMultiLineComments(filename, lines, error) - clean_lines = CleansedLines(lines) - - if file_extension == 'h': - CheckForHeaderGuard(filename, clean_lines, error) - - for line in xrange(clean_lines.NumLines()): - ProcessLine(filename, file_extension, clean_lines, line, - include_state, function_state, nesting_state, error, - extra_check_functions) - FlagCxx11Features(filename, clean_lines, line, error) - nesting_state.CheckCompletedBlocks(filename, error) - - CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error) - - # Check that the .cc file has included its header if it exists. - if file_extension == 'cc': - CheckHeaderFileIncluded(filename, include_state, error) - - # We check here rather than inside ProcessLine so that we see raw - # lines rather than "cleaned" lines. - CheckForBadCharacters(filename, lines, error) - - CheckForNewlineAtEOF(filename, lines, error) - -def ProcessConfigOverrides(filename): - """ Loads the configuration files and processes the config overrides. - - Args: - filename: The name of the file being processed by the linter. - - Returns: - False if the current |filename| should not be processed further. - """ - - abs_filename = os.path.abspath(filename) - cfg_filters = [] - keep_looking = True - while keep_looking: - abs_path, base_name = os.path.split(abs_filename) - if not base_name: - break # Reached the root directory. - - cfg_file = os.path.join(abs_path, "CPPLINT.cfg") - abs_filename = abs_path - if not os.path.isfile(cfg_file): - continue - - try: - with open(cfg_file) as file_handle: - for line in file_handle: - line, _, _ = line.partition('#') # Remove comments. - if not line.strip(): - continue - - name, _, val = line.partition('=') - name = name.strip() - val = val.strip() - if name == 'set noparent': - keep_looking = False - elif name == 'filter': - cfg_filters.append(val) - elif name == 'exclude_files': - # When matching exclude_files pattern, use the base_name of - # the current file name or the directory name we are processing. - # For example, if we are checking for lint errors in /foo/bar/baz.cc - # and we found the .cfg file at /foo/CPPLINT.cfg, then the config - # file's "exclude_files" filter is meant to be checked against "bar" - # and not "baz" nor "bar/baz.cc". - if base_name: - pattern = re.compile(val) - if pattern.match(base_name): - sys.stderr.write('Ignoring "%s": file excluded by "%s". ' - 'File path component "%s" matches ' - 'pattern "%s"\n' % - (filename, cfg_file, base_name, val)) - return False - elif name == 'linelength': - global _line_length - try: - _line_length = int(val) - except ValueError: - sys.stderr.write('Line length must be numeric.') - else: - sys.stderr.write( - 'Invalid configuration option (%s) in file %s\n' % - (name, cfg_file)) - - except IOError: - sys.stderr.write( - "Skipping config file '%s': Can't open for reading\n" % cfg_file) - keep_looking = False - - # Apply all the accumulated filters in reverse order (top-level directory - # config options having the least priority). - for filter in reversed(cfg_filters): - _AddFilters(filter) - - return True - - -def ProcessFile(filename, vlevel, extra_check_functions=[]): - """Does google-lint on a single file. - - Args: - filename: The name of the file to parse. - - vlevel: The level of errors to report. Every error of confidence - >= verbose_level will be reported. 0 is a good default. - - extra_check_functions: An array of additional check functions that will be - run on each source line. Each function takes 4 - arguments: filename, clean_lines, line, error - """ - - _SetVerboseLevel(vlevel) - _BackupFilters() - - if not ProcessConfigOverrides(filename): - _RestoreFilters() - return - - lf_lines = [] - crlf_lines = [] - try: - # Support the UNIX convention of using "-" for stdin. Note that - # we are not opening the file with universal newline support - # (which codecs doesn't support anyway), so the resulting lines do - # contain trailing '\r' characters if we are reading a file that - # has CRLF endings. - # If after the split a trailing '\r' is present, it is removed - # below. - if filename == '-': - lines = codecs.StreamReaderWriter(sys.stdin, - codecs.getreader('utf8'), - codecs.getwriter('utf8'), - 'replace').read().split('\n') - else: - lines = codecs.open(filename, 'r', 'utf8', 'replace').read().split('\n') - - # Remove trailing '\r'. - # The -1 accounts for the extra trailing blank line we get from split() - for linenum in range(len(lines) - 1): - if lines[linenum].endswith('\r'): - lines[linenum] = lines[linenum].rstrip('\r') - crlf_lines.append(linenum + 1) - else: - lf_lines.append(linenum + 1) - - except IOError: - sys.stderr.write( - "Skipping input '%s': Can't open for reading\n" % filename) - _RestoreFilters() - return - - # Note, if no dot is found, this will give the entire filename as the ext. - file_extension = filename[filename.rfind('.') + 1:] - - # When reading from stdin, the extension is unknown, so no cpplint tests - # should rely on the extension. - if filename != '-' and file_extension not in _valid_extensions: - sys.stderr.write('Ignoring %s; not a valid file name ' - '(%s)\n' % (filename, ', '.join(_valid_extensions))) - else: - ProcessFileData(filename, file_extension, lines, Error, - extra_check_functions) - - # If end-of-line sequences are a mix of LF and CR-LF, issue - # warnings on the lines with CR. - # - # Don't issue any warnings if all lines are uniformly LF or CR-LF, - # since critique can handle these just fine, and the style guide - # doesn't dictate a particular end of line sequence. - # - # We can't depend on os.linesep to determine what the desired - # end-of-line sequence should be, since that will return the - # server-side end-of-line sequence. - if lf_lines and crlf_lines: - # Warn on every line with CR. An alternative approach might be to - # check whether the file is mostly CRLF or just LF, and warn on the - # minority, we bias toward LF here since most tools prefer LF. - for linenum in crlf_lines: - Error(filename, linenum, 'whitespace/newline', 1, - 'Unexpected \\r (^M) found; better to use only \\n') - - sys.stderr.write('Done processing %s\n' % filename) - _RestoreFilters() - - -def PrintUsage(message): - """Prints a brief usage string and exits, optionally with an error message. - - Args: - message: The optional error message. - """ - sys.stderr.write(_USAGE) - if message: - sys.exit('\nFATAL ERROR: ' + message) - else: - sys.exit(1) - - -def PrintCategories(): - """Prints a list of all the error-categories used by error messages. - - These are the categories used to filter messages via --filter. - """ - sys.stderr.write(''.join(' %s\n' % cat for cat in _ERROR_CATEGORIES)) - sys.exit(0) - - -def ParseArguments(args): - """Parses the command line arguments. - - This may set the output format and verbosity level as side-effects. - - Args: - args: The command line arguments: - - Returns: - The list of filenames to lint. - """ - try: - (opts, filenames) = getopt.getopt(args, '', ['help', 'output=', 'verbose=', - 'counting=', - 'filter=', - 'root=', - 'linelength=', - 'extensions=']) - except getopt.GetoptError: - PrintUsage('Invalid arguments.') - - verbosity = _VerboseLevel() - output_format = _OutputFormat() - filters = '' - counting_style = '' - - for (opt, val) in opts: - if opt == '--help': - PrintUsage(None) - elif opt == '--output': - if val not in ('emacs', 'vs7', 'eclipse'): - PrintUsage('The only allowed output formats are emacs, vs7 and eclipse.') - output_format = val - elif opt == '--verbose': - verbosity = int(val) - elif opt == '--filter': - filters = val - if not filters: - PrintCategories() - elif opt == '--counting': - if val not in ('total', 'toplevel', 'detailed'): - PrintUsage('Valid counting options are total, toplevel, and detailed') - counting_style = val - elif opt == '--root': - global _root - _root = val - elif opt == '--linelength': - global _line_length - try: - _line_length = int(val) - except ValueError: - PrintUsage('Line length must be digits.') - elif opt == '--extensions': - global _valid_extensions - try: - _valid_extensions = set(val.split(',')) - except ValueError: - PrintUsage('Extensions must be comma seperated list.') - - if not filenames: - PrintUsage('No files were specified.') - - _SetOutputFormat(output_format) - _SetVerboseLevel(verbosity) - _SetFilters(filters) - _SetCountingStyle(counting_style) - - return filenames - - -def main(): - filenames = ParseArguments(sys.argv[1:]) - - # Change stderr to write with replacement characters so we don't die - # if we try to print something containing non-ASCII characters. - sys.stderr = codecs.StreamReaderWriter(sys.stderr, - codecs.getreader('utf8'), - codecs.getwriter('utf8'), - 'replace') - - _cpplint_state.ResetErrorCounts() - for filename in filenames: - ProcessFile(filename, _cpplint_state.verbose_level) - _cpplint_state.PrintErrorCounts() - - sys.exit(_cpplint_state.error_count > 0) - - -if __name__ == '__main__': - main() diff --git a/externals/tinyobjloader/examples/callback_api/Makefile b/externals/tinyobjloader/examples/callback_api/Makefile deleted file mode 100644 index 45d60d8..0000000 --- a/externals/tinyobjloader/examples/callback_api/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - clang++ -I../../ -Wall -g -o example main.cc diff --git a/externals/tinyobjloader/examples/callback_api/main.cc b/externals/tinyobjloader/examples/callback_api/main.cc deleted file mode 100644 index 1911501..0000000 --- a/externals/tinyobjloader/examples/callback_api/main.cc +++ /dev/null @@ -1,171 +0,0 @@ -// -// An example of how to use callback API. -// This example is minimum and incomplete. Just showing the usage of callback -// API. -// You need to implement your own Mesh data struct constrution based on this -// example in practical. -// -#define TINYOBJLOADER_IMPLEMENTATION -#include "tiny_obj_loader.h" - -#include -#include -#include -#include -#include -#include - -typedef struct { - std::vector vertices; - std::vector normals; - std::vector texcoords; - std::vector v_indices; - std::vector vn_indices; - std::vector vt_indices; - - std::vector materials; - -} MyMesh; - -void vertex_cb(void *user_data, float x, float y, float z, float w) { - MyMesh *mesh = reinterpret_cast(user_data); - printf("v[%ld] = %f, %f, %f (w %f)\n", mesh->vertices.size() / 3, x, y, z, w); - - mesh->vertices.push_back(x); - mesh->vertices.push_back(y); - mesh->vertices.push_back(z); - // Discard w -} - -void normal_cb(void *user_data, float x, float y, float z) { - MyMesh *mesh = reinterpret_cast(user_data); - printf("vn[%ld] = %f, %f, %f\n", mesh->normals.size() / 3, x, y, z); - - mesh->normals.push_back(x); - mesh->normals.push_back(y); - mesh->normals.push_back(z); -} - -void texcoord_cb(void *user_data, float x, float y, float z) { - MyMesh *mesh = reinterpret_cast(user_data); - printf("vt[%ld] = %f, %f, %f\n", mesh->texcoords.size() / 3, x, y, z); - - mesh->texcoords.push_back(x); - mesh->texcoords.push_back(y); - mesh->texcoords.push_back(z); -} - -void index_cb(void *user_data, tinyobj::index_t *indices, int num_indices) { - // NOTE: the value of each index is raw value. - // For example, the application must manually adjust the index with offset - // (e.g. v_indices.size()) when the value is negative(whic means relative - // index). - // Also, the first index starts with 1, not 0. - // See fixIndex() function in tiny_obj_loader.h for details. - // Also, 0 is set for the index value which - // does not exist in .obj - MyMesh *mesh = reinterpret_cast(user_data); - - for (int i = 0; i < num_indices; i++) { - tinyobj::index_t idx = indices[i]; - printf("idx[%ld] = %d, %d, %d\n", mesh->v_indices.size(), idx.vertex_index, - idx.normal_index, idx.texcoord_index); - - if (idx.vertex_index != 0) { - mesh->v_indices.push_back(idx.vertex_index); - } - if (idx.normal_index != 0) { - mesh->vn_indices.push_back(idx.normal_index); - } - if (idx.texcoord_index != 0) { - mesh->vt_indices.push_back(idx.texcoord_index); - } - } -} - -void usemtl_cb(void *user_data, const char *name, int material_idx) { - MyMesh *mesh = reinterpret_cast(user_data); - if ((material_idx > -1) && (material_idx < mesh->materials.size())) { - printf("usemtl. material id = %d(name = %s)\n", material_idx, - mesh->materials[material_idx].name.c_str()); - } else { - printf("usemtl. name = %s\n", name); - } -} - -void mtllib_cb(void *user_data, const tinyobj::material_t *materials, - int num_materials) { - MyMesh *mesh = reinterpret_cast(user_data); - printf("mtllib. # of materials = %d\n", num_materials); - - for (int i = 0; i < num_materials; i++) { - mesh->materials.push_back(materials[i]); - } -} - -void group_cb(void *user_data, const char **names, int num_names) { - // MyMesh *mesh = reinterpret_cast(user_data); - printf("group : name = \n"); - - for (int i = 0; i < num_names; i++) { - printf(" %s\n", names[i]); - } -} - -void object_cb(void *user_data, const char *name) { - // MyMesh *mesh = reinterpret_cast(user_data); - printf("object : name = %s\n", name); -} - -int main(int argc, char **argv) { - tinyobj::callback_t cb; - cb.vertex_cb = vertex_cb; - cb.normal_cb = normal_cb; - cb.texcoord_cb = texcoord_cb; - cb.index_cb = index_cb; - cb.usemtl_cb = usemtl_cb; - cb.mtllib_cb = mtllib_cb; - cb.group_cb = group_cb; - cb.object_cb = object_cb; - - MyMesh mesh; - std::string warn; - std::string err; - std::string filename = "../../models/cornell_box.obj"; - if (argc > 1) { - filename = std::string(argv[1]); - } - std::ifstream ifs(filename.c_str()); - - if (ifs.fail()) { - std::cerr << "file not found." << std::endl; - return EXIT_FAILURE; - } - - tinyobj::MaterialFileReader mtlReader("../../models/"); - - bool ret = tinyobj::LoadObjWithCallback(ifs, cb, &mesh, &mtlReader, &warn, &err); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << err << std::endl; - } - - if (!ret) { - std::cerr << "Failed to parse .obj" << std::endl; - return EXIT_FAILURE; - } - - printf("# of vertices = %ld\n", mesh.vertices.size() / 3); - printf("# of normals = %ld\n", mesh.normals.size() / 3); - printf("# of texcoords = %ld\n", mesh.texcoords.size() / 2); - printf("# of vertex indices = %ld\n", mesh.v_indices.size()); - printf("# of normal indices = %ld\n", mesh.vn_indices.size()); - printf("# of texcoord indices = %ld\n", mesh.vt_indices.size()); - printf("# of materials = %ld\n", mesh.materials.size()); - - return EXIT_SUCCESS; -} diff --git a/externals/tinyobjloader/examples/obj_sticher/obj_sticher.cc b/externals/tinyobjloader/examples/obj_sticher/obj_sticher.cc deleted file mode 100644 index 1057d47..0000000 --- a/externals/tinyobjloader/examples/obj_sticher/obj_sticher.cc +++ /dev/null @@ -1,163 +0,0 @@ -// -// Stiches multiple .obj files into one .obj. -// -#include "obj_writer.h" - -#include "../../tiny_obj_loader.h" - -#include -#include -#include -#include - -typedef std::vector Shape; -typedef std::vector Material; -typedef tinyobj::attrib_t Attribute; - -void -StichObjs( - tinyobj::attrib_t& out_attribute, - std::vector& out_shape, - std::vector& out_material, - const std::vector& attributes, - const std::vector& shapes, - const std::vector& materials) -{ - // The amount of attributes, shape-vectors and material-vecotrs should be the same. - if(attributes.size() != shapes.size() && attributes.size() != materials.size()){ - std::cerr << "Size of attributes, shapes and Materials don't fit!" << attributes.size() << " " << shapes.size() <<" " << materials.size() << std::endl;; - exit(1); - } - int num_shapes = 0; - // 4 values (vertices, normals, texcoords, colors) - std::vector num_attributes(4, 0); - int num_materials = 0; - for(int i = 0; i < shapes.size(); i++){ - num_shapes += shapes[i].size(); - } - for(int i = 0; i < attributes.size(); i++){ - num_attributes[0] += attributes[i].vertices.size(); - num_attributes[1] += attributes[i].normals.size(); - num_attributes[2] += attributes[i].texcoords.size(); - num_attributes[3] += attributes[i].colors.size(); - } - for(int i = 0; i < materials.size(); i++){ - num_materials += materials[i].size(); - } - - // More performant, than push_back - out_attribute.vertices.resize(num_attributes[0]); - out_attribute.normals.resize(num_attributes[1]); - out_attribute.texcoords.resize(num_attributes[2]); - out_attribute.colors.resize(num_attributes[3]); - out_shape.resize(num_shapes); - out_material.resize(num_materials); - - int material_id_offset = 0; - int shape_id_offset = 0; - int vertex_idx_offset = 0; - int normal_idx_offset = 0; - int texcoord_idx_offset = 0; - int color_idx_offset = 0; - - // shapes.size() = attributes.size() = materials.size() - for (size_t i = 0; i < shapes.size(); i++) { - - // Copy shapes - for (size_t k = 0; k < shapes[i].size(); k++) { - std::string new_name = shapes[i][k].name; - // Add suffix - char buf[1024]; - sprintf(buf, "_%04d", (int)i); - new_name += std::string(buf); - - printf("shape[%ld][%ld].name = %s\n", i, k, shapes[i][k].name.c_str()); - - tinyobj::shape_t new_shape = shapes[i][k]; - // Add material offset. - for(size_t f = 0; f < new_shape.mesh.material_ids.size(); f++) { - new_shape.mesh.material_ids[f] += material_id_offset; - } - // Add indices offset. - for(size_t f = 0; f < new_shape.mesh.indices.size(); f++){ - tinyobj::index_t& ref = new_shape.mesh.indices[f]; - if(ref.vertex_index > -1){ - ref.vertex_index += vertex_idx_offset; - } - if(ref.normal_index > -1){ - ref.normal_index += normal_idx_offset; - } - if(ref.texcoord_index > -1){ - ref.texcoord_index += texcoord_idx_offset; - } - } - - new_shape.name = new_name; - printf("shape[%ld][%ld].new_name = %s\n", i, k, new_shape.name.c_str()); - - out_shape[shape_id_offset++] = new_shape; - } - - // Copy materials - for (size_t k = 0; k < materials[i].size(); k++) { - out_material[material_id_offset++] = materials[i][k]; - } - - // Copy attributes (3 floats per vertex, 3 floats per normal, 2 floats per texture-coordinate, 3 floats per color) - // You could also include a check here, if the sizes are dividable by 3 (resp. 2), but it's safe to simply assume, they do. - std::copy(attributes[i].vertices.begin(), attributes[i].vertices.end(), out_attribute.vertices.begin() + vertex_idx_offset * 3); - vertex_idx_offset += attributes[i].vertices.size() / 3; - std::copy(attributes[i].normals.begin(), attributes[i].normals.end(), out_attribute.normals.begin() + normal_idx_offset * 3); - normal_idx_offset += attributes[i].normals.size() / 3; - std::copy(attributes[i].texcoords.begin(), attributes[i].texcoords.end(), out_attribute.texcoords.begin() + texcoord_idx_offset * 2); - texcoord_idx_offset += attributes[i].texcoords.size() / 2; - std::copy(attributes[i].colors.begin(), attributes[i].colors.end(), out_attribute.colors.begin() + color_idx_offset); - color_idx_offset += attributes[i].colors.size(); - } -} - -int main(int argc, char **argv) -{ - if (argc < 3) { - printf("Usage: obj_sticher input0.obj input1.obj ... output.obj\n"); - exit(1); - } - - int num_objfiles = argc - 2; - std::string out_filename = std::string(argv[argc-1]); // last element - - std::vector attributes(num_objfiles); - std::vector shapes(num_objfiles); - std::vector materials(num_objfiles); - - for (int i = 0; i < num_objfiles; i++) { - std::cout << "Loading " << argv[i+1] << " ... " << std::flush; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attributes[i], &shapes[i], &materials[i], &warn, &err, argv[i+1]); - if (!warn.empty()) { - std::cerr << "WARN:" << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << err << std::endl; - } - if (!ret) { - exit(1); - } - - std::cout << "DONE." << std::endl; - } - - Attribute out_attribute; - Shape out_shape; - Material out_material; - StichObjs(out_attribute, out_shape, out_material, attributes, shapes, materials); - - bool coordTransform = true; - bool ret = WriteObj(out_filename, out_attribute, out_shape, out_material, coordTransform); - assert(ret); - - return 0; -} diff --git a/externals/tinyobjloader/examples/obj_sticher/obj_writer.cc b/externals/tinyobjloader/examples/obj_sticher/obj_writer.cc deleted file mode 100644 index 9ea8d7c..0000000 --- a/externals/tinyobjloader/examples/obj_sticher/obj_writer.cc +++ /dev/null @@ -1,164 +0,0 @@ -// -// Simple wavefront .obj writer -// -#include "obj_writer.h" -#include - -static std::string GetFileBasename(const std::string& FileName) -{ - if(FileName.find_last_of(".") != std::string::npos) - return FileName.substr(0, FileName.find_last_of(".")); - return ""; -} - -bool WriteMat(const std::string& filename, const std::vector& materials) { - FILE* fp = fopen(filename.c_str(), "w"); - if (!fp) { - fprintf(stderr, "Failed to open file [ %s ] for write.\n", filename.c_str()); - return false; - } - - for (size_t i = 0; i < materials.size(); i++) { - - tinyobj::material_t mat = materials[i]; - - fprintf(fp, "newmtl %s\n", mat.name.c_str()); - fprintf(fp, "Ka %f %f %f\n", mat.ambient[0], mat.ambient[1], mat.ambient[2]); - fprintf(fp, "Kd %f %f %f\n", mat.diffuse[0], mat.diffuse[1], mat.diffuse[2]); - fprintf(fp, "Ks %f %f %f\n", mat.specular[0], mat.specular[1], mat.specular[2]); - fprintf(fp, "Kt %f %f %f\n", mat.transmittance[0], mat.specular[1], mat.specular[2]); - fprintf(fp, "Ke %f %f %f\n", mat.emission[0], mat.emission[1], mat.emission[2]); - fprintf(fp, "Ns %f\n", mat.shininess); - fprintf(fp, "Ni %f\n", mat.ior); - fprintf(fp, "illum %d\n", mat.illum); - fprintf(fp, "\n"); - // @todo { texture } - } - - fclose(fp); - - return true; -} - -bool WriteObj(const std::string& filename, const tinyobj::attrib_t& attributes, const std::vector& shapes, const std::vector& materials, bool coordTransform) { - FILE* fp = fopen(filename.c_str(), "w"); - if (!fp) { - fprintf(stderr, "Failed to open file [ %s ] for write.\n", filename.c_str()); - return false; - } - - std::string basename = GetFileBasename(filename); - std::string material_filename = basename + ".mtl"; - - int prev_material_id = -1; - - fprintf(fp, "mtllib %s\n\n", material_filename.c_str()); - - // facevarying vtx - for (size_t k = 0; k < attributes.vertices.size(); k+=3) { - if (coordTransform) { - fprintf(fp, "v %f %f %f\n", - attributes.vertices[k + 0], - attributes.vertices[k + 2], - -attributes.vertices[k + 1]); - } else { - fprintf(fp, "v %f %f %f\n", - attributes.vertices[k + 0], - attributes.vertices[k + 1], - attributes.vertices[k + 2]); - } - } - - fprintf(fp, "\n"); - - // facevarying normal - for (size_t k = 0; k < attributes.normals.size(); k += 3) { - if (coordTransform) { - fprintf(fp, "vn %f %f %f\n", - attributes.normals[k + 0], - attributes.normals[k + 2], - -attributes.normals[k + 1]); - } else { - fprintf(fp, "vn %f %f %f\n", - attributes.normals[k + 0], - attributes.normals[k + 1], - attributes.normals[k + 2]); - } - } - - fprintf(fp, "\n"); - - // facevarying texcoord - for (size_t k = 0; k < attributes.texcoords.size(); k += 2) { - fprintf(fp, "vt %f %f\n", - attributes.texcoords[k + 0], - attributes.texcoords[k + 1]); - } - - for (size_t i = 0; i < shapes.size(); i++) { - fprintf(fp, "\n"); - - if (shapes[i].name.empty()) { - fprintf(fp, "g Unknown\n"); - } else { - fprintf(fp, "g %s\n", shapes[i].name.c_str()); - } - - bool has_vn = false; - bool has_vt = false; - // Assumes normals and textures are set shape-wise. - if(shapes[i].mesh.indices.size() > 0){ - has_vn = shapes[i].mesh.indices[0].normal_index != -1; - has_vt = shapes[i].mesh.indices[0].texcoord_index != -1; - } - - // face - int face_index = 0; - for (size_t k = 0; k < shapes[i].mesh.indices.size(); k += shapes[i].mesh.num_face_vertices[face_index++]) { - // Check Materials - int material_id = shapes[i].mesh.material_ids[face_index]; - if (material_id != prev_material_id) { - std::string material_name = materials[material_id].name; - fprintf(fp, "usemtl %s\n", material_name.c_str()); - prev_material_id = material_id; - } - - unsigned char v_per_f = shapes[i].mesh.num_face_vertices[face_index]; - // Imperformant, but if you want to have variable vertices per face, you need some kind of a dynamic loop. - fprintf(fp, "f"); - for(int l = 0; l < v_per_f; l++){ - const tinyobj::index_t& ref = shapes[i].mesh.indices[k + l]; - if(has_vn && has_vt){ - // v0/t0/vn0 - fprintf(fp, " %d/%d/%d", ref.vertex_index + 1, ref.texcoord_index + 1, ref.normal_index + 1); - continue; - } - if(has_vn && !has_vt){ - // v0//vn0 - fprintf(fp, " %d//%d", ref.vertex_index + 1, ref.normal_index + 1); - continue; - } - if(!has_vn && has_vt){ - // v0/vt0 - fprintf(fp, " %d/%d", ref.vertex_index + 1, ref.texcoord_index + 1); - continue; - } - if(!has_vn && !has_vt){ - // v0 v1 v2 - fprintf(fp, " %d", ref.vertex_index + 1); - continue; - } - } - fprintf(fp, "\n"); - } - } - - fclose(fp); - - // - // Write material file - // - bool ret = WriteMat(material_filename, materials); - - return ret; -} diff --git a/externals/tinyobjloader/examples/obj_sticher/obj_writer.h b/externals/tinyobjloader/examples/obj_sticher/obj_writer.h deleted file mode 100644 index 262c681..0000000 --- a/externals/tinyobjloader/examples/obj_sticher/obj_writer.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __OBJ_WRITER_H__ -#define __OBJ_WRITER_H__ - -#include "../../tiny_obj_loader.h" - -extern bool WriteObj(const std::string& filename, const tinyobj::attrib_t& attributes, const std::vector& shapes, const std::vector& materials, bool coordTransform = false); - -#endif // __OBJ_WRITER_H__ diff --git a/externals/tinyobjloader/examples/obj_sticher/premake4.lua b/externals/tinyobjloader/examples/obj_sticher/premake4.lua deleted file mode 100644 index 9c2deb6..0000000 --- a/externals/tinyobjloader/examples/obj_sticher/premake4.lua +++ /dev/null @@ -1,38 +0,0 @@ -lib_sources = { - "../../tiny_obj_loader.cc" -} - -sources = { - "obj_sticher.cc", - "obj_writer.cc", - } - --- premake4.lua -solution "ObjStickerSolution" - configurations { "Release", "Debug" } - - if (os.is("windows")) then - platforms { "x32", "x64" } - else - platforms { "native", "x32", "x64" } - end - - includedirs { - "../../" - } - - -- A project defines one build target - project "obj_sticher" - kind "ConsoleApp" - language "C++" - files { lib_sources, sources } - - configuration "Debug" - defines { "DEBUG" } -- -DDEBUG - flags { "Symbols" } - targetname "obj_sticher_debug" - - configuration "Release" - -- defines { "NDEBUG" } -- -NDEBUG - flags { "Symbols", "Optimize" } - targetname "obj_sticher" diff --git a/externals/tinyobjloader/examples/skin_weight/Makefile b/externals/tinyobjloader/examples/skin_weight/Makefile deleted file mode 100644 index 59e4e3c..0000000 --- a/externals/tinyobjloader/examples/skin_weight/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - clang++ -std=c++11 -o skin_weight -I../../ -g main.cc diff --git a/externals/tinyobjloader/examples/skin_weight/README.md b/externals/tinyobjloader/examples/skin_weight/README.md deleted file mode 100644 index 800d847..0000000 --- a/externals/tinyobjloader/examples/skin_weight/README.md +++ /dev/null @@ -1,7 +0,0 @@ -This example printf skin weight of vertex(`vw`). TinyObjLoader extension. - -## Run example - -``` -$ ./skin_weight ../../models/skin-weight.obj -``` diff --git a/externals/tinyobjloader/examples/skin_weight/main.cc b/externals/tinyobjloader/examples/skin_weight/main.cc deleted file mode 100644 index a3770af..0000000 --- a/externals/tinyobjloader/examples/skin_weight/main.cc +++ /dev/null @@ -1,103 +0,0 @@ -// -// g++ -g -std=c++11 main.cc -// -#define TINYOBJLOADER_IMPLEMENTATION -#include "tiny_obj_loader.h" - -#include -#include -#include -#include -#include -#include - -#include // C++11 - -#ifdef __clang__ -#pragma clang diagnostic push -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif -#endif - -static void ConstructVertexWeight( - const std::vector &vertices, - const std::vector &skin_weights, - std::vector *vertex_skin_weights) -{ - size_t num_vertices = vertices.size() / 3; - - vertex_skin_weights->resize(num_vertices); - - for (size_t i = 0; i < skin_weights.size(); i++) { - const tinyobj::skin_weight_t &skin = skin_weights[i]; - - assert(skin.vertex_id >= 0); - assert(skin.vertex_id < num_vertices); - - (*vertex_skin_weights)[skin.vertex_id] = skin; - } - - // now you can lookup i'th vertex skin weight by `vertex_skin_weights[i]` - - -} - -static bool TestLoadObj(const char* filename, const char* basepath = nullptr, - bool triangulate = true) { - std::cout << "Loading " << filename << std::endl; - - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, filename, - basepath, triangulate); - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - if (!ret) { - printf("Failed to load/parse .obj.\n"); - return false; - } - - std::vector vertex_skin_weights; - - ConstructVertexWeight( - attrib.vertices, - attrib.skin_weights, - &vertex_skin_weights); - - for (size_t v = 0; v < vertex_skin_weights.size(); v++) { - std::cout << "vertex[" << v << "] num_weights = " << vertex_skin_weights[v].weightValues.size() << "\n"; - for (size_t w = 0; w < vertex_skin_weights[v].weightValues.size(); w++) { - std::cout << " w[" << w << "] joint = " << vertex_skin_weights[v].weightValues[w].joint_id - << ", weight = " << vertex_skin_weights[v].weightValues[w].weight << "\n"; - } - } - - return true; -} - - -int main(int argc, char** argv) { - if (argc < 2) { - std::cerr << "Need input.obj\n"; - return EXIT_FAILURE; - } - - const char* basepath = nullptr; - if (argc > 2) { - basepath = argv[2]; - } - assert(true == TestLoadObj(argv[1], basepath)); - - return 0; -} diff --git a/externals/tinyobjloader/examples/viewer/README.md b/externals/tinyobjloader/examples/viewer/README.md deleted file mode 100644 index 76207bf..0000000 --- a/externals/tinyobjloader/examples/viewer/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Simple .obj viewer with glew + glfw3 + OpenGL - -## Requirements - -* premake5 -* glfw3 -* glew -* xcursor -* xinerama - -## Build on MaCOSX - -Install glfw3 and glew using brew. -Then, - - $ premake5 gmake - $ make - -## Build on Linux - -Set `PKG_CONFIG_PATH` or Edit path to glfw3 and glew in `premake4.lua` - -Then, - - $ premake5 gmake - $ make - -## Build on Windows. - -* Visual Studio 2013 -* Windows 64bit - * 32bit may work. - -Put glfw3 and glew library somewhere and replace include and lib path in `premake4.lua` - -Then, - - > premake5.exe vs2013 - -## TODO - -* [ ] Alpha texturing. -* [ ] Support per-face material. -* [ ] Use shader-based GL rendering. -* [ ] PBR shader support. diff --git a/externals/tinyobjloader/examples/viewer/premake4.lua b/externals/tinyobjloader/examples/viewer/premake4.lua deleted file mode 100644 index 4e1e54f..0000000 --- a/externals/tinyobjloader/examples/viewer/premake4.lua +++ /dev/null @@ -1,44 +0,0 @@ -solution "objview" - -- location ( "build" ) - configurations { "Release", "Debug" } - platforms {"native", "x64", "x32"} - - project "objview" - - kind "ConsoleApp" - language "C++" - files { "viewer.cc", "trackball.cc" } - includedirs { "./" } - includedirs { "../../" } - - configuration { "linux" } - linkoptions { "`pkg-config --libs glfw3`" } - links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" } - linkoptions { "-pthread" } - - configuration { "windows" } - -- Path to GLFW3 - includedirs { '../../../../local/glfw-3.1.2.bin.WIN64/include' } - libdirs { '../../../../local/glfw-3.1.2.bin.WIN64/lib-vc2013' } - -- Path to GLEW - includedirs { '../../../../local/glew-1.13.0/include' } - libdirs { '../../../../local/glew-1.13.0/lib/Release/x64' } - - links { "glfw3", "glew32", "gdi32", "winmm", "user32", "glu32","opengl32", "kernel32" } - defines { "_CRT_SECURE_NO_WARNINGS" } - - configuration { "macosx" } - includedirs { "/usr/local/include" } - buildoptions { "-Wno-deprecated-declarations" } - libdirs { "/usr/local/lib" } - links { "glfw3", "GLEW" } - linkoptions { "-framework OpenGL", "-framework Cocoa", "-framework IOKit", "-framework CoreVideo" } - - configuration "Debug" - defines { "DEBUG" } - flags { "Symbols", "ExtraWarnings"} - - configuration "Release" - defines { "NDEBUG" } - flags { "Optimize", "ExtraWarnings"} - diff --git a/externals/tinyobjloader/examples/viewer/stb_image.h b/externals/tinyobjloader/examples/viewer/stb_image.h deleted file mode 100644 index a3c1129..0000000 --- a/externals/tinyobjloader/examples/viewer/stb_image.h +++ /dev/null @@ -1,6755 +0,0 @@ -/* stb_image - v2.12 - public domain image loader - http://nothings.org/stb_image.h - no warranty implied; use at your own risk - - Do this: - #define STB_IMAGE_IMPLEMENTATION - before you include this file in *one* C or C++ file to create the implementation. - - // i.e. it should look like this: - #include ... - #include ... - #include ... - #define STB_IMAGE_IMPLEMENTATION - #include "stb_image.h" - - You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. - And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free - - - QUICK NOTES: - Primarily of interest to game developers and other people who can - avoid problematic images and only need the trivial interface - - JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) - PNG 1/2/4/8-bit-per-channel (16 bpc not supported) - - TGA (not sure what subset, if a subset) - BMP non-1bpp, non-RLE - PSD (composited view only, no extra channels, 8/16 bit-per-channel) - - GIF (*comp always reports as 4-channel) - HDR (radiance rgbE format) - PIC (Softimage PIC) - PNM (PPM and PGM binary only) - - Animated GIF still needs a proper API, but here's one way to do it: - http://gist.github.com/urraka/685d9a6340b26b830d49 - - - decode from memory or through FILE (define STBI_NO_STDIO to remove code) - - decode from arbitrary I/O callbacks - - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) - - Full documentation under "DOCUMENTATION" below. - - - Revision 2.00 release notes: - - - Progressive JPEG is now supported. - - - PPM and PGM binary formats are now supported, thanks to Ken Miller. - - - x86 platforms now make use of SSE2 SIMD instructions for - JPEG decoding, and ARM platforms can use NEON SIMD if requested. - This work was done by Fabian "ryg" Giesen. SSE2 is used by - default, but NEON must be enabled explicitly; see docs. - - With other JPEG optimizations included in this version, we see - 2x speedup on a JPEG on an x86 machine, and a 1.5x speedup - on a JPEG on an ARM machine, relative to previous versions of this - library. The same results will not obtain for all JPGs and for all - x86/ARM machines. (Note that progressive JPEGs are significantly - slower to decode than regular JPEGs.) This doesn't mean that this - is the fastest JPEG decoder in the land; rather, it brings it - closer to parity with standard libraries. If you want the fastest - decode, look elsewhere. (See "Philosophy" section of docs below.) - - See final bullet items below for more info on SIMD. - - - Added STBI_MALLOC, STBI_REALLOC, and STBI_FREE macros for replacing - the memory allocator. Unlike other STBI libraries, these macros don't - support a context parameter, so if you need to pass a context in to - the allocator, you'll have to store it in a global or a thread-local - variable. - - - Split existing STBI_NO_HDR flag into two flags, STBI_NO_HDR and - STBI_NO_LINEAR. - STBI_NO_HDR: suppress implementation of .hdr reader format - STBI_NO_LINEAR: suppress high-dynamic-range light-linear float API - - - You can suppress implementation of any of the decoders to reduce - your code footprint by #defining one or more of the following - symbols before creating the implementation. - - STBI_NO_JPEG - STBI_NO_PNG - STBI_NO_BMP - STBI_NO_PSD - STBI_NO_TGA - STBI_NO_GIF - STBI_NO_HDR - STBI_NO_PIC - STBI_NO_PNM (.ppm and .pgm) - - - You can request *only* certain decoders and suppress all other ones - (this will be more forward-compatible, as addition of new decoders - doesn't require you to disable them explicitly): - - STBI_ONLY_JPEG - STBI_ONLY_PNG - STBI_ONLY_BMP - STBI_ONLY_PSD - STBI_ONLY_TGA - STBI_ONLY_GIF - STBI_ONLY_HDR - STBI_ONLY_PIC - STBI_ONLY_PNM (.ppm and .pgm) - - Note that you can define multiples of these, and you will get all - of them ("only x" and "only y" is interpreted to mean "only x&y"). - - - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still - want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB - - - Compilation of all SIMD code can be suppressed with - #define STBI_NO_SIMD - It should not be necessary to disable SIMD unless you have issues - compiling (e.g. using an x86 compiler which doesn't support SSE - intrinsics or that doesn't support the method used to detect - SSE2 support at run-time), and even those can be reported as - bugs so I can refine the built-in compile-time checking to be - smarter. - - - The old STBI_SIMD system which allowed installing a user-defined - IDCT etc. has been removed. If you need this, don't upgrade. My - assumption is that almost nobody was doing this, and those who - were will find the built-in SIMD more satisfactory anyway. - - - RGB values computed for JPEG images are slightly different from - previous versions of stb_image. (This is due to using less - integer precision in SIMD.) The C code has been adjusted so - that the same RGB values will be computed regardless of whether - SIMD support is available, so your app should always produce - consistent results. But these results are slightly different from - previous versions. (Specifically, about 3% of available YCbCr values - will compute different RGB results from pre-1.49 versions by +-1; - most of the deviating values are one smaller in the G channel.) - - - If you must produce consistent results with previous versions of - stb_image, #define STBI_JPEG_OLD and you will get the same results - you used to; however, you will not get the SIMD speedups for - the YCbCr-to-RGB conversion step (although you should still see - significant JPEG speedup from the other changes). - - Please note that STBI_JPEG_OLD is a temporary feature; it will be - removed in future versions of the library. It is only intended for - near-term back-compatibility use. - - - Latest revision history: - 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes - 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 - RGB-format JPEG; remove white matting in PSD; - allocate large structures on the stack; - correct channel count for PNG & BMP - 2.10 (2016-01-22) avoid warning introduced in 2.09 - 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED - 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA - 2.07 (2015-09-13) partial animated GIF support - limited 16-bit PSD support - minor bugs, code cleanup, and compiler warnings - 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value - 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning - 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit - 2.03 (2015-04-12) additional corruption checking - stbi_set_flip_vertically_on_load - fix NEON support; fix mingw support - 2.02 (2015-01-19) fix incorrect assert, fix warning - 2.01 (2015-01-17) fix various warnings - 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG - 2.00 (2014-12-25) optimize JPEG, including x86 SSE2 & ARM NEON SIMD - progressive JPEG - PGM/PPM support - STBI_MALLOC,STBI_REALLOC,STBI_FREE - STBI_NO_*, STBI_ONLY_* - GIF bugfix - - See end of file for full revision history. - - - ============================ Contributors ========================= - - Image formats Extensions, features - Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) - Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) - Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) - Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) - Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) - Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) - Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) - urraka@github (animated gif) Junggon Kim (PNM comments) - Daniel Gibson (16-bit TGA) - - Optimizations & bugfixes - Fabian "ryg" Giesen - Arseny Kapoulkine - - Bug & warning fixes - Marc LeBlanc David Woo Guillaume George Martins Mozeiko - Christpher Lloyd Martin Golini Jerry Jansson Joseph Thomson - Dave Moore Roy Eltham Hayaki Saito Phil Jordan - Won Chun Luke Graham Johan Duparc Nathan Reed - the Horde3D community Thomas Ruf Ronny Chevalier Nick Verigakis - Janez Zemva John Bartholomew Michal Cichon svdijk@github - Jonathan Blow Ken Hamada Tero Hanninen Baldur Karlsson - Laurent Gomila Cort Stratton Sergio Gonzalez romigrou@github - Aruelien Pocheville Thibault Reuille Cass Everitt Matthew Gregan - Ryamond Barbiero Paul Du Bois Engin Manap snagar@github - Michaelangel007@github Oriol Ferrer Mesia socks-the-fox - Blazej Dariusz Roszkowski - - -LICENSE - -This software is dual-licensed to the public domain and under the following -license: you are granted a perpetual, irrevocable license to copy, modify, -publish, and distribute this file as you see fit. - -*/ - -#ifndef STBI_INCLUDE_STB_IMAGE_H -#define STBI_INCLUDE_STB_IMAGE_H - -// DOCUMENTATION -// -// Limitations: -// - no 16-bit-per-channel PNG -// - no 12-bit-per-channel JPEG -// - no JPEGs with arithmetic coding -// - no 1-bit BMP -// - GIF always returns *comp=4 -// -// Basic usage (see HDR discussion below for HDR usage): -// int x,y,n; -// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); -// // ... process data if not NULL ... -// // ... x = width, y = height, n = # 8-bit components per pixel ... -// // ... replace '0' with '1'..'4' to force that many components per pixel -// // ... but 'n' will always be the number that it would have been if you said 0 -// stbi_image_free(data) -// -// Standard parameters: -// int *x -- outputs image width in pixels -// int *y -- outputs image height in pixels -// int *comp -- outputs # of image components in image file -// int req_comp -- if non-zero, # of image components requested in result -// -// The return value from an image loader is an 'unsigned char *' which points -// to the pixel data, or NULL on an allocation failure or if the image is -// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, -// with each pixel consisting of N interleaved 8-bit components; the first -// pixel pointed to is top-left-most in the image. There is no padding between -// image scanlines or between pixels, regardless of format. The number of -// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. -// If req_comp is non-zero, *comp has the number of components that _would_ -// have been output otherwise. E.g. if you set req_comp to 4, you will always -// get RGBA output, but you can check *comp to see if it's trivially opaque -// because e.g. there were only 3 channels in the source image. -// -// An output image with N components has the following components interleaved -// in this order in each pixel: -// -// N=#comp components -// 1 grey -// 2 grey, alpha -// 3 red, green, blue -// 4 red, green, blue, alpha -// -// If image loading fails for any reason, the return value will be NULL, -// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() -// can be queried for an extremely brief, end-user unfriendly explanation -// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid -// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly -// more user-friendly ones. -// -// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. -// -// =========================================================================== -// -// Philosophy -// -// stb libraries are designed with the following priorities: -// -// 1. easy to use -// 2. easy to maintain -// 3. good performance -// -// Sometimes I let "good performance" creep up in priority over "easy to maintain", -// and for best performance I may provide less-easy-to-use APIs that give higher -// performance, in addition to the easy to use ones. Nevertheless, it's important -// to keep in mind that from the standpoint of you, a client of this library, -// all you care about is #1 and #3, and stb libraries do not emphasize #3 above all. -// -// Some secondary priorities arise directly from the first two, some of which -// make more explicit reasons why performance can't be emphasized. -// -// - Portable ("ease of use") -// - Small footprint ("easy to maintain") -// - No dependencies ("ease of use") -// -// =========================================================================== -// -// I/O callbacks -// -// I/O callbacks allow you to read from arbitrary sources, like packaged -// files or some other source. Data read from callbacks are processed -// through a small internal buffer (currently 128 bytes) to try to reduce -// overhead. -// -// The three functions you must define are "read" (reads some bytes of data), -// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). -// -// =========================================================================== -// -// SIMD support -// -// The JPEG decoder will try to automatically use SIMD kernels on x86 when -// supported by the compiler. For ARM Neon support, you must explicitly -// request it. -// -// (The old do-it-yourself SIMD API is no longer supported in the current -// code.) -// -// On x86, SSE2 will automatically be used when available based on a run-time -// test; if not, the generic C versions are used as a fall-back. On ARM targets, -// the typical path is to have separate builds for NEON and non-NEON devices -// (at least this is true for iOS and Android). Therefore, the NEON support is -// toggled by a build flag: define STBI_NEON to get NEON loops. -// -// The output of the JPEG decoder is slightly different from versions where -// SIMD support was introduced (that is, for versions before 1.49). The -// difference is only +-1 in the 8-bit RGB channels, and only on a small -// fraction of pixels. You can force the pre-1.49 behavior by defining -// STBI_JPEG_OLD, but this will disable some of the SIMD decoding path -// and hence cost some performance. -// -// If for some reason you do not want to use any of SIMD code, or if -// you have issues compiling it, you can disable it entirely by -// defining STBI_NO_SIMD. -// -// =========================================================================== -// -// HDR image support (disable by defining STBI_NO_HDR) -// -// stb_image now supports loading HDR images in general, and currently -// the Radiance .HDR file format, although the support is provided -// generically. You can still load any file through the existing interface; -// if you attempt to load an HDR file, it will be automatically remapped to -// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; -// both of these constants can be reconfigured through this interface: -// -// stbi_hdr_to_ldr_gamma(2.2f); -// stbi_hdr_to_ldr_scale(1.0f); -// -// (note, do not use _inverse_ constants; stbi_image will invert them -// appropriately). -// -// Additionally, there is a new, parallel interface for loading files as -// (linear) floats to preserve the full dynamic range: -// -// float *data = stbi_loadf(filename, &x, &y, &n, 0); -// -// If you load LDR images through this interface, those images will -// be promoted to floating point values, run through the inverse of -// constants corresponding to the above: -// -// stbi_ldr_to_hdr_scale(1.0f); -// stbi_ldr_to_hdr_gamma(2.2f); -// -// Finally, given a filename (or an open file or memory block--see header -// file for details) containing image data, you can query for the "most -// appropriate" interface to use (that is, whether the image is HDR or -// not), using: -// -// stbi_is_hdr(char *filename); -// -// =========================================================================== -// -// iPhone PNG support: -// -// By default we convert iphone-formatted PNGs back to RGB, even though -// they are internally encoded differently. You can disable this conversion -// by by calling stbi_convert_iphone_png_to_rgb(0), in which case -// you will always just get the native iphone "format" through (which -// is BGR stored in RGB). -// -// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per -// pixel to remove any premultiplied alpha *only* if the image file explicitly -// says there's premultiplied data (currently only happens in iPhone images, -// and only if iPhone convert-to-rgb processing is on). -// - - -#ifndef STBI_NO_STDIO -#include -#endif // STBI_NO_STDIO - -#define STBI_VERSION 1 - -enum -{ - STBI_default = 0, // only used for req_comp - - STBI_grey = 1, - STBI_grey_alpha = 2, - STBI_rgb = 3, - STBI_rgb_alpha = 4 -}; - -typedef unsigned char stbi_uc; - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef STB_IMAGE_STATIC -#define STBIDEF static -#else -#define STBIDEF extern -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// PRIMARY API - works on images of any type -// - -// -// load image by filename, open file, or memory buffer -// - -typedef struct -{ - int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read - void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative - int (*eof) (void *user); // returns nonzero if we are at end of file/data -} stbi_io_callbacks; - -STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); -STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *comp, int req_comp); -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *comp, int req_comp); - -#ifndef STBI_NO_STDIO -STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); -// for stbi_load_from_file, file pointer is left pointing immediately after image -#endif - -#ifndef STBI_NO_LINEAR - STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); - STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); - STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); - - #ifndef STBI_NO_STDIO - STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); - #endif -#endif - -#ifndef STBI_NO_HDR - STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); - STBIDEF void stbi_hdr_to_ldr_scale(float scale); -#endif // STBI_NO_HDR - -#ifndef STBI_NO_LINEAR - STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); - STBIDEF void stbi_ldr_to_hdr_scale(float scale); -#endif // STBI_NO_LINEAR - -// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename); -STBIDEF int stbi_is_hdr_from_file(FILE *f); -#endif // STBI_NO_STDIO - - -// get a VERY brief reason for failure -// NOT THREADSAFE -STBIDEF const char *stbi_failure_reason (void); - -// free the loaded image -- this is just free() -STBIDEF void stbi_image_free (void *retval_from_stbi_load); - -// get image dimensions & components without fully decoding -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); - -#endif - - - -// for image formats that explicitly notate that they have premultiplied alpha, -// we just return the colors as stored in the file. set this flag to force -// unpremultiplication. results are undefined if the unpremultiply overflow. -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); - -// indicate whether we should process iphone images back to canonical format, -// or just pass them through "as-is" -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); - -// flip the image vertically, so the first pixel in the output array is the bottom left -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); - -// ZLIB client - used by PNG, available for other purposes - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); -STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - - -#ifdef __cplusplus -} -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBI_INCLUDE_STB_IMAGE_H - -#ifdef STB_IMAGE_IMPLEMENTATION - -#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ - || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ - || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ - || defined(STBI_ONLY_ZLIB) - #ifndef STBI_ONLY_JPEG - #define STBI_NO_JPEG - #endif - #ifndef STBI_ONLY_PNG - #define STBI_NO_PNG - #endif - #ifndef STBI_ONLY_BMP - #define STBI_NO_BMP - #endif - #ifndef STBI_ONLY_PSD - #define STBI_NO_PSD - #endif - #ifndef STBI_ONLY_TGA - #define STBI_NO_TGA - #endif - #ifndef STBI_ONLY_GIF - #define STBI_NO_GIF - #endif - #ifndef STBI_ONLY_HDR - #define STBI_NO_HDR - #endif - #ifndef STBI_ONLY_PIC - #define STBI_NO_PIC - #endif - #ifndef STBI_ONLY_PNM - #define STBI_NO_PNM - #endif -#endif - -#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) -#define STBI_NO_ZLIB -#endif - - -#include -#include // ptrdiff_t on osx -#include -#include - -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) -#include // ldexp -#endif - -#ifndef STBI_NO_STDIO -#include -#endif - -#ifndef STBI_ASSERT -#include -#define STBI_ASSERT(x) assert(x) -#endif - - -#ifndef _MSC_VER - #ifdef __cplusplus - #define stbi_inline inline - #else - #define stbi_inline - #endif -#else - #define stbi_inline __forceinline -#endif - - -#ifdef _MSC_VER -typedef unsigned short stbi__uint16; -typedef signed short stbi__int16; -typedef unsigned int stbi__uint32; -typedef signed int stbi__int32; -#else -#include -typedef uint16_t stbi__uint16; -typedef int16_t stbi__int16; -typedef uint32_t stbi__uint32; -typedef int32_t stbi__int32; -#endif - -// should produce compiler error if size is wrong -typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; - -#ifdef _MSC_VER -#define STBI_NOTUSED(v) (void)(v) -#else -#define STBI_NOTUSED(v) (void)sizeof(v) -#endif - -#ifdef _MSC_VER -#define STBI_HAS_LROTL -#endif - -#ifdef STBI_HAS_LROTL - #define stbi_lrot(x,y) _lrotl(x,y) -#else - #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) -#endif - -#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) -// ok -#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) -// ok -#else -#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." -#endif - -#ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) -#define STBI_REALLOC(p,newsz) realloc(p,newsz) -#define STBI_FREE(p) free(p) -#endif - -#ifndef STBI_REALLOC_SIZED -#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) -#endif - -// x86/x64 detection -#if defined(__x86_64__) || defined(_M_X64) -#define STBI__X64_TARGET -#elif defined(__i386) || defined(_M_IX86) -#define STBI__X86_TARGET -#endif - -#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) -// NOTE: not clear do we actually need this for the 64-bit path? -// gcc doesn't support sse2 intrinsics unless you compile with -msse2, -// (but compiling with -msse2 allows the compiler to use SSE2 everywhere; -// this is just broken and gcc are jerks for not fixing it properly -// http://www.virtualdub.org/blog/pivot/entry.php?id=363 ) -#define STBI_NO_SIMD -#endif - -#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) -// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET -// -// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the -// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. -// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not -// simultaneously enabling "-mstackrealign". -// -// See https://github.com/nothings/stb/issues/81 for more information. -// -// So default to no SSE2 on 32-bit MinGW. If you've read this far and added -// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. -#define STBI_NO_SIMD -#endif - -#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) -#define STBI_SSE2 -#include - -#ifdef _MSC_VER - -#if _MSC_VER >= 1400 // not VC6 -#include // __cpuid -static int stbi__cpuid3(void) -{ - int info[4]; - __cpuid(info,1); - return info[3]; -} -#else -static int stbi__cpuid3(void) -{ - int res; - __asm { - mov eax,1 - cpuid - mov res,edx - } - return res; -} -#endif - -#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name - -static int stbi__sse2_available() -{ - int info3 = stbi__cpuid3(); - return ((info3 >> 26) & 1) != 0; -} -#else // assume GCC-style if not VC++ -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) - -static int stbi__sse2_available() -{ -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later - // GCC 4.8+ has a nice way to do this - return __builtin_cpu_supports("sse2"); -#else - // portable way to do this, preferably without using GCC inline ASM? - // just bail for now. - return 0; -#endif -} -#endif -#endif - -// ARM NEON -#if defined(STBI_NO_SIMD) && defined(STBI_NEON) -#undef STBI_NEON -#endif - -#ifdef STBI_NEON -#include -// assume GCC or Clang on ARM targets -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) -#endif - -#ifndef STBI_SIMD_ALIGN -#define STBI_SIMD_ALIGN(type, name) type name -#endif - -/////////////////////////////////////////////// -// -// stbi__context struct and start_xxx functions - -// stbi__context structure is our basic context used by all images, so it -// contains all the IO context, plus some basic image information -typedef struct -{ - stbi__uint32 img_x, img_y; - int img_n, img_out_n; - - stbi_io_callbacks io; - void *io_user_data; - - int read_from_callbacks; - int buflen; - stbi_uc buffer_start[128]; - - stbi_uc *img_buffer, *img_buffer_end; - stbi_uc *img_buffer_original, *img_buffer_original_end; -} stbi__context; - - -static void stbi__refill_buffer(stbi__context *s); - -// initialize a memory-decode context -static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) -{ - s->io.read = NULL; - s->read_from_callbacks = 0; - s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; - s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; -} - -// initialize a callback-based context -static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) -{ - s->io = *c; - s->io_user_data = user; - s->buflen = sizeof(s->buffer_start); - s->read_from_callbacks = 1; - s->img_buffer_original = s->buffer_start; - stbi__refill_buffer(s); - s->img_buffer_original_end = s->img_buffer_end; -} - -#ifndef STBI_NO_STDIO - -static int stbi__stdio_read(void *user, char *data, int size) -{ - return (int) fread(data,1,size,(FILE*) user); -} - -static void stbi__stdio_skip(void *user, int n) -{ - fseek((FILE*) user, n, SEEK_CUR); -} - -static int stbi__stdio_eof(void *user) -{ - return feof((FILE*) user); -} - -static stbi_io_callbacks stbi__stdio_callbacks = -{ - stbi__stdio_read, - stbi__stdio_skip, - stbi__stdio_eof, -}; - -static void stbi__start_file(stbi__context *s, FILE *f) -{ - stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); -} - -//static void stop_file(stbi__context *s) { } - -#endif // !STBI_NO_STDIO - -static void stbi__rewind(stbi__context *s) -{ - // conceptually rewind SHOULD rewind to the beginning of the stream, - // but we just rewind to the beginning of the initial buffer, because - // we only use it after doing 'test', which only ever looks at at most 92 bytes - s->img_buffer = s->img_buffer_original; - s->img_buffer_end = s->img_buffer_original_end; -} - -#ifndef STBI_NO_JPEG -static int stbi__jpeg_test(stbi__context *s); -static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNG -static int stbi__png_test(stbi__context *s); -static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_BMP -static int stbi__bmp_test(stbi__context *s); -static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_TGA -static int stbi__tga_test(stbi__context *s); -static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s); -static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_HDR -static int stbi__hdr_test(stbi__context *s); -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_test(stbi__context *s); -static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_GIF -static int stbi__gif_test(stbi__context *s); -static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNM -static int stbi__pnm_test(stbi__context *s); -static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -// this is not threadsafe -static const char *stbi__g_failure_reason; - -STBIDEF const char *stbi_failure_reason(void) -{ - return stbi__g_failure_reason; -} - -static int stbi__err(const char *str) -{ - stbi__g_failure_reason = str; - return 0; -} - -static void *stbi__malloc(size_t size) -{ - return STBI_MALLOC(size); -} - -// stbi__err - error -// stbi__errpf - error returning pointer to float -// stbi__errpuc - error returning pointer to unsigned char - -#ifdef STBI_NO_FAILURE_STRINGS - #define stbi__err(x,y) 0 -#elif defined(STBI_FAILURE_USERMSG) - #define stbi__err(x,y) stbi__err(y) -#else - #define stbi__err(x,y) stbi__err(x) -#endif - -#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) -#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) - -STBIDEF void stbi_image_free(void *retval_from_stbi_load) -{ - STBI_FREE(retval_from_stbi_load); -} - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); -#endif - -#ifndef STBI_NO_HDR -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); -#endif - -static int stbi__vertically_flip_on_load = 0; - -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) -{ - stbi__vertically_flip_on_load = flag_true_if_should_flip; -} - -static unsigned char *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - #ifndef STBI_NO_JPEG - if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_PNG - if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_BMP - if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_GIF - if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_PSD - if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_PIC - if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp); - #endif - #ifndef STBI_NO_PNM - if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp); - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - float *hdr = stbi__hdr_load(s, x,y,comp,req_comp); - return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); - } - #endif - - #ifndef STBI_NO_TGA - // test tga last because it's a crappy test! - if (stbi__tga_test(s)) - return stbi__tga_load(s,x,y,comp,req_comp); - #endif - - return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); -} - -static unsigned char *stbi__load_flip(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *result = stbi__load_main(s, x, y, comp, req_comp); - - if (stbi__vertically_flip_on_load && result != NULL) { - int w = *x, h = *y; - int depth = req_comp ? req_comp : *comp; - int row,col,z; - stbi_uc temp; - - // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once - for (row = 0; row < (h>>1); row++) { - for (col = 0; col < w; col++) { - for (z = 0; z < depth; z++) { - temp = result[(row * w + col) * depth + z]; - result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z]; - result[((h - row - 1) * w + col) * depth + z] = temp; - } - } - } - } - - return result; -} - -#ifndef STBI_NO_HDR -static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) -{ - if (stbi__vertically_flip_on_load && result != NULL) { - int w = *x, h = *y; - int depth = req_comp ? req_comp : *comp; - int row,col,z; - float temp; - - // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once - for (row = 0; row < (h>>1); row++) { - for (col = 0; col < w; col++) { - for (z = 0; z < depth; z++) { - temp = result[(row * w + col) * depth + z]; - result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z]; - result[((h - row - 1) * w + col) * depth + z] = temp; - } - } - } - } -} -#endif - -#ifndef STBI_NO_STDIO - -static FILE *stbi__fopen(char const *filename, char const *mode) -{ - FILE *f; -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != fopen_s(&f, filename, mode)) - f=0; -#else - f = fopen(filename, mode); -#endif - return f; -} - - -STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - unsigned char *result; - if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *result; - stbi__context s; - stbi__start_file(&s,f); - result = stbi__load_flip(&s,x,y,comp,req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; -} -#endif //!STBI_NO_STDIO - -STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__load_flip(&s,x,y,comp,req_comp); -} - -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__load_flip(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_LINEAR -static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *data; - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp); - if (hdr_data) - stbi__float_postprocess(hdr_data,x,y,comp,req_comp); - return hdr_data; - } - #endif - data = stbi__load_flip(s, x, y, comp, req_comp); - if (data) - return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); - return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); -} - -STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_STDIO -STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - float *result; - FILE *f = stbi__fopen(filename, "rb"); - if (!f) return stbi__errpf("can't fopen", "Unable to open file"); - result = stbi_loadf_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_file(&s,f); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} -#endif // !STBI_NO_STDIO - -#endif // !STBI_NO_LINEAR - -// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is -// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always -// reports false! - -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(buffer); - STBI_NOTUSED(len); - return 0; - #endif -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result=0; - if (f) { - result = stbi_is_hdr_from_file(f); - fclose(f); - } - return result; -} - -STBIDEF int stbi_is_hdr_from_file(FILE *f) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_file(&s,f); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(f); - return 0; - #endif -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(clbk); - STBI_NOTUSED(user); - return 0; - #endif -} - -#ifndef STBI_NO_LINEAR -static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; - -STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } -STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } -#endif - -static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; - -STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } -STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } - - -////////////////////////////////////////////////////////////////////////////// -// -// Common code used by all image loaders -// - -enum -{ - STBI__SCAN_load=0, - STBI__SCAN_type, - STBI__SCAN_header -}; - -static void stbi__refill_buffer(stbi__context *s) -{ - int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); - if (n == 0) { - // at end of file, treat same as if from memory, but need to handle case - // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file - s->read_from_callbacks = 0; - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start+1; - *s->img_buffer = 0; - } else { - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + n; - } -} - -stbi_inline static stbi_uc stbi__get8(stbi__context *s) -{ - if (s->img_buffer < s->img_buffer_end) - return *s->img_buffer++; - if (s->read_from_callbacks) { - stbi__refill_buffer(s); - return *s->img_buffer++; - } - return 0; -} - -stbi_inline static int stbi__at_eof(stbi__context *s) -{ - if (s->io.read) { - if (!(s->io.eof)(s->io_user_data)) return 0; - // if feof() is true, check if buffer = end - // special case: we've only got the special 0 character at the end - if (s->read_from_callbacks == 0) return 1; - } - - return s->img_buffer >= s->img_buffer_end; -} - -static void stbi__skip(stbi__context *s, int n) -{ - if (n < 0) { - s->img_buffer = s->img_buffer_end; - return; - } - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - s->img_buffer = s->img_buffer_end; - (s->io.skip)(s->io_user_data, n - blen); - return; - } - } - s->img_buffer += n; -} - -static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) -{ - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - int res, count; - - memcpy(buffer, s->img_buffer, blen); - - count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); - res = (count == (n-blen)); - s->img_buffer = s->img_buffer_end; - return res; - } - } - - if (s->img_buffer+n <= s->img_buffer_end) { - memcpy(buffer, s->img_buffer, n); - s->img_buffer += n; - return 1; - } else - return 0; -} - -static int stbi__get16be(stbi__context *s) -{ - int z = stbi__get8(s); - return (z << 8) + stbi__get8(s); -} - -static stbi__uint32 stbi__get32be(stbi__context *s) -{ - stbi__uint32 z = stbi__get16be(s); - return (z << 16) + stbi__get16be(s); -} - -#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) -// nothing -#else -static int stbi__get16le(stbi__context *s) -{ - int z = stbi__get8(s); - return z + (stbi__get8(s) << 8); -} -#endif - -#ifndef STBI_NO_BMP -static stbi__uint32 stbi__get32le(stbi__context *s) -{ - stbi__uint32 z = stbi__get16le(s); - return z + (stbi__get16le(s) << 16); -} -#endif - -#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings - - -////////////////////////////////////////////////////////////////////////////// -// -// generic converter from built-in img_n to req_comp -// individual types do this automatically as much as possible (e.g. jpeg -// does all cases internally since it needs to colorspace convert anyway, -// and it never has alpha, so very few cases ). png can automatically -// interleave an alpha=255 channel, but falls back to this for other cases -// -// assume data buffer is malloced, so malloc a new one and free that one -// only failure mode is malloc failing - -static stbi_uc stbi__compute_y(int r, int g, int b) -{ - return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); -} - -static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) -{ - int i,j; - unsigned char *good; - - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - - good = (unsigned char *) stbi__malloc(req_comp * x * y); - if (good == NULL) { - STBI_FREE(data); - return stbi__errpuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - unsigned char *src = data + j * x * img_n ; - unsigned char *dest = good + j * x * req_comp; - - #define COMBO(a,b) ((a)*8+(b)) - #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (COMBO(img_n, req_comp)) { - CASE(1,2) dest[0]=src[0], dest[1]=255; break; - CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; - CASE(2,1) dest[0]=src[0]; break; - CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; - CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; - CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break; - CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; - CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; - default: STBI_ASSERT(0); - } - #undef CASE - } - - STBI_FREE(data); - return good; -} - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) -{ - int i,k,n; - float *output = (float *) stbi__malloc(x * y * comp * sizeof(float)); - if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); - } - if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; - } - STBI_FREE(data); - return output; -} -#endif - -#ifndef STBI_NO_HDR -#define stbi__float2int(x) ((int) (x)) -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) -{ - int i,k,n; - stbi_uc *output = (stbi_uc *) stbi__malloc(x * y * comp); - if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - if (k < comp) { - float z = data[i*comp+k] * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - } - STBI_FREE(data); - return output; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// "baseline" JPEG/JFIF decoder -// -// simple implementation -// - doesn't support delayed output of y-dimension -// - simple interface (only one output format: 8-bit interleaved RGB) -// - doesn't try to recover corrupt jpegs -// - doesn't allow partial loading, loading multiple at once -// - still fast on x86 (copying globals into locals doesn't help x86) -// - allocates lots of intermediate memory (full size of all components) -// - non-interleaved case requires this anyway -// - allows good upsampling (see next) -// high-quality -// - upsampled channels are bilinearly interpolated, even across blocks -// - quality integer IDCT derived from IJG's 'slow' -// performance -// - fast huffman; reasonable integer IDCT -// - some SIMD kernels for common paths on targets with SSE2/NEON -// - uses a lot of intermediate memory, could cache poorly - -#ifndef STBI_NO_JPEG - -// huffman decoding acceleration -#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache - -typedef struct -{ - stbi_uc fast[1 << FAST_BITS]; - // weirdly, repacking this into AoS is a 10% speed loss, instead of a win - stbi__uint16 code[256]; - stbi_uc values[256]; - stbi_uc size[257]; - unsigned int maxcode[18]; - int delta[17]; // old 'firstsymbol' - old 'firstcode' -} stbi__huffman; - -typedef struct -{ - stbi__context *s; - stbi__huffman huff_dc[4]; - stbi__huffman huff_ac[4]; - stbi_uc dequant[4][64]; - stbi__int16 fast_ac[4][1 << FAST_BITS]; - -// sizes for components, interleaved MCUs - int img_h_max, img_v_max; - int img_mcu_x, img_mcu_y; - int img_mcu_w, img_mcu_h; - -// definition of jpeg image component - struct - { - int id; - int h,v; - int tq; - int hd,ha; - int dc_pred; - - int x,y,w2,h2; - stbi_uc *data; - void *raw_data, *raw_coeff; - stbi_uc *linebuf; - short *coeff; // progressive only - int coeff_w, coeff_h; // number of 8x8 coefficient blocks - } img_comp[4]; - - stbi__uint32 code_buffer; // jpeg entropy-coded buffer - int code_bits; // number of valid bits - unsigned char marker; // marker seen while filling entropy buffer - int nomore; // flag if we saw a marker so must stop - - int progressive; - int spec_start; - int spec_end; - int succ_high; - int succ_low; - int eob_run; - int rgb; - - int scan_n, order[4]; - int restart_interval, todo; - -// kernels - void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); - void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); - stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); -} stbi__jpeg; - -static int stbi__build_huffman(stbi__huffman *h, int *count) -{ - int i,j,k=0,code; - // build size list for each symbol (from JPEG spec) - for (i=0; i < 16; ++i) - for (j=0; j < count[i]; ++j) - h->size[k++] = (stbi_uc) (i+1); - h->size[k] = 0; - - // compute actual symbols (from jpeg spec) - code = 0; - k = 0; - for(j=1; j <= 16; ++j) { - // compute delta to add to code to compute symbol id - h->delta[j] = k - code; - if (h->size[k] == j) { - while (h->size[k] == j) - h->code[k++] = (stbi__uint16) (code++); - if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG"); - } - // compute largest code + 1 for this size, preshifted as needed later - h->maxcode[j] = code << (16-j); - code <<= 1; - } - h->maxcode[j] = 0xffffffff; - - // build non-spec acceleration table; 255 is flag for not-accelerated - memset(h->fast, 255, 1 << FAST_BITS); - for (i=0; i < k; ++i) { - int s = h->size[i]; - if (s <= FAST_BITS) { - int c = h->code[i] << (FAST_BITS-s); - int m = 1 << (FAST_BITS-s); - for (j=0; j < m; ++j) { - h->fast[c+j] = (stbi_uc) i; - } - } - } - return 1; -} - -// build a table that decodes both magnitude and value of small ACs in -// one go. -static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) -{ - int i; - for (i=0; i < (1 << FAST_BITS); ++i) { - stbi_uc fast = h->fast[i]; - fast_ac[i] = 0; - if (fast < 255) { - int rs = h->values[fast]; - int run = (rs >> 4) & 15; - int magbits = rs & 15; - int len = h->size[fast]; - - if (magbits && len + magbits <= FAST_BITS) { - // magnitude code followed by receive_extend code - int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); - int m = 1 << (magbits - 1); - if (k < m) k += (-1 << magbits) + 1; - // if the result is small enough, we can fit it in fast_ac table - if (k >= -128 && k <= 127) - fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits)); - } - } - } -} - -static void stbi__grow_buffer_unsafe(stbi__jpeg *j) -{ - do { - int b = j->nomore ? 0 : stbi__get8(j->s); - if (b == 0xff) { - int c = stbi__get8(j->s); - if (c != 0) { - j->marker = (unsigned char) c; - j->nomore = 1; - return; - } - } - j->code_buffer |= b << (24 - j->code_bits); - j->code_bits += 8; - } while (j->code_bits <= 24); -} - -// (1 << n) - 1 -static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; - -// decode a jpeg huffman value from the bitstream -stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) -{ - unsigned int temp; - int c,k; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - // look at the top FAST_BITS and determine what symbol ID it is, - // if the code is <= FAST_BITS - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - k = h->fast[c]; - if (k < 255) { - int s = h->size[k]; - if (s > j->code_bits) - return -1; - j->code_buffer <<= s; - j->code_bits -= s; - return h->values[k]; - } - - // naive test is to shift the code_buffer down so k bits are - // valid, then test against maxcode. To speed this up, we've - // preshifted maxcode left so that it has (16-k) 0s at the - // end; in other words, regardless of the number of bits, it - // wants to be compared against something shifted to have 16; - // that way we don't need to shift inside the loop. - temp = j->code_buffer >> 16; - for (k=FAST_BITS+1 ; ; ++k) - if (temp < h->maxcode[k]) - break; - if (k == 17) { - // error! code not found - j->code_bits -= 16; - return -1; - } - - if (k > j->code_bits) - return -1; - - // convert the huffman code to the symbol id - c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; - STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); - - // convert the id to a symbol - j->code_bits -= k; - j->code_buffer <<= k; - return h->values[c]; -} - -// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); - - sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB - k = stbi_lrot(j->code_buffer, n); - STBI_ASSERT(n >= 0 && n < (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask))); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k + (stbi__jbias[n] & ~sgn); -} - -// get some unsigned bits -stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) -{ - unsigned int k; - if (j->code_bits < n) stbi__grow_buffer_unsafe(j); - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k; -} - -stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) -{ - unsigned int k; - if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); - k = j->code_buffer; - j->code_buffer <<= 1; - --j->code_bits; - return k & 0x80000000; -} - -// given a value that's at position X in the zigzag stream, -// where does it appear in the 8x8 matrix coded as row-major? -static stbi_uc stbi__jpeg_dezigzag[64+15] = -{ - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - // let corrupt input sample past end - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63 -}; - -// decode one 64-entry block-- -static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi_uc *dequant) -{ - int diff,dc,k; - int t; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - - // 0 all the ac values now so we can do it 32-bits at a time - memset(data,0,64*sizeof(data[0])); - - diff = t ? stbi__extend_receive(j, t) : 0; - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - data[0] = (short) (dc * dequant[0]); - - // decode AC components, see JPEG spec - k = 1; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - j->code_buffer <<= s; - j->code_bits -= s; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) * dequant[zig]); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (rs != 0xf0) break; // end block - k += 16; - } else { - k += r; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); - } - } - } while (k < 64); - return 1; -} - -static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) -{ - int diff,dc; - int t; - if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - if (j->succ_high == 0) { - // first scan for DC coefficient, must be first - memset(data,0,64*sizeof(data[0])); // 0 all the ac values now - t = stbi__jpeg_huff_decode(j, hdc); - diff = t ? stbi__extend_receive(j, t) : 0; - - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - data[0] = (short) (dc << j->succ_low); - } else { - // refinement scan for DC coefficient - if (stbi__jpeg_get_bit(j)) - data[0] += (short) (1 << j->succ_low); - } - return 1; -} - -// @OPTIMIZE: store non-zigzagged during the decode passes, -// and only de-zigzag when dequantizing -static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) -{ - int k; - if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->succ_high == 0) { - int shift = j->succ_low; - - if (j->eob_run) { - --j->eob_run; - return 1; - } - - k = j->spec_start; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - j->code_buffer <<= s; - j->code_bits -= s; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) << shift); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r); - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - --j->eob_run; - break; - } - k += 16; - } else { - k += r; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) << shift); - } - } - } while (k <= j->spec_end); - } else { - // refinement scan for these AC coefficients - - short bit = (short) (1 << j->succ_low); - - if (j->eob_run) { - --j->eob_run; - for (k = j->spec_start; k <= j->spec_end; ++k) { - short *p = &data[stbi__jpeg_dezigzag[k]]; - if (*p != 0) - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } - } else { - k = j->spec_start; - do { - int r,s; - int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r) - 1; - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - r = 64; // force end of block - } else { - // r=15 s=0 should write 16 0s, so we just do - // a run of 15 0s and then write s (which is 0), - // so we don't have to do anything special here - } - } else { - if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); - // sign bit - if (stbi__jpeg_get_bit(j)) - s = bit; - else - s = -bit; - } - - // advance by r - while (k <= j->spec_end) { - short *p = &data[stbi__jpeg_dezigzag[k++]]; - if (*p != 0) { - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } else { - if (r == 0) { - *p = (short) s; - break; - } - --r; - } - } - } while (k <= j->spec_end); - } - } - return 1; -} - -// take a -128..127 value and stbi__clamp it and convert to 0..255 -stbi_inline static stbi_uc stbi__clamp(int x) -{ - // trick to use a single test to catch both cases - if ((unsigned int) x > 255) { - if (x < 0) return 0; - if (x > 255) return 255; - } - return (stbi_uc) x; -} - -#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) -#define stbi__fsh(x) ((x) << 12) - -// derived from jidctint -- DCT_ISLOW -#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ - int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ - p2 = s2; \ - p3 = s6; \ - p1 = (p2+p3) * stbi__f2f(0.5411961f); \ - t2 = p1 + p3*stbi__f2f(-1.847759065f); \ - t3 = p1 + p2*stbi__f2f( 0.765366865f); \ - p2 = s0; \ - p3 = s4; \ - t0 = stbi__fsh(p2+p3); \ - t1 = stbi__fsh(p2-p3); \ - x0 = t0+t3; \ - x3 = t0-t3; \ - x1 = t1+t2; \ - x2 = t1-t2; \ - t0 = s7; \ - t1 = s5; \ - t2 = s3; \ - t3 = s1; \ - p3 = t0+t2; \ - p4 = t1+t3; \ - p1 = t0+t3; \ - p2 = t1+t2; \ - p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ - t0 = t0*stbi__f2f( 0.298631336f); \ - t1 = t1*stbi__f2f( 2.053119869f); \ - t2 = t2*stbi__f2f( 3.072711026f); \ - t3 = t3*stbi__f2f( 1.501321110f); \ - p1 = p5 + p1*stbi__f2f(-0.899976223f); \ - p2 = p5 + p2*stbi__f2f(-2.562915447f); \ - p3 = p3*stbi__f2f(-1.961570560f); \ - p4 = p4*stbi__f2f(-0.390180644f); \ - t3 += p1+p4; \ - t2 += p2+p3; \ - t1 += p2+p4; \ - t0 += p1+p3; - -static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) -{ - int i,val[64],*v=val; - stbi_uc *o; - short *d = data; - - // columns - for (i=0; i < 8; ++i,++d, ++v) { - // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing - if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 - && d[40]==0 && d[48]==0 && d[56]==0) { - // no shortcut 0 seconds - // (1|2|3|4|5|6|7)==0 0 seconds - // all separate -0.047 seconds - // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds - int dcterm = d[0] << 2; - v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; - } else { - STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) - // constants scaled things up by 1<<12; let's bring them back - // down, but keep 2 extra bits of precision - x0 += 512; x1 += 512; x2 += 512; x3 += 512; - v[ 0] = (x0+t3) >> 10; - v[56] = (x0-t3) >> 10; - v[ 8] = (x1+t2) >> 10; - v[48] = (x1-t2) >> 10; - v[16] = (x2+t1) >> 10; - v[40] = (x2-t1) >> 10; - v[24] = (x3+t0) >> 10; - v[32] = (x3-t0) >> 10; - } - } - - for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { - // no fast case since the first 1D IDCT spread components out - STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) - // constants scaled things up by 1<<12, plus we had 1<<2 from first - // loop, plus horizontal and vertical each scale by sqrt(8) so together - // we've got an extra 1<<3, so 1<<17 total we need to remove. - // so we want to round that, which means adding 0.5 * 1<<17, - // aka 65536. Also, we'll end up with -128 to 127 that we want - // to encode as 0..255 by adding 128, so we'll add that before the shift - x0 += 65536 + (128<<17); - x1 += 65536 + (128<<17); - x2 += 65536 + (128<<17); - x3 += 65536 + (128<<17); - // tried computing the shifts into temps, or'ing the temps to see - // if any were out of range, but that was slower - o[0] = stbi__clamp((x0+t3) >> 17); - o[7] = stbi__clamp((x0-t3) >> 17); - o[1] = stbi__clamp((x1+t2) >> 17); - o[6] = stbi__clamp((x1-t2) >> 17); - o[2] = stbi__clamp((x2+t1) >> 17); - o[5] = stbi__clamp((x2-t1) >> 17); - o[3] = stbi__clamp((x3+t0) >> 17); - o[4] = stbi__clamp((x3-t0) >> 17); - } -} - -#ifdef STBI_SSE2 -// sse2 integer IDCT. not the fastest possible implementation but it -// produces bit-identical results to the generic C version so it's -// fully "transparent". -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - // This is constructed to match our regular (generic) integer IDCT exactly. - __m128i row0, row1, row2, row3, row4, row5, row6, row7; - __m128i tmp; - - // dot product constant: even elems=x, odd elems=y - #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) - - // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) - // out(1) = c1[even]*x + c1[odd]*y - #define dct_rot(out0,out1, x,y,c0,c1) \ - __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ - __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ - __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ - __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ - __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ - __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) - - // out = in << 12 (in 16-bit, out 32-bit) - #define dct_widen(out, in) \ - __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ - __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) - - // wide add - #define dct_wadd(out, a, b) \ - __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_add_epi32(a##_h, b##_h) - - // wide sub - #define dct_wsub(out, a, b) \ - __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) - - // butterfly a/b, add bias, then shift by "s" and pack - #define dct_bfly32o(out0, out1, a,b,bias,s) \ - { \ - __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ - __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ - dct_wadd(sum, abiased, b); \ - dct_wsub(dif, abiased, b); \ - out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ - out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ - } - - // 8-bit interleave step (for transposes) - #define dct_interleave8(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi8(a, b); \ - b = _mm_unpackhi_epi8(tmp, b) - - // 16-bit interleave step (for transposes) - #define dct_interleave16(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi16(a, b); \ - b = _mm_unpackhi_epi16(tmp, b) - - #define dct_pass(bias,shift) \ - { \ - /* even part */ \ - dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ - __m128i sum04 = _mm_add_epi16(row0, row4); \ - __m128i dif04 = _mm_sub_epi16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ - dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ - __m128i sum17 = _mm_add_epi16(row1, row7); \ - __m128i sum35 = _mm_add_epi16(row3, row5); \ - dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ - dct_wadd(x4, y0o, y4o); \ - dct_wadd(x5, y1o, y5o); \ - dct_wadd(x6, y2o, y5o); \ - dct_wadd(x7, y3o, y4o); \ - dct_bfly32o(row0,row7, x0,x7,bias,shift); \ - dct_bfly32o(row1,row6, x1,x6,bias,shift); \ - dct_bfly32o(row2,row5, x2,x5,bias,shift); \ - dct_bfly32o(row3,row4, x3,x4,bias,shift); \ - } - - __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); - __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); - __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); - __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); - __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); - __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); - __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); - __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); - - // rounding biases in column/row passes, see stbi__idct_block for explanation. - __m128i bias_0 = _mm_set1_epi32(512); - __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); - - // load - row0 = _mm_load_si128((const __m128i *) (data + 0*8)); - row1 = _mm_load_si128((const __m128i *) (data + 1*8)); - row2 = _mm_load_si128((const __m128i *) (data + 2*8)); - row3 = _mm_load_si128((const __m128i *) (data + 3*8)); - row4 = _mm_load_si128((const __m128i *) (data + 4*8)); - row5 = _mm_load_si128((const __m128i *) (data + 5*8)); - row6 = _mm_load_si128((const __m128i *) (data + 6*8)); - row7 = _mm_load_si128((const __m128i *) (data + 7*8)); - - // column pass - dct_pass(bias_0, 10); - - { - // 16bit 8x8 transpose pass 1 - dct_interleave16(row0, row4); - dct_interleave16(row1, row5); - dct_interleave16(row2, row6); - dct_interleave16(row3, row7); - - // transpose pass 2 - dct_interleave16(row0, row2); - dct_interleave16(row1, row3); - dct_interleave16(row4, row6); - dct_interleave16(row5, row7); - - // transpose pass 3 - dct_interleave16(row0, row1); - dct_interleave16(row2, row3); - dct_interleave16(row4, row5); - dct_interleave16(row6, row7); - } - - // row pass - dct_pass(bias_1, 17); - - { - // pack - __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 - __m128i p1 = _mm_packus_epi16(row2, row3); - __m128i p2 = _mm_packus_epi16(row4, row5); - __m128i p3 = _mm_packus_epi16(row6, row7); - - // 8bit 8x8 transpose pass 1 - dct_interleave8(p0, p2); // a0e0a1e1... - dct_interleave8(p1, p3); // c0g0c1g1... - - // transpose pass 2 - dct_interleave8(p0, p1); // a0c0e0g0... - dct_interleave8(p2, p3); // b0d0f0h0... - - // transpose pass 3 - dct_interleave8(p0, p2); // a0b0c0d0... - dct_interleave8(p1, p3); // a4b4c4d4... - - // store - _mm_storel_epi64((__m128i *) out, p0); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p2); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p1); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p3); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); - } - -#undef dct_const -#undef dct_rot -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_interleave8 -#undef dct_interleave16 -#undef dct_pass -} - -#endif // STBI_SSE2 - -#ifdef STBI_NEON - -// NEON integer IDCT. should produce bit-identical -// results to the generic C version. -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; - - int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); - int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); - int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); - int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); - int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); - int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); - int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); - int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); - int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); - int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); - int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); - int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); - -#define dct_long_mul(out, inq, coeff) \ - int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) - -#define dct_long_mac(out, acc, inq, coeff) \ - int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) - -#define dct_widen(out, inq) \ - int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ - int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) - -// wide add -#define dct_wadd(out, a, b) \ - int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vaddq_s32(a##_h, b##_h) - -// wide sub -#define dct_wsub(out, a, b) \ - int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vsubq_s32(a##_h, b##_h) - -// butterfly a/b, then shift using "shiftop" by "s" and pack -#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ - { \ - dct_wadd(sum, a, b); \ - dct_wsub(dif, a, b); \ - out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ - out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ - } - -#define dct_pass(shiftop, shift) \ - { \ - /* even part */ \ - int16x8_t sum26 = vaddq_s16(row2, row6); \ - dct_long_mul(p1e, sum26, rot0_0); \ - dct_long_mac(t2e, p1e, row6, rot0_1); \ - dct_long_mac(t3e, p1e, row2, rot0_2); \ - int16x8_t sum04 = vaddq_s16(row0, row4); \ - int16x8_t dif04 = vsubq_s16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - int16x8_t sum15 = vaddq_s16(row1, row5); \ - int16x8_t sum17 = vaddq_s16(row1, row7); \ - int16x8_t sum35 = vaddq_s16(row3, row5); \ - int16x8_t sum37 = vaddq_s16(row3, row7); \ - int16x8_t sumodd = vaddq_s16(sum17, sum35); \ - dct_long_mul(p5o, sumodd, rot1_0); \ - dct_long_mac(p1o, p5o, sum17, rot1_1); \ - dct_long_mac(p2o, p5o, sum35, rot1_2); \ - dct_long_mul(p3o, sum37, rot2_0); \ - dct_long_mul(p4o, sum15, rot2_1); \ - dct_wadd(sump13o, p1o, p3o); \ - dct_wadd(sump24o, p2o, p4o); \ - dct_wadd(sump23o, p2o, p3o); \ - dct_wadd(sump14o, p1o, p4o); \ - dct_long_mac(x4, sump13o, row7, rot3_0); \ - dct_long_mac(x5, sump24o, row5, rot3_1); \ - dct_long_mac(x6, sump23o, row3, rot3_2); \ - dct_long_mac(x7, sump14o, row1, rot3_3); \ - dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ - dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ - dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ - dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ - } - - // load - row0 = vld1q_s16(data + 0*8); - row1 = vld1q_s16(data + 1*8); - row2 = vld1q_s16(data + 2*8); - row3 = vld1q_s16(data + 3*8); - row4 = vld1q_s16(data + 4*8); - row5 = vld1q_s16(data + 5*8); - row6 = vld1q_s16(data + 6*8); - row7 = vld1q_s16(data + 7*8); - - // add DC bias - row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); - - // column pass - dct_pass(vrshrn_n_s32, 10); - - // 16bit 8x8 transpose - { -// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. -// whether compilers actually get this is another story, sadly. -#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } -#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } - - // pass 1 - dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 - dct_trn16(row2, row3); - dct_trn16(row4, row5); - dct_trn16(row6, row7); - - // pass 2 - dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 - dct_trn32(row1, row3); - dct_trn32(row4, row6); - dct_trn32(row5, row7); - - // pass 3 - dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 - dct_trn64(row1, row5); - dct_trn64(row2, row6); - dct_trn64(row3, row7); - -#undef dct_trn16 -#undef dct_trn32 -#undef dct_trn64 - } - - // row pass - // vrshrn_n_s32 only supports shifts up to 16, we need - // 17. so do a non-rounding shift of 16 first then follow - // up with a rounding shift by 1. - dct_pass(vshrn_n_s32, 16); - - { - // pack and round - uint8x8_t p0 = vqrshrun_n_s16(row0, 1); - uint8x8_t p1 = vqrshrun_n_s16(row1, 1); - uint8x8_t p2 = vqrshrun_n_s16(row2, 1); - uint8x8_t p3 = vqrshrun_n_s16(row3, 1); - uint8x8_t p4 = vqrshrun_n_s16(row4, 1); - uint8x8_t p5 = vqrshrun_n_s16(row5, 1); - uint8x8_t p6 = vqrshrun_n_s16(row6, 1); - uint8x8_t p7 = vqrshrun_n_s16(row7, 1); - - // again, these can translate into one instruction, but often don't. -#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } -#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } - - // sadly can't use interleaved stores here since we only write - // 8 bytes to each scan line! - - // 8x8 8-bit transpose pass 1 - dct_trn8_8(p0, p1); - dct_trn8_8(p2, p3); - dct_trn8_8(p4, p5); - dct_trn8_8(p6, p7); - - // pass 2 - dct_trn8_16(p0, p2); - dct_trn8_16(p1, p3); - dct_trn8_16(p4, p6); - dct_trn8_16(p5, p7); - - // pass 3 - dct_trn8_32(p0, p4); - dct_trn8_32(p1, p5); - dct_trn8_32(p2, p6); - dct_trn8_32(p3, p7); - - // store - vst1_u8(out, p0); out += out_stride; - vst1_u8(out, p1); out += out_stride; - vst1_u8(out, p2); out += out_stride; - vst1_u8(out, p3); out += out_stride; - vst1_u8(out, p4); out += out_stride; - vst1_u8(out, p5); out += out_stride; - vst1_u8(out, p6); out += out_stride; - vst1_u8(out, p7); - -#undef dct_trn8_8 -#undef dct_trn8_16 -#undef dct_trn8_32 - } - -#undef dct_long_mul -#undef dct_long_mac -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_pass -} - -#endif // STBI_NEON - -#define STBI__MARKER_none 0xff -// if there's a pending marker from the entropy stream, return that -// otherwise, fetch from the stream and get a marker. if there's no -// marker, return 0xff, which is never a valid marker value -static stbi_uc stbi__get_marker(stbi__jpeg *j) -{ - stbi_uc x; - if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } - x = stbi__get8(j->s); - if (x != 0xff) return STBI__MARKER_none; - while (x == 0xff) - x = stbi__get8(j->s); - return x; -} - -// in each scan, we'll have scan_n components, and the order -// of the components is specified by order[] -#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) - -// after a restart interval, stbi__jpeg_reset the entropy decoder and -// the dc prediction -static void stbi__jpeg_reset(stbi__jpeg *j) -{ - j->code_bits = 0; - j->code_buffer = 0; - j->nomore = 0; - j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; - j->marker = STBI__MARKER_none; - j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; - j->eob_run = 0; - // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, - // since we don't even allow 1<<30 pixels -} - -static int stbi__parse_entropy_coded_data(stbi__jpeg *z) -{ - stbi__jpeg_reset(z); - if (!z->progressive) { - if (z->scan_n == 1) { - int i,j; - STBI_SIMD_ALIGN(short, data[64]); - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - STBI_SIMD_ALIGN(short, data[64]); - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x)*8; - int y2 = (j*z->img_comp[n].v + y)*8; - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } else { - if (z->scan_n == 1) { - int i,j; - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - if (z->spec_start == 0) { - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } else { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) - return 0; - } - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x); - int y2 = (j*z->img_comp[n].v + y); - short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } -} - -static void stbi__jpeg_dequantize(short *data, stbi_uc *dequant) -{ - int i; - for (i=0; i < 64; ++i) - data[i] *= dequant[i]; -} - -static void stbi__jpeg_finish(stbi__jpeg *z) -{ - if (z->progressive) { - // dequantize and idct the data - int i,j,n; - for (n=0; n < z->s->img_n; ++n) { - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - } - } - } - } -} - -static int stbi__process_marker(stbi__jpeg *z, int m) -{ - int L; - switch (m) { - case STBI__MARKER_none: // no marker found - return stbi__err("expected marker","Corrupt JPEG"); - - case 0xDD: // DRI - specify restart interval - if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); - z->restart_interval = stbi__get16be(z->s); - return 1; - - case 0xDB: // DQT - define quantization table - L = stbi__get16be(z->s)-2; - while (L > 0) { - int q = stbi__get8(z->s); - int p = q >> 4; - int t = q & 15,i; - if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG"); - if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); - for (i=0; i < 64; ++i) - z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s); - L -= 65; - } - return L==0; - - case 0xC4: // DHT - define huffman table - L = stbi__get16be(z->s)-2; - while (L > 0) { - stbi_uc *v; - int sizes[16],i,n=0; - int q = stbi__get8(z->s); - int tc = q >> 4; - int th = q & 15; - if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); - for (i=0; i < 16; ++i) { - sizes[i] = stbi__get8(z->s); - n += sizes[i]; - } - L -= 17; - if (tc == 0) { - if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; - v = z->huff_dc[th].values; - } else { - if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; - v = z->huff_ac[th].values; - } - for (i=0; i < n; ++i) - v[i] = stbi__get8(z->s); - if (tc != 0) - stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); - L -= n; - } - return L==0; - } - // check for comment block or APP blocks - if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { - stbi__skip(z->s, stbi__get16be(z->s)-2); - return 1; - } - return 0; -} - -// after we see SOS -static int stbi__process_scan_header(stbi__jpeg *z) -{ - int i; - int Ls = stbi__get16be(z->s); - z->scan_n = stbi__get8(z->s); - if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); - if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); - for (i=0; i < z->scan_n; ++i) { - int id = stbi__get8(z->s), which; - int q = stbi__get8(z->s); - for (which = 0; which < z->s->img_n; ++which) - if (z->img_comp[which].id == id) - break; - if (which == z->s->img_n) return 0; // no match - z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); - z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); - z->order[i] = which; - } - - { - int aa; - z->spec_start = stbi__get8(z->s); - z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 - aa = stbi__get8(z->s); - z->succ_high = (aa >> 4); - z->succ_low = (aa & 15); - if (z->progressive) { - if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) - return stbi__err("bad SOS", "Corrupt JPEG"); - } else { - if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); - if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); - z->spec_end = 63; - } - } - - return 1; -} - -static int stbi__process_frame_header(stbi__jpeg *z, int scan) -{ - stbi__context *s = z->s; - int Lf,p,i,q, h_max=1,v_max=1,c; - Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG - p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline - s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG - s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires - c = stbi__get8(s); - if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG"); // JFIF requires - s->img_n = c; - for (i=0; i < c; ++i) { - z->img_comp[i].data = NULL; - z->img_comp[i].linebuf = NULL; - } - - if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); - - z->rgb = 0; - for (i=0; i < s->img_n; ++i) { - static unsigned char rgb[3] = { 'R', 'G', 'B' }; - z->img_comp[i].id = stbi__get8(s); - if (z->img_comp[i].id != i+1) // JFIF requires - if (z->img_comp[i].id != i) { // some version of jpegtran outputs non-JFIF-compliant files! - // somethings output this (see http://fileformats.archiveteam.org/wiki/JPEG#Color_format) - if (z->img_comp[i].id != rgb[i]) - return stbi__err("bad component ID","Corrupt JPEG"); - ++z->rgb; - } - q = stbi__get8(s); - z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); - z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); - z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); - } - - if (scan != STBI__SCAN_load) return 1; - - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); - - for (i=0; i < s->img_n; ++i) { - if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; - if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; - } - - // compute interleaved mcu info - z->img_h_max = h_max; - z->img_v_max = v_max; - z->img_mcu_w = h_max * 8; - z->img_mcu_h = v_max * 8; - z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; - z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; - - for (i=0; i < s->img_n; ++i) { - // number of effective pixels (e.g. for non-interleaved MCU) - z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; - z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; - // to simplify generation, we'll allocate enough memory to decode - // the bogus oversized data from using interleaved MCUs and their - // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't - // discard the extra data until colorspace conversion - z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; - z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; - z->img_comp[i].raw_data = stbi__malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); - - if (z->img_comp[i].raw_data == NULL) { - for(--i; i >= 0; --i) { - STBI_FREE(z->img_comp[i].raw_data); - z->img_comp[i].raw_data = NULL; - } - return stbi__err("outofmem", "Out of memory"); - } - // align blocks for idct using mmx/sse - z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); - z->img_comp[i].linebuf = NULL; - if (z->progressive) { - z->img_comp[i].coeff_w = (z->img_comp[i].w2 + 7) >> 3; - z->img_comp[i].coeff_h = (z->img_comp[i].h2 + 7) >> 3; - z->img_comp[i].raw_coeff = STBI_MALLOC(z->img_comp[i].coeff_w * z->img_comp[i].coeff_h * 64 * sizeof(short) + 15); - z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); - } else { - z->img_comp[i].coeff = 0; - z->img_comp[i].raw_coeff = 0; - } - } - - return 1; -} - -// use comparisons since in some cases we handle more than one case (e.g. SOF) -#define stbi__DNL(x) ((x) == 0xdc) -#define stbi__SOI(x) ((x) == 0xd8) -#define stbi__EOI(x) ((x) == 0xd9) -#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) -#define stbi__SOS(x) ((x) == 0xda) - -#define stbi__SOF_progressive(x) ((x) == 0xc2) - -static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) -{ - int m; - z->marker = STBI__MARKER_none; // initialize cached marker to empty - m = stbi__get_marker(z); - if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); - if (scan == STBI__SCAN_type) return 1; - m = stbi__get_marker(z); - while (!stbi__SOF(m)) { - if (!stbi__process_marker(z,m)) return 0; - m = stbi__get_marker(z); - while (m == STBI__MARKER_none) { - // some files have extra padding after their blocks, so ok, we'll scan - if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); - m = stbi__get_marker(z); - } - } - z->progressive = stbi__SOF_progressive(m); - if (!stbi__process_frame_header(z, scan)) return 0; - return 1; -} - -// decode image to YCbCr format -static int stbi__decode_jpeg_image(stbi__jpeg *j) -{ - int m; - for (m = 0; m < 4; m++) { - j->img_comp[m].raw_data = NULL; - j->img_comp[m].raw_coeff = NULL; - } - j->restart_interval = 0; - if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; - m = stbi__get_marker(j); - while (!stbi__EOI(m)) { - if (stbi__SOS(m)) { - if (!stbi__process_scan_header(j)) return 0; - if (!stbi__parse_entropy_coded_data(j)) return 0; - if (j->marker == STBI__MARKER_none ) { - // handle 0s at the end of image data from IP Kamera 9060 - while (!stbi__at_eof(j->s)) { - int x = stbi__get8(j->s); - if (x == 255) { - j->marker = stbi__get8(j->s); - break; - } else if (x != 0) { - return stbi__err("junk before marker", "Corrupt JPEG"); - } - } - // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 - } - } else { - if (!stbi__process_marker(j, m)) return 0; - } - m = stbi__get_marker(j); - } - if (j->progressive) - stbi__jpeg_finish(j); - return 1; -} - -// static jfif-centered resampling (across block boundaries) - -typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, - int w, int hs); - -#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) - -static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - STBI_NOTUSED(out); - STBI_NOTUSED(in_far); - STBI_NOTUSED(w); - STBI_NOTUSED(hs); - return in_near; -} - -static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples vertically for every one in input - int i; - STBI_NOTUSED(hs); - for (i=0; i < w; ++i) - out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); - return out; -} - -static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples horizontally for every one in input - int i; - stbi_uc *input = in_near; - - if (w == 1) { - // if only one sample, can't do any interpolation - out[0] = out[1] = input[0]; - return out; - } - - out[0] = input[0]; - out[1] = stbi__div4(input[0]*3 + input[1] + 2); - for (i=1; i < w-1; ++i) { - int n = 3*input[i]+2; - out[i*2+0] = stbi__div4(n+input[i-1]); - out[i*2+1] = stbi__div4(n+input[i+1]); - } - out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); - out[i*2+1] = input[w-1]; - - STBI_NOTUSED(in_far); - STBI_NOTUSED(hs); - - return out; -} - -#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) - -static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i,t0,t1; - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - out[0] = stbi__div4(t1+2); - for (i=1; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i=0,t0,t1; - - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - // process groups of 8 pixels for as long as we can. - // note we can't handle the last pixel in a row in this loop - // because we need to handle the filter boundary conditions. - for (; i < ((w-1) & ~7); i += 8) { -#if defined(STBI_SSE2) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - __m128i zero = _mm_setzero_si128(); - __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); - __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); - __m128i farw = _mm_unpacklo_epi8(farb, zero); - __m128i nearw = _mm_unpacklo_epi8(nearb, zero); - __m128i diff = _mm_sub_epi16(farw, nearw); - __m128i nears = _mm_slli_epi16(nearw, 2); - __m128i curr = _mm_add_epi16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - __m128i prv0 = _mm_slli_si128(curr, 2); - __m128i nxt0 = _mm_srli_si128(curr, 2); - __m128i prev = _mm_insert_epi16(prv0, t1, 0); - __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - __m128i bias = _mm_set1_epi16(8); - __m128i curs = _mm_slli_epi16(curr, 2); - __m128i prvd = _mm_sub_epi16(prev, curr); - __m128i nxtd = _mm_sub_epi16(next, curr); - __m128i curb = _mm_add_epi16(curs, bias); - __m128i even = _mm_add_epi16(prvd, curb); - __m128i odd = _mm_add_epi16(nxtd, curb); - - // interleave even and odd pixels, then undo scaling. - __m128i int0 = _mm_unpacklo_epi16(even, odd); - __m128i int1 = _mm_unpackhi_epi16(even, odd); - __m128i de0 = _mm_srli_epi16(int0, 4); - __m128i de1 = _mm_srli_epi16(int1, 4); - - // pack and write output - __m128i outv = _mm_packus_epi16(de0, de1); - _mm_storeu_si128((__m128i *) (out + i*2), outv); -#elif defined(STBI_NEON) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - uint8x8_t farb = vld1_u8(in_far + i); - uint8x8_t nearb = vld1_u8(in_near + i); - int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); - int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); - int16x8_t curr = vaddq_s16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - int16x8_t prv0 = vextq_s16(curr, curr, 7); - int16x8_t nxt0 = vextq_s16(curr, curr, 1); - int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); - int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - int16x8_t curs = vshlq_n_s16(curr, 2); - int16x8_t prvd = vsubq_s16(prev, curr); - int16x8_t nxtd = vsubq_s16(next, curr); - int16x8_t even = vaddq_s16(curs, prvd); - int16x8_t odd = vaddq_s16(curs, nxtd); - - // undo scaling and round, then store with even/odd phases interleaved - uint8x8x2_t o; - o.val[0] = vqrshrun_n_s16(even, 4); - o.val[1] = vqrshrun_n_s16(odd, 4); - vst2_u8(out + i*2, o); -#endif - - // "previous" value for next iter - t1 = 3*in_near[i+7] + in_far[i+7]; - } - - t0 = t1; - t1 = 3*in_near[i] + in_far[i]; - out[i*2] = stbi__div16(3*t1 + t0 + 8); - - for (++i; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} -#endif - -static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // resample with nearest-neighbor - int i,j; - STBI_NOTUSED(in_far); - for (i=0; i < w; ++i) - for (j=0; j < hs; ++j) - out[i*hs+j] = in_near[i]; - return out; -} - -#ifdef STBI_JPEG_OLD -// this is the same YCbCr-to-RGB calculation that stb_image has used -// historically before the algorithm changes in 1.49 -#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) -static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) -{ - int i; - for (i=0; i < count; ++i) { - int y_fixed = (y[i] << 16) + 32768; // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr*float2fixed(1.40200f); - g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); - b = y_fixed + cb*float2fixed(1.77200f); - r >>= 16; - g >>= 16; - b >>= 16; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} -#else -// this is a reduced-precision calculation of YCbCr-to-RGB introduced -// to make sure the code produces the same results in both SIMD and scalar -#define float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) -static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) -{ - int i; - for (i=0; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* float2fixed(1.40200f); - g = y_fixed + (cr*-float2fixed(0.71414f)) + ((cb*-float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} -#endif - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) -{ - int i = 0; - -#ifdef STBI_SSE2 - // step == 3 is pretty ugly on the final interleave, and i'm not convinced - // it's useful in practice (you wouldn't use it for textures, for example). - // so just accelerate step == 4 case. - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - __m128i signflip = _mm_set1_epi8(-0x80); - __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); - __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); - __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); - __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); - __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); - __m128i xw = _mm_set1_epi16(255); // alpha channel - - for (; i+7 < count; i += 8) { - // load - __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); - __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); - __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); - __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 - __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 - - // unpack to short (and left-shift cr, cb by 8) - __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); - __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); - __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); - - // color transform - __m128i yws = _mm_srli_epi16(yw, 4); - __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); - __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); - __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); - __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); - __m128i rws = _mm_add_epi16(cr0, yws); - __m128i gwt = _mm_add_epi16(cb0, yws); - __m128i bws = _mm_add_epi16(yws, cb1); - __m128i gws = _mm_add_epi16(gwt, cr1); - - // descale - __m128i rw = _mm_srai_epi16(rws, 4); - __m128i bw = _mm_srai_epi16(bws, 4); - __m128i gw = _mm_srai_epi16(gws, 4); - - // back to byte, set up for transpose - __m128i brb = _mm_packus_epi16(rw, bw); - __m128i gxb = _mm_packus_epi16(gw, xw); - - // transpose to interleave channels - __m128i t0 = _mm_unpacklo_epi8(brb, gxb); - __m128i t1 = _mm_unpackhi_epi8(brb, gxb); - __m128i o0 = _mm_unpacklo_epi16(t0, t1); - __m128i o1 = _mm_unpackhi_epi16(t0, t1); - - // store - _mm_storeu_si128((__m128i *) (out + 0), o0); - _mm_storeu_si128((__m128i *) (out + 16), o1); - out += 32; - } - } -#endif - -#ifdef STBI_NEON - // in this version, step=3 support would be easy to add. but is there demand? - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - uint8x8_t signflip = vdup_n_u8(0x80); - int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); - int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); - int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); - int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); - - for (; i+7 < count; i += 8) { - // load - uint8x8_t y_bytes = vld1_u8(y + i); - uint8x8_t cr_bytes = vld1_u8(pcr + i); - uint8x8_t cb_bytes = vld1_u8(pcb + i); - int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); - int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); - - // expand to s16 - int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); - int16x8_t crw = vshll_n_s8(cr_biased, 7); - int16x8_t cbw = vshll_n_s8(cb_biased, 7); - - // color transform - int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); - int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); - int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); - int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); - int16x8_t rws = vaddq_s16(yws, cr0); - int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); - int16x8_t bws = vaddq_s16(yws, cb1); - - // undo scaling, round, convert to byte - uint8x8x4_t o; - o.val[0] = vqrshrun_n_s16(rws, 4); - o.val[1] = vqrshrun_n_s16(gws, 4); - o.val[2] = vqrshrun_n_s16(bws, 4); - o.val[3] = vdup_n_u8(255); - - // store, interleaving r/g/b/a - vst4_u8(out, o); - out += 8*4; - } - } -#endif - - for (; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* float2fixed(1.40200f); - g = y_fixed + cr*-float2fixed(0.71414f) + ((cb*-float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} -#endif - -// set up the kernels -static void stbi__setup_jpeg(stbi__jpeg *j) -{ - j->idct_block_kernel = stbi__idct_block; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; - -#ifdef STBI_SSE2 - if (stbi__sse2_available()) { - j->idct_block_kernel = stbi__idct_simd; - #ifndef STBI_JPEG_OLD - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - #endif - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; - } -#endif - -#ifdef STBI_NEON - j->idct_block_kernel = stbi__idct_simd; - #ifndef STBI_JPEG_OLD - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - #endif - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; -#endif -} - -// clean up the temporary component buffers -static void stbi__cleanup_jpeg(stbi__jpeg *j) -{ - int i; - for (i=0; i < j->s->img_n; ++i) { - if (j->img_comp[i].raw_data) { - STBI_FREE(j->img_comp[i].raw_data); - j->img_comp[i].raw_data = NULL; - j->img_comp[i].data = NULL; - } - if (j->img_comp[i].raw_coeff) { - STBI_FREE(j->img_comp[i].raw_coeff); - j->img_comp[i].raw_coeff = 0; - j->img_comp[i].coeff = 0; - } - if (j->img_comp[i].linebuf) { - STBI_FREE(j->img_comp[i].linebuf); - j->img_comp[i].linebuf = NULL; - } - } -} - -typedef struct -{ - resample_row_func resample; - stbi_uc *line0,*line1; - int hs,vs; // expansion factor in each axis - int w_lores; // horizontal pixels pre-expansion - int ystep; // how far through vertical expansion we are - int ypos; // which pre-expansion row we're on -} stbi__resample; - -static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) -{ - int n, decode_n; - z->s->img_n = 0; // make stbi__cleanup_jpeg safe - - // validate req_comp - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - - // load a jpeg image from whichever source, but leave in YCbCr format - if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } - - // determine actual number of components to generate - n = req_comp ? req_comp : z->s->img_n; - - if (z->s->img_n == 3 && n < 3) - decode_n = 1; - else - decode_n = z->s->img_n; - - // resample and color-convert - { - int k; - unsigned int i,j; - stbi_uc *output; - stbi_uc *coutput[4]; - - stbi__resample res_comp[4]; - - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - - // allocate line buffer big enough for upsampling off the edges - // with upsample factor of 4 - z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); - if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - r->hs = z->img_h_max / z->img_comp[k].h; - r->vs = z->img_v_max / z->img_comp[k].v; - r->ystep = r->vs >> 1; - r->w_lores = (z->s->img_x + r->hs-1) / r->hs; - r->ypos = 0; - r->line0 = r->line1 = z->img_comp[k].data; - - if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; - else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; - else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; - else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; - else r->resample = stbi__resample_row_generic; - } - - // can't error after this so, this is safe - output = (stbi_uc *) stbi__malloc(n * z->s->img_x * z->s->img_y + 1); - if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - // now go ahead and resample - for (j=0; j < z->s->img_y; ++j) { - stbi_uc *out = output + n * z->s->img_x * j; - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - int y_bot = r->ystep >= (r->vs >> 1); - coutput[k] = r->resample(z->img_comp[k].linebuf, - y_bot ? r->line1 : r->line0, - y_bot ? r->line0 : r->line1, - r->w_lores, r->hs); - if (++r->ystep >= r->vs) { - r->ystep = 0; - r->line0 = r->line1; - if (++r->ypos < z->img_comp[k].y) - r->line1 += z->img_comp[k].w2; - } - } - if (n >= 3) { - stbi_uc *y = coutput[0]; - if (z->s->img_n == 3) { - if (z->rgb == 3) { - for (i=0; i < z->s->img_x; ++i) { - out[0] = y[i]; - out[1] = coutput[1][i]; - out[2] = coutput[2][i]; - out[3] = 255; - out += n; - } - } else { - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } else - for (i=0; i < z->s->img_x; ++i) { - out[0] = out[1] = out[2] = y[i]; - out[3] = 255; // not used if n==3 - out += n; - } - } else { - stbi_uc *y = coutput[0]; - if (n == 1) - for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; - else - for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255; - } - } - stbi__cleanup_jpeg(z); - *out_x = z->s->img_x; - *out_y = z->s->img_y; - if (comp) *comp = z->s->img_n; // report original components, not output - return output; - } -} - -static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char* result; - stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); - j->s = s; - stbi__setup_jpeg(j); - result = load_jpeg_image(j, x,y,comp,req_comp); - STBI_FREE(j); - return result; -} - -static int stbi__jpeg_test(stbi__context *s) -{ - int r; - stbi__jpeg j; - j.s = s; - stbi__setup_jpeg(&j); - r = stbi__decode_jpeg_header(&j, STBI__SCAN_type); - stbi__rewind(s); - return r; -} - -static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) -{ - if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { - stbi__rewind( j->s ); - return 0; - } - if (x) *x = j->s->img_x; - if (y) *y = j->s->img_y; - if (comp) *comp = j->s->img_n; - return 1; -} - -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) -{ - int result; - stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); - j->s = s; - result = stbi__jpeg_info_raw(j, x, y, comp); - STBI_FREE(j); - return result; -} -#endif - -// public domain zlib decode v0.2 Sean Barrett 2006-11-18 -// simple implementation -// - all input must be provided in an upfront buffer -// - all output is written to a single output buffer (can malloc/realloc) -// performance -// - fast huffman - -#ifndef STBI_NO_ZLIB - -// fast-way is faster to check than jpeg huffman, but slow way is slower -#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables -#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) - -// zlib-style huffman encoding -// (jpegs packs from left, zlib from right, so can't share code) -typedef struct -{ - stbi__uint16 fast[1 << STBI__ZFAST_BITS]; - stbi__uint16 firstcode[16]; - int maxcode[17]; - stbi__uint16 firstsymbol[16]; - stbi_uc size[288]; - stbi__uint16 value[288]; -} stbi__zhuffman; - -stbi_inline static int stbi__bitreverse16(int n) -{ - n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); - n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); - n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); - n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); - return n; -} - -stbi_inline static int stbi__bit_reverse(int v, int bits) -{ - STBI_ASSERT(bits <= 16); - // to bit reverse n bits, reverse 16 and shift - // e.g. 11 bits, bit reverse and shift away 5 - return stbi__bitreverse16(v) >> (16-bits); -} - -static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num) -{ - int i,k=0; - int code, next_code[16], sizes[17]; - - // DEFLATE spec for generating codes - memset(sizes, 0, sizeof(sizes)); - memset(z->fast, 0, sizeof(z->fast)); - for (i=0; i < num; ++i) - ++sizes[sizelist[i]]; - sizes[0] = 0; - for (i=1; i < 16; ++i) - if (sizes[i] > (1 << i)) - return stbi__err("bad sizes", "Corrupt PNG"); - code = 0; - for (i=1; i < 16; ++i) { - next_code[i] = code; - z->firstcode[i] = (stbi__uint16) code; - z->firstsymbol[i] = (stbi__uint16) k; - code = (code + sizes[i]); - if (sizes[i]) - if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); - z->maxcode[i] = code << (16-i); // preshift for inner loop - code <<= 1; - k += sizes[i]; - } - z->maxcode[16] = 0x10000; // sentinel - for (i=0; i < num; ++i) { - int s = sizelist[i]; - if (s) { - int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; - stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); - z->size [c] = (stbi_uc ) s; - z->value[c] = (stbi__uint16) i; - if (s <= STBI__ZFAST_BITS) { - int j = stbi__bit_reverse(next_code[s],s); - while (j < (1 << STBI__ZFAST_BITS)) { - z->fast[j] = fastv; - j += (1 << s); - } - } - ++next_code[s]; - } - } - return 1; -} - -// zlib-from-memory implementation for PNG reading -// because PNG allows splitting the zlib stream arbitrarily, -// and it's annoying structurally to have PNG call ZLIB call PNG, -// we require PNG read all the IDATs and combine them into a single -// memory buffer - -typedef struct -{ - stbi_uc *zbuffer, *zbuffer_end; - int num_bits; - stbi__uint32 code_buffer; - - char *zout; - char *zout_start; - char *zout_end; - int z_expandable; - - stbi__zhuffman z_length, z_distance; -} stbi__zbuf; - -stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) -{ - if (z->zbuffer >= z->zbuffer_end) return 0; - return *z->zbuffer++; -} - -static void stbi__fill_bits(stbi__zbuf *z) -{ - do { - STBI_ASSERT(z->code_buffer < (1U << z->num_bits)); - z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; - z->num_bits += 8; - } while (z->num_bits <= 24); -} - -stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) -{ - unsigned int k; - if (z->num_bits < n) stbi__fill_bits(z); - k = z->code_buffer & ((1 << n) - 1); - z->code_buffer >>= n; - z->num_bits -= n; - return k; -} - -static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s,k; - // not resolved by fast table, so compute it the slow way - // use jpeg approach, which requires MSbits at top - k = stbi__bit_reverse(a->code_buffer, 16); - for (s=STBI__ZFAST_BITS+1; ; ++s) - if (k < z->maxcode[s]) - break; - if (s == 16) return -1; // invalid code! - // code size is s, so: - b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; - STBI_ASSERT(z->size[b] == s); - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; -} - -stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s; - if (a->num_bits < 16) stbi__fill_bits(a); - b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; - if (b) { - s = b >> 9; - a->code_buffer >>= s; - a->num_bits -= s; - return b & 511; - } - return stbi__zhuffman_decode_slowpath(a, z); -} - -static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes -{ - char *q; - int cur, limit, old_limit; - z->zout = zout; - if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); - cur = (int) (z->zout - z->zout_start); - limit = old_limit = (int) (z->zout_end - z->zout_start); - while (cur + n > limit) - limit *= 2; - q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); - STBI_NOTUSED(old_limit); - if (q == NULL) return stbi__err("outofmem", "Out of memory"); - z->zout_start = q; - z->zout = q + cur; - z->zout_end = q + limit; - return 1; -} - -static int stbi__zlength_base[31] = { - 3,4,5,6,7,8,9,10,11,13, - 15,17,19,23,27,31,35,43,51,59, - 67,83,99,115,131,163,195,227,258,0,0 }; - -static int stbi__zlength_extra[31]= -{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; - -static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, -257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; - -static int stbi__zdist_extra[32] = -{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -static int stbi__parse_huffman_block(stbi__zbuf *a) -{ - char *zout = a->zout; - for(;;) { - int z = stbi__zhuffman_decode(a, &a->z_length); - if (z < 256) { - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes - if (zout >= a->zout_end) { - if (!stbi__zexpand(a, zout, 1)) return 0; - zout = a->zout; - } - *zout++ = (char) z; - } else { - stbi_uc *p; - int len,dist; - if (z == 256) { - a->zout = zout; - return 1; - } - z -= 257; - len = stbi__zlength_base[z]; - if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); - z = stbi__zhuffman_decode(a, &a->z_distance); - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); - dist = stbi__zdist_base[z]; - if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); - if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); - if (zout + len > a->zout_end) { - if (!stbi__zexpand(a, zout, len)) return 0; - zout = a->zout; - } - p = (stbi_uc *) (zout - dist); - if (dist == 1) { // run of one byte; common in images. - stbi_uc v = *p; - if (len) { do *zout++ = v; while (--len); } - } else { - if (len) { do *zout++ = *p++; while (--len); } - } - } - } -} - -static int stbi__compute_huffman_codes(stbi__zbuf *a) -{ - static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - stbi__zhuffman z_codelength; - stbi_uc lencodes[286+32+137];//padding for maximum single op - stbi_uc codelength_sizes[19]; - int i,n; - - int hlit = stbi__zreceive(a,5) + 257; - int hdist = stbi__zreceive(a,5) + 1; - int hclen = stbi__zreceive(a,4) + 4; - - memset(codelength_sizes, 0, sizeof(codelength_sizes)); - for (i=0; i < hclen; ++i) { - int s = stbi__zreceive(a,3); - codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; - } - if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; - - n = 0; - while (n < hlit + hdist) { - int c = stbi__zhuffman_decode(a, &z_codelength); - if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); - if (c < 16) - lencodes[n++] = (stbi_uc) c; - else if (c == 16) { - c = stbi__zreceive(a,2)+3; - memset(lencodes+n, lencodes[n-1], c); - n += c; - } else if (c == 17) { - c = stbi__zreceive(a,3)+3; - memset(lencodes+n, 0, c); - n += c; - } else { - STBI_ASSERT(c == 18); - c = stbi__zreceive(a,7)+11; - memset(lencodes+n, 0, c); - n += c; - } - } - if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG"); - if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; - return 1; -} - -static int stbi__parse_uncompressed_block(stbi__zbuf *a) -{ - stbi_uc header[4]; - int len,nlen,k; - if (a->num_bits & 7) - stbi__zreceive(a, a->num_bits & 7); // discard - // drain the bit-packed data into header - k = 0; - while (a->num_bits > 0) { - header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check - a->code_buffer >>= 8; - a->num_bits -= 8; - } - STBI_ASSERT(a->num_bits == 0); - // now fill header the normal way - while (k < 4) - header[k++] = stbi__zget8(a); - len = header[1] * 256 + header[0]; - nlen = header[3] * 256 + header[2]; - if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); - if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); - if (a->zout + len > a->zout_end) - if (!stbi__zexpand(a, a->zout, len)) return 0; - memcpy(a->zout, a->zbuffer, len); - a->zbuffer += len; - a->zout += len; - return 1; -} - -static int stbi__parse_zlib_header(stbi__zbuf *a) -{ - int cmf = stbi__zget8(a); - int cm = cmf & 15; - /* int cinfo = cmf >> 4; */ - int flg = stbi__zget8(a); - if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec - if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png - if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png - // window = 1 << (8 + cinfo)... but who cares, we fully buffer output - return 1; -} - -// @TODO: should statically initialize these for optimal thread safety -static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32]; -static void stbi__init_zdefaults(void) -{ - int i; // use <= to match clearly with spec - for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; - for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; - for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; - for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; - - for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; -} - -static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) -{ - int final, type; - if (parse_header) - if (!stbi__parse_zlib_header(a)) return 0; - a->num_bits = 0; - a->code_buffer = 0; - do { - final = stbi__zreceive(a,1); - type = stbi__zreceive(a,2); - if (type == 0) { - if (!stbi__parse_uncompressed_block(a)) return 0; - } else if (type == 3) { - return 0; - } else { - if (type == 1) { - // use fixed code lengths - if (!stbi__zdefault_distance[31]) stbi__init_zdefaults(); - if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; - } else { - if (!stbi__compute_huffman_codes(a)) return 0; - } - if (!stbi__parse_huffman_block(a)) return 0; - } - } while (!final); - return 1; -} - -static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) -{ - a->zout_start = obuf; - a->zout = obuf; - a->zout_end = obuf + olen; - a->z_expandable = exp; - - return stbi__parse_zlib(a, parse_header); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) -{ - return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) - return (int) (a.zout - a.zout_start); - else - return -1; -} - -STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(16384); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer+len; - if (stbi__do_zlib(&a, p, 16384, 1, 0)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) - return (int) (a.zout - a.zout_start); - else - return -1; -} -#endif - -// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 -// simple implementation -// - only 8-bit samples -// - no CRC checking -// - allocates lots of intermediate memory -// - avoids problem of streaming data between subsystems -// - avoids explicit window management -// performance -// - uses stb_zlib, a PD zlib implementation with fast huffman decoding - -#ifndef STBI_NO_PNG -typedef struct -{ - stbi__uint32 length; - stbi__uint32 type; -} stbi__pngchunk; - -static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) -{ - stbi__pngchunk c; - c.length = stbi__get32be(s); - c.type = stbi__get32be(s); - return c; -} - -static int stbi__check_png_header(stbi__context *s) -{ - static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; - int i; - for (i=0; i < 8; ++i) - if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); - return 1; -} - -typedef struct -{ - stbi__context *s; - stbi_uc *idata, *expanded, *out; - int depth; -} stbi__png; - - -enum { - STBI__F_none=0, - STBI__F_sub=1, - STBI__F_up=2, - STBI__F_avg=3, - STBI__F_paeth=4, - // synthetic filters used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first, - STBI__F_paeth_first -}; - -static stbi_uc first_row_filter[5] = -{ - STBI__F_none, - STBI__F_sub, - STBI__F_none, - STBI__F_avg_first, - STBI__F_paeth_first -}; - -static int stbi__paeth(int a, int b, int c) -{ - int p = a + b - c; - int pa = abs(p-a); - int pb = abs(p-b); - int pc = abs(p-c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; -} - -static stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; - -// create the png data from post-deflated data -static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) -{ - int bytes = (depth == 16? 2 : 1); - stbi__context *s = a->s; - stbi__uint32 i,j,stride = x*out_n*bytes; - stbi__uint32 img_len, img_width_bytes; - int k; - int img_n = s->img_n; // copy it into a local for later - - int output_bytes = out_n*bytes; - int filter_bytes = img_n*bytes; - int width = x; - - STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); - a->out = (stbi_uc *) stbi__malloc(x * y * output_bytes); // extra bytes to write off the end into - if (!a->out) return stbi__err("outofmem", "Out of memory"); - - img_width_bytes = (((img_n * x * depth) + 7) >> 3); - img_len = (img_width_bytes + 1) * y; - if (s->img_x == x && s->img_y == y) { - if (raw_len != img_len) return stbi__err("not enough pixels","Corrupt PNG"); - } else { // interlaced: - if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); - } - - for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *prior = cur - stride; - int filter = *raw++; - - if (filter > 4) - return stbi__err("invalid filter","Corrupt PNG"); - - if (depth < 8) { - STBI_ASSERT(img_width_bytes <= x); - cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place - filter_bytes = 1; - width = img_width_bytes; - } - - // if first row, use special filter that doesn't sample previous row - if (j == 0) filter = first_row_filter[filter]; - - // handle first byte explicitly - for (k=0; k < filter_bytes; ++k) { - switch (filter) { - case STBI__F_none : cur[k] = raw[k]; break; - case STBI__F_sub : cur[k] = raw[k]; break; - case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; - case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; - case STBI__F_avg_first : cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; - } - } - - if (depth == 8) { - if (img_n != out_n) - cur[img_n] = 255; // first pixel - raw += img_n; - cur += out_n; - prior += out_n; - } else if (depth == 16) { - if (img_n != out_n) { - cur[filter_bytes] = 255; // first pixel top byte - cur[filter_bytes+1] = 255; // first pixel bottom byte - } - raw += filter_bytes; - cur += output_bytes; - prior += output_bytes; - } else { - raw += 1; - cur += 1; - prior += 1; - } - - // this is a little gross, so that we don't switch per-pixel or per-component - if (depth < 8 || img_n == out_n) { - int nk = (width - 1)*filter_bytes; - #define CASE(f) \ - case f: \ - for (k=0; k < nk; ++k) - switch (filter) { - // "none" filter turns into a memcpy here; make that explicit. - case STBI__F_none: memcpy(cur, raw, nk); break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break; - } - #undef CASE - raw += nk; - } else { - STBI_ASSERT(img_n+1 == out_n); - #define CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ - for (k=0; k < filter_bytes; ++k) - switch (filter) { - CASE(STBI__F_none) cur[k] = raw[k]; break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); break; - } - #undef CASE - - // the loop above sets the high byte of the pixels' alpha, but for - // 16 bit png files we also need the low byte set. we'll do that here. - if (depth == 16) { - cur = a->out + stride*j; // start at the beginning of the row again - for (i=0; i < x; ++i,cur+=output_bytes) { - cur[filter_bytes+1] = 255; - } - } - } - } - - // we make a separate pass to expand bits to pixels; for performance, - // this could run two scanlines behind the above code, so it won't - // intefere with filtering but will still be in the cache. - if (depth < 8) { - for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; - // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit - // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop - stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range - - // note that the final byte might overshoot and write more data than desired. - // we can allocate enough data that this never writes out of memory, but it - // could also overwrite the next scanline. can it overwrite non-empty data - // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. - // so we need to explicitly clamp the final ones - - if (depth == 4) { - for (k=x*img_n; k >= 2; k-=2, ++in) { - *cur++ = scale * ((*in >> 4) ); - *cur++ = scale * ((*in ) & 0x0f); - } - if (k > 0) *cur++ = scale * ((*in >> 4) ); - } else if (depth == 2) { - for (k=x*img_n; k >= 4; k-=4, ++in) { - *cur++ = scale * ((*in >> 6) ); - *cur++ = scale * ((*in >> 4) & 0x03); - *cur++ = scale * ((*in >> 2) & 0x03); - *cur++ = scale * ((*in ) & 0x03); - } - if (k > 0) *cur++ = scale * ((*in >> 6) ); - if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); - if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); - } else if (depth == 1) { - for (k=x*img_n; k >= 8; k-=8, ++in) { - *cur++ = scale * ((*in >> 7) ); - *cur++ = scale * ((*in >> 6) & 0x01); - *cur++ = scale * ((*in >> 5) & 0x01); - *cur++ = scale * ((*in >> 4) & 0x01); - *cur++ = scale * ((*in >> 3) & 0x01); - *cur++ = scale * ((*in >> 2) & 0x01); - *cur++ = scale * ((*in >> 1) & 0x01); - *cur++ = scale * ((*in ) & 0x01); - } - if (k > 0) *cur++ = scale * ((*in >> 7) ); - if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); - if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); - if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); - if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); - if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); - if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); - } - if (img_n != out_n) { - int q; - // insert alpha = 255 - cur = a->out + stride*j; - if (img_n == 1) { - for (q=x-1; q >= 0; --q) { - cur[q*2+1] = 255; - cur[q*2+0] = cur[q]; - } - } else { - STBI_ASSERT(img_n == 3); - for (q=x-1; q >= 0; --q) { - cur[q*4+3] = 255; - cur[q*4+2] = cur[q*3+2]; - cur[q*4+1] = cur[q*3+1]; - cur[q*4+0] = cur[q*3+0]; - } - } - } - } - } else if (depth == 16) { - // force the image data from big-endian to platform-native. - // this is done in a separate pass due to the decoding relying - // on the data being untouched, but could probably be done - // per-line during decode if care is taken. - stbi_uc *cur = a->out; - stbi__uint16 *cur16 = (stbi__uint16*)cur; - - for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { - *cur16 = (cur[0] << 8) | cur[1]; - } - } - - return 1; -} - -static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) -{ - stbi_uc *final; - int p; - if (!interlaced) - return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); - - // de-interlacing - final = (stbi_uc *) stbi__malloc(a->s->img_x * a->s->img_y * out_n); - for (p=0; p < 7; ++p) { - int xorig[] = { 0,4,0,2,0,1,0 }; - int yorig[] = { 0,0,4,0,2,0,1 }; - int xspc[] = { 8,8,4,4,2,2,1 }; - int yspc[] = { 8,8,8,4,4,2,2 }; - int i,j,x,y; - // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 - x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; - y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; - if (x && y) { - stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; - if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { - STBI_FREE(final); - return 0; - } - for (j=0; j < y; ++j) { - for (i=0; i < x; ++i) { - int out_y = j*yspc[p]+yorig[p]; - int out_x = i*xspc[p]+xorig[p]; - memcpy(final + out_y*a->s->img_x*out_n + out_x*out_n, - a->out + (j*x+i)*out_n, out_n); - } - } - STBI_FREE(a->out); - image_data += img_len; - image_data_len -= img_len; - } - } - a->out = final; - - return 1; -} - -static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - // compute color-based transparency, assuming we've - // already got 255 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i=0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 255); - p += 2; - } - } else { - for (i=0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi__uint16 *p = (stbi__uint16*) z->out; - - // compute color-based transparency, assuming we've - // already got 65535 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i = 0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 65535); - p += 2; - } - } else { - for (i = 0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) -{ - stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; - stbi_uc *p, *temp_out, *orig = a->out; - - p = (stbi_uc *) stbi__malloc(pixel_count * pal_img_n); - if (p == NULL) return stbi__err("outofmem", "Out of memory"); - - // between here and free(out) below, exitting would leak - temp_out = p; - - if (pal_img_n == 3) { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p += 3; - } - } else { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p[3] = palette[n+3]; - p += 4; - } - } - STBI_FREE(a->out); - a->out = temp_out; - - STBI_NOTUSED(len); - - return 1; -} - -static int stbi__reduce_png(stbi__png *p) -{ - int i; - int img_len = p->s->img_x * p->s->img_y * p->s->img_out_n; - stbi_uc *reduced; - stbi__uint16 *orig = (stbi__uint16*)p->out; - - if (p->depth != 16) return 1; // don't need to do anything if not 16-bit data - - reduced = (stbi_uc *)stbi__malloc(img_len); - if (p == NULL) return stbi__err("outofmem", "Out of memory"); - - for (i = 0; i < img_len; ++i) reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is a decent approx of 16->8 bit scaling - - p->out = reduced; - STBI_FREE(orig); - - return 1; -} - -static int stbi__unpremultiply_on_load = 0; -static int stbi__de_iphone_flag = 0; - -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) -{ - stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; -} - -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) -{ - stbi__de_iphone_flag = flag_true_if_should_convert; -} - -static void stbi__de_iphone(stbi__png *z) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - if (s->img_out_n == 3) { // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 3; - } - } else { - STBI_ASSERT(s->img_out_n == 4); - if (stbi__unpremultiply_on_load) { - // convert bgr to rgb and unpremultiply - for (i=0; i < pixel_count; ++i) { - stbi_uc a = p[3]; - stbi_uc t = p[0]; - if (a) { - p[0] = p[2] * 255 / a; - p[1] = p[1] * 255 / a; - p[2] = t * 255 / a; - } else { - p[0] = p[2]; - p[2] = t; - } - p += 4; - } - } else { - // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } -} - -#define STBI__PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) - -static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) -{ - stbi_uc palette[1024], pal_img_n=0; - stbi_uc has_trans=0, tc[3]; - stbi__uint16 tc16[3]; - stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; - int first=1,k,interlace=0, color=0, is_iphone=0; - stbi__context *s = z->s; - - z->expanded = NULL; - z->idata = NULL; - z->out = NULL; - - if (!stbi__check_png_header(s)) return 0; - - if (scan == STBI__SCAN_type) return 1; - - for (;;) { - stbi__pngchunk c = stbi__get_chunk_header(s); - switch (c.type) { - case STBI__PNG_TYPE('C','g','B','I'): - is_iphone = 1; - stbi__skip(s, c.length); - break; - case STBI__PNG_TYPE('I','H','D','R'): { - int comp,filter; - if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); - first = 0; - if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); - s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); - s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); - z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); - color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); - comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); - filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); - interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); - if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); - if (scan == STBI__SCAN_header) return 1; - } else { - // if paletted, then pal_n is our final components, and - // img_n is # components to decompress/filter. - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); - // if SCAN_header, have to scan to see if we have a tRNS - } - break; - } - - case STBI__PNG_TYPE('P','L','T','E'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); - for (i=0; i < pal_len; ++i) { - palette[i*4+0] = stbi__get8(s); - palette[i*4+1] = stbi__get8(s); - palette[i*4+2] = stbi__get8(s); - palette[i*4+3] = 255; - } - break; - } - - case STBI__PNG_TYPE('t','R','N','S'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); - if (pal_img_n) { - if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } - if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); - if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); - pal_img_n = 4; - for (i=0; i < c.length; ++i) - palette[i*4+3] = stbi__get8(s); - } else { - if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); - if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); - has_trans = 1; - if (z->depth == 16) { - for (k = 0; k < s->img_n; ++k) tc16[k] = stbi__get16be(s); // copy the values as-is - } else { - for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger - } - } - break; - } - - case STBI__PNG_TYPE('I','D','A','T'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); - if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } - if ((int)(ioff + c.length) < (int)ioff) return 0; - if (ioff + c.length > idata_limit) { - stbi__uint32 idata_limit_old = idata_limit; - stbi_uc *p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - STBI_NOTUSED(idata_limit_old); - p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); - z->idata = p; - } - if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); - ioff += c.length; - break; - } - - case STBI__PNG_TYPE('I','E','N','D'): { - stbi__uint32 raw_len, bpl; - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (scan != STBI__SCAN_load) return 1; - if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); - // initial guess for decoded data size to avoid unnecessary reallocs - bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component - raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; - z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); - if (z->expanded == NULL) return 0; // zlib should set error - STBI_FREE(z->idata); z->idata = NULL; - if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n+1; - else - s->img_out_n = s->img_n; - if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; - if (has_trans) { - if (z->depth == 16) { - if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; - } else { - if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; - } - } - if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) - stbi__de_iphone(z); - if (pal_img_n) { - // pal_img_n == 3 or 4 - s->img_n = pal_img_n; // record the actual colors we had - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } - STBI_FREE(z->expanded); z->expanded = NULL; - return 1; - } - - default: - // if critical, fail - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { - #ifndef STBI_NO_FAILURE_STRINGS - // not threadsafe - static char invalid_chunk[] = "XXXX PNG chunk not known"; - invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); - invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); - invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); - invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); - #endif - return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); - } - stbi__skip(s, c.length); - break; - } - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - } -} - -static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp) -{ - unsigned char *result=NULL; - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { - if (p->depth == 16) { - if (!stbi__reduce_png(p)) { - return result; - } - } - result = p->out; - p->out = NULL; - if (req_comp && req_comp != p->s->img_out_n) { - result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - p->s->img_out_n = req_comp; - if (result == NULL) return result; - } - *x = p->s->img_x; - *y = p->s->img_y; - if (n) *n = p->s->img_n; - } - STBI_FREE(p->out); p->out = NULL; - STBI_FREE(p->expanded); p->expanded = NULL; - STBI_FREE(p->idata); p->idata = NULL; - - return result; -} - -static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi__png p; - p.s = s; - return stbi__do_png(&p, x,y,comp,req_comp); -} - -static int stbi__png_test(stbi__context *s) -{ - int r; - r = stbi__check_png_header(s); - stbi__rewind(s); - return r; -} - -static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) -{ - if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { - stbi__rewind( p->s ); - return 0; - } - if (x) *x = p->s->img_x; - if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; - return 1; -} - -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__png p; - p.s = s; - return stbi__png_info_raw(&p, x, y, comp); -} -#endif - -// Microsoft/Windows BMP image - -#ifndef STBI_NO_BMP -static int stbi__bmp_test_raw(stbi__context *s) -{ - int r; - int sz; - if (stbi__get8(s) != 'B') return 0; - if (stbi__get8(s) != 'M') return 0; - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - stbi__get32le(s); // discard data offset - sz = stbi__get32le(s); - r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); - return r; -} - -static int stbi__bmp_test(stbi__context *s) -{ - int r = stbi__bmp_test_raw(s); - stbi__rewind(s); - return r; -} - - -// returns 0..31 for the highest set bit -static int stbi__high_bit(unsigned int z) -{ - int n=0; - if (z == 0) return -1; - if (z >= 0x10000) n += 16, z >>= 16; - if (z >= 0x00100) n += 8, z >>= 8; - if (z >= 0x00010) n += 4, z >>= 4; - if (z >= 0x00004) n += 2, z >>= 2; - if (z >= 0x00002) n += 1, z >>= 1; - return n; -} - -static int stbi__bitcount(unsigned int a) -{ - a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 - a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits - a = (a + (a >> 8)); // max 16 per 8 bits - a = (a + (a >> 16)); // max 32 per 8 bits - return a & 0xff; -} - -static int stbi__shiftsigned(int v, int shift, int bits) -{ - int result; - int z=0; - - if (shift < 0) v <<= -shift; - else v >>= shift; - result = v; - - z = bits; - while (z < 8) { - result += v >> z; - z += bits; - } - return result; -} - -typedef struct -{ - int bpp, offset, hsz; - unsigned int mr,mg,mb,ma, all_a; -} stbi__bmp_data; - -static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) -{ - int hsz; - if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - info->offset = stbi__get32le(s); - info->hsz = hsz = stbi__get32le(s); - info->mr = info->mg = info->mb = info->ma = 0; - - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); - if (hsz == 12) { - s->img_x = stbi__get16le(s); - s->img_y = stbi__get16le(s); - } else { - s->img_x = stbi__get32le(s); - s->img_y = stbi__get32le(s); - } - if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); - info->bpp = stbi__get16le(s); - if (info->bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit"); - if (hsz != 12) { - int compress = stbi__get32le(s); - if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); - stbi__get32le(s); // discard sizeof - stbi__get32le(s); // discard hres - stbi__get32le(s); // discard vres - stbi__get32le(s); // discard colorsused - stbi__get32le(s); // discard max important - if (hsz == 40 || hsz == 56) { - if (hsz == 56) { - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - } - if (info->bpp == 16 || info->bpp == 32) { - if (compress == 0) { - if (info->bpp == 32) { - info->mr = 0xffu << 16; - info->mg = 0xffu << 8; - info->mb = 0xffu << 0; - info->ma = 0xffu << 24; - info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 - } else { - info->mr = 31u << 10; - info->mg = 31u << 5; - info->mb = 31u << 0; - } - } else if (compress == 3) { - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - // not documented, but generated by photoshop and handled by mspaint - if (info->mr == info->mg && info->mg == info->mb) { - // ?!?!? - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else { - int i; - if (hsz != 108 && hsz != 124) - return stbi__errpuc("bad BMP", "bad BMP"); - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->ma = stbi__get32le(s); - stbi__get32le(s); // discard color space - for (i=0; i < 12; ++i) - stbi__get32le(s); // discard color space parameters - if (hsz == 124) { - stbi__get32le(s); // discard rendering intent - stbi__get32le(s); // discard offset of profile data - stbi__get32le(s); // discard size of profile data - stbi__get32le(s); // discard reserved - } - } - } - return (void *) 1; -} - - -static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi_uc *out; - unsigned int mr=0,mg=0,mb=0,ma=0, all_a; - stbi_uc pal[256][4]; - int psize=0,i,j,width; - int flip_vertically, pad, target; - stbi__bmp_data info; - - info.all_a = 255; - if (stbi__bmp_parse_header(s, &info) == NULL) - return NULL; // error code already set - - flip_vertically = ((int) s->img_y) > 0; - s->img_y = abs((int) s->img_y); - - mr = info.mr; - mg = info.mg; - mb = info.mb; - ma = info.ma; - all_a = info.all_a; - - if (info.hsz == 12) { - if (info.bpp < 24) - psize = (info.offset - 14 - 24) / 3; - } else { - if (info.bpp < 16) - psize = (info.offset - 14 - info.hsz) >> 2; - } - - s->img_n = ma ? 4 : 3; - if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 - target = req_comp; - else - target = s->img_n; // if they want monochrome, we'll post-convert - - out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (info.bpp < 16) { - int z=0; - if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } - for (i=0; i < psize; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - if (info.hsz != 12) stbi__get8(s); - pal[i][3] = 255; - } - stbi__skip(s, info.offset - 14 - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); - if (info.bpp == 4) width = (s->img_x + 1) >> 1; - else if (info.bpp == 8) width = s->img_x; - else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } - pad = (-width)&3; - for (j=0; j < (int) s->img_y; ++j) { - for (i=0; i < (int) s->img_x; i += 2) { - int v=stbi__get8(s),v2=0; - if (info.bpp == 4) { - v2 = v & 15; - v >>= 4; - } - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - v = (info.bpp == 8) ? stbi__get8(s) : v2; - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - } - stbi__skip(s, pad); - } - } else { - int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; - int z = 0; - int easy=0; - stbi__skip(s, info.offset - 14 - info.hsz); - if (info.bpp == 24) width = 3 * s->img_x; - else if (info.bpp == 16) width = 2*s->img_x; - else /* bpp = 32 and pad = 0 */ width=0; - pad = (-width) & 3; - if (info.bpp == 24) { - easy = 1; - } else if (info.bpp == 32) { - if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) - easy = 2; - } - if (!easy) { - if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - // right shift amt to put high bit in position #7 - rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); - gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); - bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); - ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); - } - for (j=0; j < (int) s->img_y; ++j) { - if (easy) { - for (i=0; i < (int) s->img_x; ++i) { - unsigned char a; - out[z+2] = stbi__get8(s); - out[z+1] = stbi__get8(s); - out[z+0] = stbi__get8(s); - z += 3; - a = (easy == 2 ? stbi__get8(s) : 255); - all_a |= a; - if (target == 4) out[z++] = a; - } - } else { - int bpp = info.bpp; - for (i=0; i < (int) s->img_x; ++i) { - stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); - int a; - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); - a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); - all_a |= a; - if (target == 4) out[z++] = STBI__BYTECAST(a); - } - } - stbi__skip(s, pad); - } - } - - // if alpha channel is all 0s, replace with all 255s - if (target == 4 && all_a == 0) - for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) - out[i] = 255; - - if (flip_vertically) { - stbi_uc t; - for (j=0; j < (int) s->img_y>>1; ++j) { - stbi_uc *p1 = out + j *s->img_x*target; - stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; - for (i=0; i < (int) s->img_x*target; ++i) { - t = p1[i], p1[i] = p2[i], p2[i] = t; - } - } - } - - if (req_comp && req_comp != target) { - out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - return out; -} -#endif - -// Targa Truevision - TGA -// by Jonathan Dummer -#ifndef STBI_NO_TGA -// returns STBI_rgb or whatever, 0 on error -static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) -{ - // only RGB or RGBA (incl. 16bit) or grey allowed - if(is_rgb16) *is_rgb16 = 0; - switch(bits_per_pixel) { - case 8: return STBI_grey; - case 16: if(is_grey) return STBI_grey_alpha; - // else: fall-through - case 15: if(is_rgb16) *is_rgb16 = 1; - return STBI_rgb; - case 24: // fall-through - case 32: return bits_per_pixel/8; - default: return 0; - } -} - -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) -{ - int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; - int sz, tga_colormap_type; - stbi__get8(s); // discard Offset - tga_colormap_type = stbi__get8(s); // colormap type - if( tga_colormap_type > 1 ) { - stbi__rewind(s); - return 0; // only RGB or indexed allowed - } - tga_image_type = stbi__get8(s); // image type - if ( tga_colormap_type == 1 ) { // colormapped (paletted) image - if (tga_image_type != 1 && tga_image_type != 9) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip image x and y origin - tga_colormap_bpp = sz; - } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE - if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { - stbi__rewind(s); - return 0; // only RGB or grey allowed, +/- RLE - } - stbi__skip(s,9); // skip colormap specification and image x/y origin - tga_colormap_bpp = 0; - } - tga_w = stbi__get16le(s); - if( tga_w < 1 ) { - stbi__rewind(s); - return 0; // test width - } - tga_h = stbi__get16le(s); - if( tga_h < 1 ) { - stbi__rewind(s); - return 0; // test height - } - tga_bits_per_pixel = stbi__get8(s); // bits per pixel - stbi__get8(s); // ignore alpha bits - if (tga_colormap_bpp != 0) { - if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { - // when using a colormap, tga_bits_per_pixel is the size of the indexes - // I don't think anything but 8 or 16bit indexes makes sense - stbi__rewind(s); - return 0; - } - tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); - } else { - tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); - } - if(!tga_comp) { - stbi__rewind(s); - return 0; - } - if (x) *x = tga_w; - if (y) *y = tga_h; - if (comp) *comp = tga_comp; - return 1; // seems to have passed everything -} - -static int stbi__tga_test(stbi__context *s) -{ - int res = 0; - int sz, tga_color_type; - stbi__get8(s); // discard Offset - tga_color_type = stbi__get8(s); // color type - if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed - sz = stbi__get8(s); // image type - if ( tga_color_type == 1 ) { // colormapped (paletted) image - if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - stbi__skip(s,4); // skip image x and y origin - } else { // "normal" image w/o colormap - if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE - stbi__skip(s,9); // skip colormap specification and image x/y origin - } - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height - sz = stbi__get8(s); // bits per pixel - if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - - res = 1; // if we got this far, everything's good and we can return 1 instead of 0 - -errorEnd: - stbi__rewind(s); - return res; -} - -// read 16bit value and convert to 24bit RGB -void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) -{ - stbi__uint16 px = stbi__get16le(s); - stbi__uint16 fiveBitMask = 31; - // we have 3 channels with 5bits each - int r = (px >> 10) & fiveBitMask; - int g = (px >> 5) & fiveBitMask; - int b = px & fiveBitMask; - // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later - out[0] = (r * 255)/31; - out[1] = (g * 255)/31; - out[2] = (b * 255)/31; - - // some people claim that the most significant bit might be used for alpha - // (possibly if an alpha-bit is set in the "image descriptor byte") - // but that only made 16bit test images completely translucent.. - // so let's treat all 15 and 16bit TGAs as RGB with no alpha. -} - -static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - // read in the TGA header stuff - int tga_offset = stbi__get8(s); - int tga_indexed = stbi__get8(s); - int tga_image_type = stbi__get8(s); - int tga_is_RLE = 0; - int tga_palette_start = stbi__get16le(s); - int tga_palette_len = stbi__get16le(s); - int tga_palette_bits = stbi__get8(s); - int tga_x_origin = stbi__get16le(s); - int tga_y_origin = stbi__get16le(s); - int tga_width = stbi__get16le(s); - int tga_height = stbi__get16le(s); - int tga_bits_per_pixel = stbi__get8(s); - int tga_comp, tga_rgb16=0; - int tga_inverted = stbi__get8(s); - // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) - // image data - unsigned char *tga_data; - unsigned char *tga_palette = NULL; - int i, j; - unsigned char raw_data[4]; - int RLE_count = 0; - int RLE_repeating = 0; - int read_next_pixel = 1; - - // do a tiny bit of precessing - if ( tga_image_type >= 8 ) - { - tga_image_type -= 8; - tga_is_RLE = 1; - } - tga_inverted = 1 - ((tga_inverted >> 5) & 1); - - // If I'm paletted, then I'll use the number of bits from the palette - if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); - else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); - - if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency - return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); - - // tga info - *x = tga_width; - *y = tga_height; - if (comp) *comp = tga_comp; - - tga_data = (unsigned char*)stbi__malloc( (size_t)tga_width * tga_height * tga_comp ); - if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); - - // skip to the data's starting position (offset usually = 0) - stbi__skip(s, tga_offset ); - - if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { - for (i=0; i < tga_height; ++i) { - int row = tga_inverted ? tga_height -i - 1 : i; - stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; - stbi__getn(s, tga_row, tga_width * tga_comp); - } - } else { - // do I need to load a palette? - if ( tga_indexed) - { - // any data to skip? (offset usually = 0) - stbi__skip(s, tga_palette_start ); - // load the palette - tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_comp ); - if (!tga_palette) { - STBI_FREE(tga_data); - return stbi__errpuc("outofmem", "Out of memory"); - } - if (tga_rgb16) { - stbi_uc *pal_entry = tga_palette; - STBI_ASSERT(tga_comp == STBI_rgb); - for (i=0; i < tga_palette_len; ++i) { - stbi__tga_read_rgb16(s, pal_entry); - pal_entry += tga_comp; - } - } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { - STBI_FREE(tga_data); - STBI_FREE(tga_palette); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - } - // load the data - for (i=0; i < tga_width * tga_height; ++i) - { - // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? - if ( tga_is_RLE ) - { - if ( RLE_count == 0 ) - { - // yep, get the next byte as a RLE command - int RLE_cmd = stbi__get8(s); - RLE_count = 1 + (RLE_cmd & 127); - RLE_repeating = RLE_cmd >> 7; - read_next_pixel = 1; - } else if ( !RLE_repeating ) - { - read_next_pixel = 1; - } - } else - { - read_next_pixel = 1; - } - // OK, if I need to read a pixel, do it now - if ( read_next_pixel ) - { - // load however much data we did have - if ( tga_indexed ) - { - // read in index, then perform the lookup - int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); - if ( pal_idx >= tga_palette_len ) { - // invalid index - pal_idx = 0; - } - pal_idx *= tga_comp; - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = tga_palette[pal_idx+j]; - } - } else if(tga_rgb16) { - STBI_ASSERT(tga_comp == STBI_rgb); - stbi__tga_read_rgb16(s, raw_data); - } else { - // read in the data raw - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = stbi__get8(s); - } - } - // clear the reading flag for the next pixel - read_next_pixel = 0; - } // end of reading a pixel - - // copy data - for (j = 0; j < tga_comp; ++j) - tga_data[i*tga_comp+j] = raw_data[j]; - - // in case we're in RLE mode, keep counting down - --RLE_count; - } - // do I need to invert the image? - if ( tga_inverted ) - { - for (j = 0; j*2 < tga_height; ++j) - { - int index1 = j * tga_width * tga_comp; - int index2 = (tga_height - 1 - j) * tga_width * tga_comp; - for (i = tga_width * tga_comp; i > 0; --i) - { - unsigned char temp = tga_data[index1]; - tga_data[index1] = tga_data[index2]; - tga_data[index2] = temp; - ++index1; - ++index2; - } - } - } - // clear my palette, if I had one - if ( tga_palette != NULL ) - { - STBI_FREE( tga_palette ); - } - } - - // swap RGB - if the source data was RGB16, it already is in the right order - if (tga_comp >= 3 && !tga_rgb16) - { - unsigned char* tga_pixel = tga_data; - for (i=0; i < tga_width * tga_height; ++i) - { - unsigned char temp = tga_pixel[0]; - tga_pixel[0] = tga_pixel[2]; - tga_pixel[2] = temp; - tga_pixel += tga_comp; - } - } - - // convert to target component count - if (req_comp && req_comp != tga_comp) - tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); - - // the things I do to get rid of an error message, and yet keep - // Microsoft's C compilers happy... [8^( - tga_palette_start = tga_palette_len = tga_palette_bits = - tga_x_origin = tga_y_origin = 0; - // OK, done - return tga_data; -} -#endif - -// ************************************************************************************************* -// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s) -{ - int r = (stbi__get32be(s) == 0x38425053); - stbi__rewind(s); - return r; -} - -static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - int pixelCount; - int channelCount, compression; - int channel, i, count, len; - int bitdepth; - int w,h; - stbi_uc *out; - - // Check identifier - if (stbi__get32be(s) != 0x38425053) // "8BPS" - return stbi__errpuc("not PSD", "Corrupt PSD image"); - - // Check file type version. - if (stbi__get16be(s) != 1) - return stbi__errpuc("wrong version", "Unsupported version of PSD image"); - - // Skip 6 reserved bytes. - stbi__skip(s, 6 ); - - // Read the number of channels (R, G, B, A, etc). - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) - return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); - - // Read the rows and columns of the image. - h = stbi__get32be(s); - w = stbi__get32be(s); - - // Make sure the depth is 8 bits. - bitdepth = stbi__get16be(s); - if (bitdepth != 8 && bitdepth != 16) - return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); - - // Make sure the color mode is RGB. - // Valid options are: - // 0: Bitmap - // 1: Grayscale - // 2: Indexed color - // 3: RGB color - // 4: CMYK color - // 7: Multichannel - // 8: Duotone - // 9: Lab color - if (stbi__get16be(s) != 3) - return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); - - // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) - stbi__skip(s,stbi__get32be(s) ); - - // Skip the image resources. (resolution, pen tool paths, etc) - stbi__skip(s, stbi__get32be(s) ); - - // Skip the reserved data. - stbi__skip(s, stbi__get32be(s) ); - - // Find out if the data is compressed. - // Known values: - // 0: no compression - // 1: RLE compressed - compression = stbi__get16be(s); - if (compression > 1) - return stbi__errpuc("bad compression", "PSD has an unknown compression format"); - - // Create the destination image. - out = (stbi_uc *) stbi__malloc(4 * w*h); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - pixelCount = w*h; - - // Initialize the data to zero. - //memset( out, 0, pixelCount * 4 ); - - // Finally, the image data. - if (compression) { - // RLE as used by .PSD and .TIFF - // Loop until you get the number of unpacked bytes you are expecting: - // Read the next source byte into n. - // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. - // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. - // Else if n is 128, noop. - // Endloop - - // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, - // which we're going to just skip. - stbi__skip(s, h * channelCount * 2 ); - - // Read the RLE data by channel. - for (channel = 0; channel < 4; channel++) { - stbi_uc *p; - - p = out+channel; - if (channel >= channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++, p += 4) - *p = (channel == 3 ? 255 : 0); - } else { - // Read the RLE data. - count = 0; - while (count < pixelCount) { - len = stbi__get8(s); - if (len == 128) { - // No-op. - } else if (len < 128) { - // Copy next len+1 bytes literally. - len++; - count += len; - while (len) { - *p = stbi__get8(s); - p += 4; - len--; - } - } else if (len > 128) { - stbi_uc val; - // Next -len+1 bytes in the dest are replicated from next source byte. - // (Interpret len as a negative 8-bit int.) - len ^= 0x0FF; - len += 2; - val = stbi__get8(s); - count += len; - while (len) { - *p = val; - p += 4; - len--; - } - } - } - } - } - - } else { - // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) - // where each channel consists of an 8-bit value for each pixel in the image. - - // Read the data by channel. - for (channel = 0; channel < 4; channel++) { - stbi_uc *p; - - p = out + channel; - if (channel >= channelCount) { - // Fill this channel with default data. - stbi_uc val = channel == 3 ? 255 : 0; - for (i = 0; i < pixelCount; i++, p += 4) - *p = val; - } else { - // Read the data. - if (bitdepth == 16) { - for (i = 0; i < pixelCount; i++, p += 4) - *p = (stbi_uc) (stbi__get16be(s) >> 8); - } else { - for (i = 0; i < pixelCount; i++, p += 4) - *p = stbi__get8(s); - } - } - } - } - - if (channelCount >= 4) { - for (i=0; i < w*h; ++i) { - unsigned char *pixel = out + 4*i; - if (pixel[3] != 0 && pixel[3] != 255) { - // remove weird white matte from PSD - float a = pixel[3] / 255.0f; - float ra = 1.0f / a; - float inv_a = 255.0f * (1 - ra); - pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); - pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); - pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); - } - } - } - - if (req_comp && req_comp != 4) { - out = stbi__convert_format(out, 4, req_comp, w, h); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - if (comp) *comp = 4; - *y = h; - *x = w; - - return out; -} -#endif - -// ************************************************************************************************* -// Softimage PIC loader -// by Tom Seddon -// -// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format -// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ - -#ifndef STBI_NO_PIC -static int stbi__pic_is4(stbi__context *s,const char *str) -{ - int i; - for (i=0; i<4; ++i) - if (stbi__get8(s) != (stbi_uc)str[i]) - return 0; - - return 1; -} - -static int stbi__pic_test_core(stbi__context *s) -{ - int i; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) - return 0; - - for(i=0;i<84;++i) - stbi__get8(s); - - if (!stbi__pic_is4(s,"PICT")) - return 0; - - return 1; -} - -typedef struct -{ - stbi_uc size,type,channel; -} stbi__pic_packet; - -static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) -{ - int mask=0x80, i; - - for (i=0; i<4; ++i, mask>>=1) { - if (channel & mask) { - if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); - dest[i]=stbi__get8(s); - } - } - - return dest; -} - -static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) -{ - int mask=0x80,i; - - for (i=0;i<4; ++i, mask>>=1) - if (channel&mask) - dest[i]=src[i]; -} - -static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) -{ - int act_comp=0,num_packets=0,y,chained; - stbi__pic_packet packets[10]; - - // this will (should...) cater for even some bizarre stuff like having data - // for the same channel in multiple packets. - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return stbi__errpuc("bad format","too many packets"); - - packet = &packets[num_packets++]; - - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - - act_comp |= packet->channel; - - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); - if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? - - for(y=0; ytype) { - default: - return stbi__errpuc("bad format","packet has bad compression type"); - - case 0: {//uncompressed - int x; - - for(x=0;xchannel,dest)) - return 0; - break; - } - - case 1://Pure RLE - { - int left=width, i; - - while (left>0) { - stbi_uc count,value[4]; - - count=stbi__get8(s); - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); - - if (count > left) - count = (stbi_uc) left; - - if (!stbi__readval(s,packet->channel,value)) return 0; - - for(i=0; ichannel,dest,value); - left -= count; - } - } - break; - - case 2: {//Mixed RLE - int left=width; - while (left>0) { - int count = stbi__get8(s), i; - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); - - if (count >= 128) { // Repeated - stbi_uc value[4]; - - if (count==128) - count = stbi__get16be(s); - else - count -= 127; - if (count > left) - return stbi__errpuc("bad file","scanline overrun"); - - if (!stbi__readval(s,packet->channel,value)) - return 0; - - for(i=0;ichannel,dest,value); - } else { // Raw - ++count; - if (count>left) return stbi__errpuc("bad file","scanline overrun"); - - for(i=0;ichannel,dest)) - return 0; - } - left-=count; - } - break; - } - } - } - } - - return result; -} - -static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp) -{ - stbi_uc *result; - int i, x,y; - - for (i=0; i<92; ++i) - stbi__get8(s); - - x = stbi__get16be(s); - y = stbi__get16be(s); - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); - if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to decode"); - - stbi__get32be(s); //skip `ratio' - stbi__get16be(s); //skip `fields' - stbi__get16be(s); //skip `pad' - - // intermediate buffer is RGBA - result = (stbi_uc *) stbi__malloc(x*y*4); - memset(result, 0xff, x*y*4); - - if (!stbi__pic_load_core(s,x,y,comp, result)) { - STBI_FREE(result); - result=0; - } - *px = x; - *py = y; - if (req_comp == 0) req_comp = *comp; - result=stbi__convert_format(result,4,req_comp,x,y); - - return result; -} - -static int stbi__pic_test(stbi__context *s) -{ - int r = stbi__pic_test_core(s); - stbi__rewind(s); - return r; -} -#endif - -// ************************************************************************************************* -// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb - -#ifndef STBI_NO_GIF -typedef struct -{ - stbi__int16 prefix; - stbi_uc first; - stbi_uc suffix; -} stbi__gif_lzw; - -typedef struct -{ - int w,h; - stbi_uc *out, *old_out; // output buffer (always 4 components) - int flags, bgindex, ratio, transparent, eflags, delay; - stbi_uc pal[256][4]; - stbi_uc lpal[256][4]; - stbi__gif_lzw codes[4096]; - stbi_uc *color_table; - int parse, step; - int lflags; - int start_x, start_y; - int max_x, max_y; - int cur_x, cur_y; - int line_size; -} stbi__gif; - -static int stbi__gif_test_raw(stbi__context *s) -{ - int sz; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; - sz = stbi__get8(s); - if (sz != '9' && sz != '7') return 0; - if (stbi__get8(s) != 'a') return 0; - return 1; -} - -static int stbi__gif_test(stbi__context *s) -{ - int r = stbi__gif_test_raw(s); - stbi__rewind(s); - return r; -} - -static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) -{ - int i; - for (i=0; i < num_entries; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - pal[i][3] = transp == i ? 0 : 255; - } -} - -static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) -{ - stbi_uc version; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') - return stbi__err("not GIF", "Corrupt GIF"); - - version = stbi__get8(s); - if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); - if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); - - stbi__g_failure_reason = ""; - g->w = stbi__get16le(s); - g->h = stbi__get16le(s); - g->flags = stbi__get8(s); - g->bgindex = stbi__get8(s); - g->ratio = stbi__get8(s); - g->transparent = -1; - - if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments - - if (is_info) return 1; - - if (g->flags & 0x80) - stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); - - return 1; -} - -static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); - if (!stbi__gif_header(s, g, comp, 1)) { - STBI_FREE(g); - stbi__rewind( s ); - return 0; - } - if (x) *x = g->w; - if (y) *y = g->h; - STBI_FREE(g); - return 1; -} - -static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) -{ - stbi_uc *p, *c; - - // recurse to decode the prefixes, since the linked-list is backwards, - // and working backwards through an interleaved image would be nasty - if (g->codes[code].prefix >= 0) - stbi__out_gif_code(g, g->codes[code].prefix); - - if (g->cur_y >= g->max_y) return; - - p = &g->out[g->cur_x + g->cur_y]; - c = &g->color_table[g->codes[code].suffix * 4]; - - if (c[3] >= 128) { - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } - g->cur_x += 4; - - if (g->cur_x >= g->max_x) { - g->cur_x = g->start_x; - g->cur_y += g->step; - - while (g->cur_y >= g->max_y && g->parse > 0) { - g->step = (1 << g->parse) * g->line_size; - g->cur_y = g->start_y + (g->step >> 1); - --g->parse; - } - } -} - -static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) -{ - stbi_uc lzw_cs; - stbi__int32 len, init_code; - stbi__uint32 first; - stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; - stbi__gif_lzw *p; - - lzw_cs = stbi__get8(s); - if (lzw_cs > 12) return NULL; - clear = 1 << lzw_cs; - first = 1; - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - bits = 0; - valid_bits = 0; - for (init_code = 0; init_code < clear; init_code++) { - g->codes[init_code].prefix = -1; - g->codes[init_code].first = (stbi_uc) init_code; - g->codes[init_code].suffix = (stbi_uc) init_code; - } - - // support no starting clear code - avail = clear+2; - oldcode = -1; - - len = 0; - for(;;) { - if (valid_bits < codesize) { - if (len == 0) { - len = stbi__get8(s); // start new block - if (len == 0) - return g->out; - } - --len; - bits |= (stbi__int32) stbi__get8(s) << valid_bits; - valid_bits += 8; - } else { - stbi__int32 code = bits & codemask; - bits >>= codesize; - valid_bits -= codesize; - // @OPTIMIZE: is there some way we can accelerate the non-clear path? - if (code == clear) { // clear code - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - avail = clear + 2; - oldcode = -1; - first = 0; - } else if (code == clear + 1) { // end of stream code - stbi__skip(s, len); - while ((len = stbi__get8(s)) > 0) - stbi__skip(s,len); - return g->out; - } else if (code <= avail) { - if (first) return stbi__errpuc("no clear code", "Corrupt GIF"); - - if (oldcode >= 0) { - p = &g->codes[avail++]; - if (avail > 4096) return stbi__errpuc("too many codes", "Corrupt GIF"); - p->prefix = (stbi__int16) oldcode; - p->first = g->codes[oldcode].first; - p->suffix = (code == avail) ? p->first : g->codes[code].first; - } else if (code == avail) - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - - stbi__out_gif_code(g, (stbi__uint16) code); - - if ((avail & codemask) == 0 && avail <= 0x0FFF) { - codesize++; - codemask = (1 << codesize) - 1; - } - - oldcode = code; - } else { - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - } - } - } -} - -static void stbi__fill_gif_background(stbi__gif *g, int x0, int y0, int x1, int y1) -{ - int x, y; - stbi_uc *c = g->pal[g->bgindex]; - for (y = y0; y < y1; y += 4 * g->w) { - for (x = x0; x < x1; x += 4) { - stbi_uc *p = &g->out[y + x]; - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = 0; - } - } -} - -// this function is designed to support animated gifs, although stb_image doesn't support it -static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp) -{ - int i; - stbi_uc *prev_out = 0; - - if (g->out == 0 && !stbi__gif_header(s, g, comp,0)) - return 0; // stbi__g_failure_reason set by stbi__gif_header - - prev_out = g->out; - g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h); - if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory"); - - switch ((g->eflags & 0x1C) >> 2) { - case 0: // unspecified (also always used on 1st frame) - stbi__fill_gif_background(g, 0, 0, 4 * g->w, 4 * g->w * g->h); - break; - case 1: // do not dispose - if (prev_out) memcpy(g->out, prev_out, 4 * g->w * g->h); - g->old_out = prev_out; - break; - case 2: // dispose to background - if (prev_out) memcpy(g->out, prev_out, 4 * g->w * g->h); - stbi__fill_gif_background(g, g->start_x, g->start_y, g->max_x, g->max_y); - break; - case 3: // dispose to previous - if (g->old_out) { - for (i = g->start_y; i < g->max_y; i += 4 * g->w) - memcpy(&g->out[i + g->start_x], &g->old_out[i + g->start_x], g->max_x - g->start_x); - } - break; - } - - for (;;) { - switch (stbi__get8(s)) { - case 0x2C: /* Image Descriptor */ - { - int prev_trans = -1; - stbi__int32 x, y, w, h; - stbi_uc *o; - - x = stbi__get16le(s); - y = stbi__get16le(s); - w = stbi__get16le(s); - h = stbi__get16le(s); - if (((x + w) > (g->w)) || ((y + h) > (g->h))) - return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); - - g->line_size = g->w * 4; - g->start_x = x * 4; - g->start_y = y * g->line_size; - g->max_x = g->start_x + w * 4; - g->max_y = g->start_y + h * g->line_size; - g->cur_x = g->start_x; - g->cur_y = g->start_y; - - g->lflags = stbi__get8(s); - - if (g->lflags & 0x40) { - g->step = 8 * g->line_size; // first interlaced spacing - g->parse = 3; - } else { - g->step = g->line_size; - g->parse = 0; - } - - if (g->lflags & 0x80) { - stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); - g->color_table = (stbi_uc *) g->lpal; - } else if (g->flags & 0x80) { - if (g->transparent >= 0 && (g->eflags & 0x01)) { - prev_trans = g->pal[g->transparent][3]; - g->pal[g->transparent][3] = 0; - } - g->color_table = (stbi_uc *) g->pal; - } else - return stbi__errpuc("missing color table", "Corrupt GIF"); - - o = stbi__process_gif_raster(s, g); - if (o == NULL) return NULL; - - if (prev_trans != -1) - g->pal[g->transparent][3] = (stbi_uc) prev_trans; - - return o; - } - - case 0x21: // Comment Extension. - { - int len; - if (stbi__get8(s) == 0xF9) { // Graphic Control Extension. - len = stbi__get8(s); - if (len == 4) { - g->eflags = stbi__get8(s); - g->delay = stbi__get16le(s); - g->transparent = stbi__get8(s); - } else { - stbi__skip(s, len); - break; - } - } - while ((len = stbi__get8(s)) != 0) - stbi__skip(s, len); - break; - } - - case 0x3B: // gif stream termination code - return (stbi_uc *) s; // using '1' causes warning on some compilers - - default: - return stbi__errpuc("unknown code", "Corrupt GIF"); - } - } - - STBI_NOTUSED(req_comp); -} - -static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi_uc *u = 0; - stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); - memset(g, 0, sizeof(*g)); - - u = stbi__gif_load_next(s, g, comp, req_comp); - if (u == (stbi_uc *) s) u = 0; // end of animated gif marker - if (u) { - *x = g->w; - *y = g->h; - if (req_comp && req_comp != 4) - u = stbi__convert_format(u, 4, req_comp, g->w, g->h); - } - else if (g->out) - STBI_FREE(g->out); - STBI_FREE(g); - return u; -} - -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) -{ - return stbi__gif_info_raw(s,x,y,comp); -} -#endif - -// ************************************************************************************************* -// Radiance RGBE HDR loader -// originally by Nicolas Schulz -#ifndef STBI_NO_HDR -static int stbi__hdr_test_core(stbi__context *s) -{ - const char *signature = "#?RADIANCE\n"; - int i; - for (i=0; signature[i]; ++i) - if (stbi__get8(s) != signature[i]) - return 0; - return 1; -} - -static int stbi__hdr_test(stbi__context* s) -{ - int r = stbi__hdr_test_core(s); - stbi__rewind(s); - return r; -} - -#define STBI__HDR_BUFLEN 1024 -static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) -{ - int len=0; - char c = '\0'; - - c = (char) stbi__get8(z); - - while (!stbi__at_eof(z) && c != '\n') { - buffer[len++] = c; - if (len == STBI__HDR_BUFLEN-1) { - // flush to end of line - while (!stbi__at_eof(z) && stbi__get8(z) != '\n') - ; - break; - } - c = (char) stbi__get8(z); - } - - buffer[len] = 0; - return buffer; -} - -static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) -{ - if ( input[3] != 0 ) { - float f1; - // Exponent - f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); - if (req_comp <= 2) - output[0] = (input[0] + input[1] + input[2]) * f1 / 3; - else { - output[0] = input[0] * f1; - output[1] = input[1] * f1; - output[2] = input[2] * f1; - } - if (req_comp == 2) output[1] = 1; - if (req_comp == 4) output[3] = 1; - } else { - switch (req_comp) { - case 4: output[3] = 1; /* fallthrough */ - case 3: output[0] = output[1] = output[2] = 0; - break; - case 2: output[1] = 1; /* fallthrough */ - case 1: output[0] = 0; - break; - } - } -} - -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - int width, height; - stbi_uc *scanline; - float *hdr_data; - int len; - unsigned char count, value; - int i, j, k, c1,c2, z; - - - // Check identifier - if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) - return stbi__errpf("not HDR", "Corrupt HDR image"); - - // Parse header - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); - - // Parse width and height - // can't use sscanf() if we're not using stdio! - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - height = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - width = (int) strtol(token, NULL, 10); - - *x = width; - *y = height; - - if (comp) *comp = 3; - if (req_comp == 0) req_comp = 3; - - // Read data - hdr_data = (float *) stbi__malloc(height * width * req_comp * sizeof(float)); - - // Load image data - // image data is stored as some number of sca - if ( width < 8 || width >= 32768) { - // Read flat data - for (j=0; j < height; ++j) { - for (i=0; i < width; ++i) { - stbi_uc rgbe[4]; - main_decode_loop: - stbi__getn(s, rgbe, 4); - stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); - } - } - } else { - // Read RLE-encoded data - scanline = NULL; - - for (j = 0; j < height; ++j) { - c1 = stbi__get8(s); - c2 = stbi__get8(s); - len = stbi__get8(s); - if (c1 != 2 || c2 != 2 || (len & 0x80)) { - // not run-length encoded, so we have to actually use THIS data as a decoded - // pixel (note this can't be a valid pixel--one of RGB must be >= 128) - stbi_uc rgbe[4]; - rgbe[0] = (stbi_uc) c1; - rgbe[1] = (stbi_uc) c2; - rgbe[2] = (stbi_uc) len; - rgbe[3] = (stbi_uc) stbi__get8(s); - stbi__hdr_convert(hdr_data, rgbe, req_comp); - i = 1; - j = 0; - STBI_FREE(scanline); - goto main_decode_loop; // yes, this makes no sense - } - len <<= 8; - len |= stbi__get8(s); - if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } - if (scanline == NULL) scanline = (stbi_uc *) stbi__malloc(width * 4); - - for (k = 0; k < 4; ++k) { - i = 0; - while (i < width) { - count = stbi__get8(s); - if (count > 128) { - // Run - value = stbi__get8(s); - count -= 128; - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = value; - } else { - // Dump - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = stbi__get8(s); - } - } - } - for (i=0; i < width; ++i) - stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); - } - STBI_FREE(scanline); - } - - return hdr_data; -} - -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - - if (stbi__hdr_test(s) == 0) { - stbi__rewind( s ); - return 0; - } - - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) { - stbi__rewind( s ); - return 0; - } - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *y = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *x = (int) strtol(token, NULL, 10); - *comp = 3; - return 1; -} -#endif // STBI_NO_HDR - -#ifndef STBI_NO_BMP -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) -{ - void *p; - stbi__bmp_data info; - - info.all_a = 255; - p = stbi__bmp_parse_header(s, &info); - stbi__rewind( s ); - if (p == NULL) - return 0; - *x = s->img_x; - *y = s->img_y; - *comp = info.ma ? 4 : 3; - return 1; -} -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) -{ - int channelCount; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind( s ); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind( s ); - return 0; - } - *y = stbi__get32be(s); - *x = stbi__get32be(s); - if (stbi__get16be(s) != 8) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 3) { - stbi__rewind( s ); - return 0; - } - *comp = 4; - return 1; -} -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) -{ - int act_comp=0,num_packets=0,chained; - stbi__pic_packet packets[10]; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { - stbi__rewind(s); - return 0; - } - - stbi__skip(s, 88); - - *x = stbi__get16be(s); - *y = stbi__get16be(s); - if (stbi__at_eof(s)) { - stbi__rewind( s); - return 0; - } - if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { - stbi__rewind( s ); - return 0; - } - - stbi__skip(s, 8); - - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return 0; - - packet = &packets[num_packets++]; - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - act_comp |= packet->channel; - - if (stbi__at_eof(s)) { - stbi__rewind( s ); - return 0; - } - if (packet->size != 8) { - stbi__rewind( s ); - return 0; - } - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); - - return 1; -} -#endif - -// ************************************************************************************************* -// Portable Gray Map and Portable Pixel Map loader -// by Ken Miller -// -// PGM: http://netpbm.sourceforge.net/doc/pgm.html -// PPM: http://netpbm.sourceforge.net/doc/ppm.html -// -// Known limitations: -// Does not support comments in the header section -// Does not support ASCII image data (formats P2 and P3) -// Does not support 16-bit-per-channel - -#ifndef STBI_NO_PNM - -static int stbi__pnm_test(stbi__context *s) -{ - char p, t; - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind( s ); - return 0; - } - return 1; -} - -static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi_uc *out; - if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n)) - return 0; - *x = s->img_x; - *y = s->img_y; - *comp = s->img_n; - - out = (stbi_uc *) stbi__malloc(s->img_n * s->img_x * s->img_y); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - stbi__getn(s, out, s->img_n * s->img_x * s->img_y); - - if (req_comp && req_comp != s->img_n) { - out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - return out; -} - -static int stbi__pnm_isspace(char c) -{ - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; -} - -static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) -{ - for (;;) { - while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) - *c = (char) stbi__get8(s); - - if (stbi__at_eof(s) || *c != '#') - break; - - while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) - *c = (char) stbi__get8(s); - } -} - -static int stbi__pnm_isdigit(char c) -{ - return c >= '0' && c <= '9'; -} - -static int stbi__pnm_getinteger(stbi__context *s, char *c) -{ - int value = 0; - - while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { - value = value*10 + (*c - '0'); - *c = (char) stbi__get8(s); - } - - return value; -} - -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) -{ - int maxv; - char c, p, t; - - stbi__rewind( s ); - - // Get identifier - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind( s ); - return 0; - } - - *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm - - c = (char) stbi__get8(s); - stbi__pnm_skip_whitespace(s, &c); - - *x = stbi__pnm_getinteger(s, &c); // read width - stbi__pnm_skip_whitespace(s, &c); - - *y = stbi__pnm_getinteger(s, &c); // read height - stbi__pnm_skip_whitespace(s, &c); - - maxv = stbi__pnm_getinteger(s, &c); // read max value - - if (maxv > 255) - return stbi__err("max value > 255", "PPM image not 8-bit"); - else - return 1; -} -#endif - -static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) -{ - #ifndef STBI_NO_JPEG - if (stbi__jpeg_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNG - if (stbi__png_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_GIF - if (stbi__gif_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_BMP - if (stbi__bmp_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PSD - if (stbi__psd_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PIC - if (stbi__pic_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNM - if (stbi__pnm_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_info(s, x, y, comp)) return 1; - #endif - - // test tga last because it's a crappy test! - #ifndef STBI_NO_TGA - if (stbi__tga_info(s, x, y, comp)) - return 1; - #endif - return stbi__err("unknown image type", "Image not of any known type, or corrupt"); -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_info_from_file(f, x, y, comp); - fclose(f); - return result; -} - -STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) -{ - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__info_main(&s,x,y,comp); - fseek(f,pos,SEEK_SET); - return r; -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__info_main(&s,x,y,comp); -} - -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi__info_main(&s,x,y,comp); -} - -#endif // STB_IMAGE_IMPLEMENTATION - -/* - revision history: - 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes - 2.11 (2016-04-02) allocate large structures on the stack - remove white matting for transparent PSD - fix reported channel count for PNG & BMP - re-enable SSE2 in non-gcc 64-bit - support RGB-formatted JPEG - read 16-bit PNGs (only as 8-bit) - 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED - 2.09 (2016-01-16) allow comments in PNM files - 16-bit-per-pixel TGA (not bit-per-component) - info() for TGA could break due to .hdr handling - info() for BMP to shares code instead of sloppy parse - can use STBI_REALLOC_SIZED if allocator doesn't support realloc - code cleanup - 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA - 2.07 (2015-09-13) fix compiler warnings - partial animated GIF support - limited 16-bpc PSD support - #ifdef unused functions - bug with < 92 byte PIC,PNM,HDR,TGA - 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value - 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning - 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit - 2.03 (2015-04-12) extra corruption checking (mmozeiko) - stbi_set_flip_vertically_on_load (nguillemot) - fix NEON support; fix mingw support - 2.02 (2015-01-19) fix incorrect assert, fix warning - 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 - 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG - 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) - progressive JPEG (stb) - PGM/PPM support (Ken Miller) - STBI_MALLOC,STBI_REALLOC,STBI_FREE - GIF bugfix -- seemingly never worked - STBI_NO_*, STBI_ONLY_* - 1.48 (2014-12-14) fix incorrectly-named assert() - 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) - optimize PNG (ryg) - fix bug in interlaced PNG with user-specified channel count (stb) - 1.46 (2014-08-26) - fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG - 1.45 (2014-08-16) - fix MSVC-ARM internal compiler error by wrapping malloc - 1.44 (2014-08-07) - various warning fixes from Ronny Chevalier - 1.43 (2014-07-15) - fix MSVC-only compiler problem in code changed in 1.42 - 1.42 (2014-07-09) - don't define _CRT_SECURE_NO_WARNINGS (affects user code) - fixes to stbi__cleanup_jpeg path - added STBI_ASSERT to avoid requiring assert.h - 1.41 (2014-06-25) - fix search&replace from 1.36 that messed up comments/error messages - 1.40 (2014-06-22) - fix gcc struct-initialization warning - 1.39 (2014-06-15) - fix to TGA optimization when req_comp != number of components in TGA; - fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) - add support for BMP version 5 (more ignored fields) - 1.38 (2014-06-06) - suppress MSVC warnings on integer casts truncating values - fix accidental rename of 'skip' field of I/O - 1.37 (2014-06-04) - remove duplicate typedef - 1.36 (2014-06-03) - convert to header file single-file library - if de-iphone isn't set, load iphone images color-swapped instead of returning NULL - 1.35 (2014-05-27) - various warnings - fix broken STBI_SIMD path - fix bug where stbi_load_from_file no longer left file pointer in correct place - fix broken non-easy path for 32-bit BMP (possibly never used) - TGA optimization by Arseny Kapoulkine - 1.34 (unknown) - use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case - 1.33 (2011-07-14) - make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements - 1.32 (2011-07-13) - support for "info" function for all supported filetypes (SpartanJ) - 1.31 (2011-06-20) - a few more leak fixes, bug in PNG handling (SpartanJ) - 1.30 (2011-06-11) - added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) - removed deprecated format-specific test/load functions - removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway - error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) - fix inefficiency in decoding 32-bit BMP (David Woo) - 1.29 (2010-08-16) - various warning fixes from Aurelien Pocheville - 1.28 (2010-08-01) - fix bug in GIF palette transparency (SpartanJ) - 1.27 (2010-08-01) - cast-to-stbi_uc to fix warnings - 1.26 (2010-07-24) - fix bug in file buffering for PNG reported by SpartanJ - 1.25 (2010-07-17) - refix trans_data warning (Won Chun) - 1.24 (2010-07-12) - perf improvements reading from files on platforms with lock-heavy fgetc() - minor perf improvements for jpeg - deprecated type-specific functions so we'll get feedback if they're needed - attempt to fix trans_data warning (Won Chun) - 1.23 fixed bug in iPhone support - 1.22 (2010-07-10) - removed image *writing* support - stbi_info support from Jetro Lauha - GIF support from Jean-Marc Lienher - iPhone PNG-extensions from James Brown - warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) - 1.21 fix use of 'stbi_uc' in header (reported by jon blow) - 1.20 added support for Softimage PIC, by Tom Seddon - 1.19 bug in interlaced PNG corruption check (found by ryg) - 1.18 (2008-08-02) - fix a threading bug (local mutable static) - 1.17 support interlaced PNG - 1.16 major bugfix - stbi__convert_format converted one too many pixels - 1.15 initialize some fields for thread safety - 1.14 fix threadsafe conversion bug - header-file-only version (#define STBI_HEADER_FILE_ONLY before including) - 1.13 threadsafe - 1.12 const qualifiers in the API - 1.11 Support installable IDCT, colorspace conversion routines - 1.10 Fixes for 64-bit (don't use "unsigned long") - optimized upsampling by Fabian "ryg" Giesen - 1.09 Fix format-conversion for PSD code (bad global variables!) - 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz - 1.07 attempt to fix C++ warning/errors again - 1.06 attempt to fix C++ warning/errors again - 1.05 fix TGA loading to return correct *comp and use good luminance calc - 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free - 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR - 1.02 support for (subset of) HDR files, float interface for preferred access to them - 1.01 fix bug: possible bug in handling right-side up bmps... not sure - fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all - 1.00 interface to zlib that skips zlib header - 0.99 correct handling of alpha in palette - 0.98 TGA loader by lonesock; dynamically add loaders (untested) - 0.97 jpeg errors on too large a file; also catch another malloc failure - 0.96 fix detection of invalid v value - particleman@mollyrocket forum - 0.95 during header scan, seek to markers in case of padding - 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same - 0.93 handle jpegtran output; verbose errors - 0.92 read 4,8,16,24,32-bit BMP files of several formats - 0.91 output 24-bit Windows 3.0 BMP files - 0.90 fix a few more warnings; bump version number to approach 1.0 - 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd - 0.60 fix compiling as c++ - 0.59 fix warnings: merge Dave Moore's -Wall fixes - 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian - 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available - 0.56 fix bug: zlib uncompressed mode len vs. nlen - 0.55 fix bug: restart_interval not initialized to 0 - 0.54 allow NULL for 'int *comp' - 0.53 fix bug in png 3->4; speedup png decoding - 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments - 0.51 obey req_comp requests, 1-component jpegs return as 1-component, - on 'test' only check type, not whether we support this variant - 0.50 (2006-11-19) - first released version -*/ diff --git a/externals/tinyobjloader/examples/viewer/trackball.cc b/externals/tinyobjloader/examples/viewer/trackball.cc deleted file mode 100644 index 86ff3b3..0000000 --- a/externals/tinyobjloader/examples/viewer/trackball.cc +++ /dev/null @@ -1,292 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#include -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float[4]); - -static void vzero(float *v) { - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -static void vset(float *v, float x, float y, float z) { - v[0] = x; - v[1] = y; - v[2] = z; -} - -static void vsub(const float *src1, const float *src2, float *dst) { - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -static void vcopy(const float *v1, float *v2) { - register int i; - for (i = 0; i < 3; i++) - v2[i] = v1[i]; -} - -static void vcross(const float *v1, const float *v2, float *cross) { - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -static float vlength(const float *v) { - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -static void vscale(float *v, float div) { - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -static void vnormal(float *v) { vscale(v, 1.0 / vlength(v)); } - -static float vdot(const float *v1, const float *v2) { - return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; -} - -static void vadd(const float *src1, const float *src2, float *dst) { - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void trackball(float q[4], float p1x, float p1y, float p2x, float p2y) { - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y)); - vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2, p1, a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1, p2, d); - t = vlength(d) / (2.0 * TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) - t = 1.0; - if (t < -1.0) - t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a, phi, q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void axis_to_quat(float a[3], float phi, float q[4]) { - vnormal(a); - vcopy(a, q); - vscale(q, sin(phi / 2.0)); - q[3] = cos(phi / 2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float tb_project_to_sphere(float r, float x, float y) { - float d, t, z; - - d = sqrt(x * x + y * y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r * r - d * d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t * t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void add_quats(float q1[4], float q2[4], float dest[4]) { - static int count = 0; - float t1[4], t2[4], t3[4]; - float tf[4]; - - vcopy(q1, t1); - vscale(t1, q2[3]); - - vcopy(q2, t2); - vscale(t2, q1[3]); - - vcross(q2, q1, t3); - vadd(t1, t2, tf); - vadd(t3, tf, tf); - tf[3] = q1[3] * q2[3] - vdot(q1, q2); - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void normalize_quat(float q[4]) { - int i; - float mag; - - mag = (q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]); - for (i = 0; i < 4; i++) - q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void build_rotmatrix(float m[4][4], const float q[4]) { - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} diff --git a/externals/tinyobjloader/examples/viewer/trackball.h b/externals/tinyobjloader/examples/viewer/trackball.h deleted file mode 100644 index b1f9437..0000000 --- a/externals/tinyobjloader/examples/viewer/trackball.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -void negate_quat(float *q, float *qn); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void build_rotmatrix(float m[4][4], const float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void axis_to_quat(float a[3], float phi, float q[4]); diff --git a/externals/tinyobjloader/examples/viewer/viewer.cc b/externals/tinyobjloader/examples/viewer/viewer.cc deleted file mode 100644 index bc959c9..0000000 --- a/externals/tinyobjloader/examples/viewer/viewer.cc +++ /dev/null @@ -1,892 +0,0 @@ -// -// Simple .obj viewer(vertex only) -// -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include - -#define TINYOBJLOADER_IMPLEMENTATION -// TINYOBJLOADER_USE_MAPBOX_EARCUT: Enable better triangulation. Requires C++11 -//#define TINYOBJLOADER_USE_MAPBOX_EARCUT -#include "../../tiny_obj_loader.h" - -#include "trackball.h" - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Weverything" -#endif - -#define STB_IMAGE_IMPLEMENTATION -#include "stb_image.h" - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -#ifdef _WIN32 -#ifdef __cplusplus -extern "C" { -#endif -#include - -#ifdef max -#undef max -#endif - -#ifdef min -#undef min -#endif - -#include -#ifdef __cplusplus -} -#endif -#pragma comment(lib, "winmm.lib") -#else -#if defined(__unix__) || defined(__APPLE__) -#include -#else -#include -#endif -#endif - -class timerutil { - public: -#ifdef _WIN32 - typedef DWORD time_t; - - timerutil() { ::timeBeginPeriod(1); } - ~timerutil() { ::timeEndPeriod(1); } - - void start() { t_[0] = ::timeGetTime(); } - void end() { t_[1] = ::timeGetTime(); } - - time_t sec() { return (time_t)((t_[1] - t_[0]) / 1000); } - time_t msec() { return (time_t)((t_[1] - t_[0])); } - time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000); } - time_t current() { return ::timeGetTime(); } - -#else -#if defined(__unix__) || defined(__APPLE__) - typedef unsigned long int time_t; - - void start() { gettimeofday(tv + 0, &tz); } - void end() { gettimeofday(tv + 1, &tz); } - - time_t sec() { return (time_t)(tv[1].tv_sec - tv[0].tv_sec); } - time_t msec() { - return this->sec() * 1000 + - (time_t)((tv[1].tv_usec - tv[0].tv_usec) / 1000); - } - time_t usec() { - return this->sec() * 1000000 + (time_t)(tv[1].tv_usec - tv[0].tv_usec); - } - time_t current() { - struct timeval t; - gettimeofday(&t, NULL); - return (time_t)(t.tv_sec * 1000 + t.tv_usec); - } - -#else // C timer - // using namespace std; - typedef clock_t time_t; - - void start() { t_[0] = clock(); } - void end() { t_[1] = clock(); } - - time_t sec() { return (time_t)((t_[1] - t_[0]) / CLOCKS_PER_SEC); } - time_t msec() { return (time_t)((t_[1] - t_[0]) * 1000 / CLOCKS_PER_SEC); } - time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000000 / CLOCKS_PER_SEC); } - time_t current() { return (time_t)clock(); } - -#endif -#endif - - private: -#ifdef _WIN32 - DWORD t_[2]; -#else -#if defined(__unix__) || defined(__APPLE__) - struct timeval tv[2]; - struct timezone tz; -#else - time_t t_[2]; -#endif -#endif -}; - -typedef struct { - GLuint vb_id; // vertex buffer id - int numTriangles; - size_t material_id; -} DrawObject; - -std::vector gDrawObjects; - -int width = 768; -int height = 768; - -double prevMouseX, prevMouseY; -bool mouseLeftPressed; -bool mouseMiddlePressed; -bool mouseRightPressed; -float curr_quat[4]; -float prev_quat[4]; -float eye[3], lookat[3], up[3]; - -GLFWwindow* window; - -static std::string GetBaseDir(const std::string& filepath) { - if (filepath.find_last_of("/\\") != std::string::npos) - return filepath.substr(0, filepath.find_last_of("/\\")); - return ""; -} - -static bool FileExists(const std::string& abs_filename) { - bool ret; - FILE* fp = fopen(abs_filename.c_str(), "rb"); - if (fp) { - ret = true; - fclose(fp); - } else { - ret = false; - } - - return ret; -} - -static void CheckErrors(std::string desc) { - GLenum e = glGetError(); - if (e != GL_NO_ERROR) { - fprintf(stderr, "OpenGL error in \"%s\": %d (%d)\n", desc.c_str(), e, e); - exit(20); - } -} - -static void CalcNormal(float N[3], float v0[3], float v1[3], float v2[3]) { - float v10[3]; - v10[0] = v1[0] - v0[0]; - v10[1] = v1[1] - v0[1]; - v10[2] = v1[2] - v0[2]; - - float v20[3]; - v20[0] = v2[0] - v0[0]; - v20[1] = v2[1] - v0[1]; - v20[2] = v2[2] - v0[2]; - - N[0] = v10[1] * v20[2] - v10[2] * v20[1]; - N[1] = v10[2] * v20[0] - v10[0] * v20[2]; - N[2] = v10[0] * v20[1] - v10[1] * v20[0]; - - float len2 = N[0] * N[0] + N[1] * N[1] + N[2] * N[2]; - if (len2 > 0.0f) { - float len = sqrtf(len2); - - N[0] /= len; - N[1] /= len; - N[2] /= len; - } -} - -namespace // Local utility functions -{ -struct vec3 { - float v[3]; - vec3() { - v[0] = 0.0f; - v[1] = 0.0f; - v[2] = 0.0f; - } -}; - -void normalizeVector(vec3 &v) { - float len2 = v.v[0] * v.v[0] + v.v[1] * v.v[1] + v.v[2] * v.v[2]; - if (len2 > 0.0f) { - float len = sqrtf(len2); - - v.v[0] /= len; - v.v[1] /= len; - v.v[2] /= len; - } -} - -// Check if `mesh_t` contains smoothing group id. -bool hasSmoothingGroup(const tinyobj::shape_t& shape) -{ - for (size_t i = 0; i < shape.mesh.smoothing_group_ids.size(); i++) { - if (shape.mesh.smoothing_group_ids[i] > 0) { - return true; - } - } - return false; -} - -void computeSmoothingNormals(const tinyobj::attrib_t& attrib, const tinyobj::shape_t& shape, - std::map& smoothVertexNormals) { - smoothVertexNormals.clear(); - std::map::iterator iter; - - for (size_t f = 0; f < shape.mesh.indices.size() / 3; f++) { - // Get the three indexes of the face (all faces are triangular) - tinyobj::index_t idx0 = shape.mesh.indices[3 * f + 0]; - tinyobj::index_t idx1 = shape.mesh.indices[3 * f + 1]; - tinyobj::index_t idx2 = shape.mesh.indices[3 * f + 2]; - - // Get the three vertex indexes and coordinates - int vi[3]; // indexes - float v[3][3]; // coordinates - - for (int k = 0; k < 3; k++) { - vi[0] = idx0.vertex_index; - vi[1] = idx1.vertex_index; - vi[2] = idx2.vertex_index; - assert(vi[0] >= 0); - assert(vi[1] >= 0); - assert(vi[2] >= 0); - - v[0][k] = attrib.vertices[3 * vi[0] + k]; - v[1][k] = attrib.vertices[3 * vi[1] + k]; - v[2][k] = attrib.vertices[3 * vi[2] + k]; - } - - // Compute the normal of the face - float normal[3]; - CalcNormal(normal, v[0], v[1], v[2]); - - // Add the normal to the three vertexes - for (size_t i = 0; i < 3; ++i) { - iter = smoothVertexNormals.find(vi[i]); - if (iter != smoothVertexNormals.end()) { - // add - iter->second.v[0] += normal[0]; - iter->second.v[1] += normal[1]; - iter->second.v[2] += normal[2]; - } else { - smoothVertexNormals[vi[i]].v[0] = normal[0]; - smoothVertexNormals[vi[i]].v[1] = normal[1]; - smoothVertexNormals[vi[i]].v[2] = normal[2]; - } - } - - } // f - - // Normalize the normals, that is, make them unit vectors - for (iter = smoothVertexNormals.begin(); iter != smoothVertexNormals.end(); - iter++) { - normalizeVector(iter->second); - } - -} // computeSmoothingNormals -} // namespace - -static bool LoadObjAndConvert(float bmin[3], float bmax[3], - std::vector* drawObjects, - std::vector& materials, - std::map& textures, - const char* filename) { - tinyobj::attrib_t attrib; - std::vector shapes; - - timerutil tm; - - tm.start(); - - std::string base_dir = GetBaseDir(filename); - if (base_dir.empty()) { - base_dir = "."; - } -#ifdef _WIN32 - base_dir += "\\"; -#else - base_dir += "/"; -#endif - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, filename, - base_dir.c_str()); - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - if (!err.empty()) { - std::cerr << err << std::endl; - } - - tm.end(); - - if (!ret) { - std::cerr << "Failed to load " << filename << std::endl; - return false; - } - - printf("Parsing time: %d [ms]\n", (int)tm.msec()); - - printf("# of vertices = %d\n", (int)(attrib.vertices.size()) / 3); - printf("# of normals = %d\n", (int)(attrib.normals.size()) / 3); - printf("# of texcoords = %d\n", (int)(attrib.texcoords.size()) / 2); - printf("# of materials = %d\n", (int)materials.size()); - printf("# of shapes = %d\n", (int)shapes.size()); - - // Append `default` material - materials.push_back(tinyobj::material_t()); - - for (size_t i = 0; i < materials.size(); i++) { - printf("material[%d].diffuse_texname = %s\n", int(i), - materials[i].diffuse_texname.c_str()); - } - - // Load diffuse textures - { - for (size_t m = 0; m < materials.size(); m++) { - tinyobj::material_t* mp = &materials[m]; - - if (mp->diffuse_texname.length() > 0) { - // Only load the texture if it is not already loaded - if (textures.find(mp->diffuse_texname) == textures.end()) { - GLuint texture_id; - int w, h; - int comp; - - std::string texture_filename = mp->diffuse_texname; - if (!FileExists(texture_filename)) { - // Append base dir. - texture_filename = base_dir + mp->diffuse_texname; - if (!FileExists(texture_filename)) { - std::cerr << "Unable to find file: " << mp->diffuse_texname - << std::endl; - exit(1); - } - } - - unsigned char* image = - stbi_load(texture_filename.c_str(), &w, &h, &comp, STBI_default); - if (!image) { - std::cerr << "Unable to load texture: " << texture_filename - << std::endl; - exit(1); - } - std::cout << "Loaded texture: " << texture_filename << ", w = " << w - << ", h = " << h << ", comp = " << comp << std::endl; - - glGenTextures(1, &texture_id); - glBindTexture(GL_TEXTURE_2D, texture_id); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - if (comp == 3) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, - GL_UNSIGNED_BYTE, image); - } else if (comp == 4) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, - GL_UNSIGNED_BYTE, image); - } else { - assert(0); // TODO - } - glBindTexture(GL_TEXTURE_2D, 0); - stbi_image_free(image); - textures.insert(std::make_pair(mp->diffuse_texname, texture_id)); - } - } - } - } - - bmin[0] = bmin[1] = bmin[2] = std::numeric_limits::max(); - bmax[0] = bmax[1] = bmax[2] = -std::numeric_limits::max(); - - { - for (size_t s = 0; s < shapes.size(); s++) { - DrawObject o; - std::vector buffer; // pos(3float), normal(3float), color(3float) - - // Check for smoothing group and compute smoothing normals - std::map smoothVertexNormals; - if (hasSmoothingGroup(shapes[s]) > 0) { - std::cout << "Compute smoothingNormal for shape [" << s << "]" << std::endl; - computeSmoothingNormals(attrib, shapes[s], smoothVertexNormals); - } - - for (size_t f = 0; f < shapes[s].mesh.indices.size() / 3; f++) { - tinyobj::index_t idx0 = shapes[s].mesh.indices[3 * f + 0]; - tinyobj::index_t idx1 = shapes[s].mesh.indices[3 * f + 1]; - tinyobj::index_t idx2 = shapes[s].mesh.indices[3 * f + 2]; - - int current_material_id = shapes[s].mesh.material_ids[f]; - - if ((current_material_id < 0) || - (current_material_id >= static_cast(materials.size()))) { - // Invaid material ID. Use default material. - current_material_id = - materials.size() - - 1; // Default material is added to the last item in `materials`. - } - // if (current_material_id >= materials.size()) { - // std::cerr << "Invalid material index: " << current_material_id << - // std::endl; - //} - // - float diffuse[3]; - for (size_t i = 0; i < 3; i++) { - diffuse[i] = materials[current_material_id].diffuse[i]; - } - float tc[3][2]; - if (attrib.texcoords.size() > 0) { - if ((idx0.texcoord_index < 0) || (idx1.texcoord_index < 0) || - (idx2.texcoord_index < 0)) { - // face does not contain valid uv index. - tc[0][0] = 0.0f; - tc[0][1] = 0.0f; - tc[1][0] = 0.0f; - tc[1][1] = 0.0f; - tc[2][0] = 0.0f; - tc[2][1] = 0.0f; - } else { - assert(attrib.texcoords.size() > - size_t(2 * idx0.texcoord_index + 1)); - assert(attrib.texcoords.size() > - size_t(2 * idx1.texcoord_index + 1)); - assert(attrib.texcoords.size() > - size_t(2 * idx2.texcoord_index + 1)); - - // Flip Y coord. - tc[0][0] = attrib.texcoords[2 * idx0.texcoord_index]; - tc[0][1] = 1.0f - attrib.texcoords[2 * idx0.texcoord_index + 1]; - tc[1][0] = attrib.texcoords[2 * idx1.texcoord_index]; - tc[1][1] = 1.0f - attrib.texcoords[2 * idx1.texcoord_index + 1]; - tc[2][0] = attrib.texcoords[2 * idx2.texcoord_index]; - tc[2][1] = 1.0f - attrib.texcoords[2 * idx2.texcoord_index + 1]; - } - } else { - tc[0][0] = 0.0f; - tc[0][1] = 0.0f; - tc[1][0] = 0.0f; - tc[1][1] = 0.0f; - tc[2][0] = 0.0f; - tc[2][1] = 0.0f; - } - - float v[3][3]; - for (int k = 0; k < 3; k++) { - int f0 = idx0.vertex_index; - int f1 = idx1.vertex_index; - int f2 = idx2.vertex_index; - assert(f0 >= 0); - assert(f1 >= 0); - assert(f2 >= 0); - - v[0][k] = attrib.vertices[3 * f0 + k]; - v[1][k] = attrib.vertices[3 * f1 + k]; - v[2][k] = attrib.vertices[3 * f2 + k]; - bmin[k] = std::min(v[0][k], bmin[k]); - bmin[k] = std::min(v[1][k], bmin[k]); - bmin[k] = std::min(v[2][k], bmin[k]); - bmax[k] = std::max(v[0][k], bmax[k]); - bmax[k] = std::max(v[1][k], bmax[k]); - bmax[k] = std::max(v[2][k], bmax[k]); - } - - float n[3][3]; - { - bool invalid_normal_index = false; - if (attrib.normals.size() > 0) { - int nf0 = idx0.normal_index; - int nf1 = idx1.normal_index; - int nf2 = idx2.normal_index; - - if ((nf0 < 0) || (nf1 < 0) || (nf2 < 0)) { - // normal index is missing from this face. - invalid_normal_index = true; - } else { - for (int k = 0; k < 3; k++) { - assert(size_t(3 * nf0 + k) < attrib.normals.size()); - assert(size_t(3 * nf1 + k) < attrib.normals.size()); - assert(size_t(3 * nf2 + k) < attrib.normals.size()); - n[0][k] = attrib.normals[3 * nf0 + k]; - n[1][k] = attrib.normals[3 * nf1 + k]; - n[2][k] = attrib.normals[3 * nf2 + k]; - } - } - } else { - invalid_normal_index = true; - } - - if (invalid_normal_index && !smoothVertexNormals.empty()) { - // Use smoothing normals - int f0 = idx0.vertex_index; - int f1 = idx1.vertex_index; - int f2 = idx2.vertex_index; - - if (f0 >= 0 && f1 >= 0 && f2 >= 0) { - n[0][0] = smoothVertexNormals[f0].v[0]; - n[0][1] = smoothVertexNormals[f0].v[1]; - n[0][2] = smoothVertexNormals[f0].v[2]; - - n[1][0] = smoothVertexNormals[f1].v[0]; - n[1][1] = smoothVertexNormals[f1].v[1]; - n[1][2] = smoothVertexNormals[f1].v[2]; - - n[2][0] = smoothVertexNormals[f2].v[0]; - n[2][1] = smoothVertexNormals[f2].v[1]; - n[2][2] = smoothVertexNormals[f2].v[2]; - - invalid_normal_index = false; - } - } - - if (invalid_normal_index) { - // compute geometric normal - CalcNormal(n[0], v[0], v[1], v[2]); - n[1][0] = n[0][0]; - n[1][1] = n[0][1]; - n[1][2] = n[0][2]; - n[2][0] = n[0][0]; - n[2][1] = n[0][1]; - n[2][2] = n[0][2]; - } - } - - for (int k = 0; k < 3; k++) { - buffer.push_back(v[k][0]); - buffer.push_back(v[k][1]); - buffer.push_back(v[k][2]); - buffer.push_back(n[k][0]); - buffer.push_back(n[k][1]); - buffer.push_back(n[k][2]); - // Combine normal and diffuse to get color. - float normal_factor = 0.2; - float diffuse_factor = 1 - normal_factor; - float c[3] = {n[k][0] * normal_factor + diffuse[0] * diffuse_factor, - n[k][1] * normal_factor + diffuse[1] * diffuse_factor, - n[k][2] * normal_factor + diffuse[2] * diffuse_factor}; - float len2 = c[0] * c[0] + c[1] * c[1] + c[2] * c[2]; - if (len2 > 0.0f) { - float len = sqrtf(len2); - - c[0] /= len; - c[1] /= len; - c[2] /= len; - } - buffer.push_back(c[0] * 0.5 + 0.5); - buffer.push_back(c[1] * 0.5 + 0.5); - buffer.push_back(c[2] * 0.5 + 0.5); - - buffer.push_back(tc[k][0]); - buffer.push_back(tc[k][1]); - } - } - - o.vb_id = 0; - o.numTriangles = 0; - - // OpenGL viewer does not support texturing with per-face material. - if (shapes[s].mesh.material_ids.size() > 0 && - shapes[s].mesh.material_ids.size() > s) { - o.material_id = shapes[s].mesh.material_ids[0]; // use the material ID - // of the first face. - } else { - o.material_id = materials.size() - 1; // = ID for default material. - } - printf("shape[%d] material_id %d\n", int(s), int(o.material_id)); - - if (buffer.size() > 0) { - glGenBuffers(1, &o.vb_id); - glBindBuffer(GL_ARRAY_BUFFER, o.vb_id); - glBufferData(GL_ARRAY_BUFFER, buffer.size() * sizeof(float), - &buffer.at(0), GL_STATIC_DRAW); - o.numTriangles = buffer.size() / (3 + 3 + 3 + 2) / - 3; // 3:vtx, 3:normal, 3:col, 2:texcoord - - printf("shape[%d] # of triangles = %d\n", static_cast(s), - o.numTriangles); - } - - drawObjects->push_back(o); - } - } - - printf("bmin = %f, %f, %f\n", bmin[0], bmin[1], bmin[2]); - printf("bmax = %f, %f, %f\n", bmax[0], bmax[1], bmax[2]); - - return true; -} - -static void reshapeFunc(GLFWwindow* window, int w, int h) { - int fb_w, fb_h; - // Get actual framebuffer size. - glfwGetFramebufferSize(window, &fb_w, &fb_h); - - glViewport(0, 0, fb_w, fb_h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0, (float)w / (float)h, 0.01f, 100.0f); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - width = w; - height = h; -} - -static void keyboardFunc(GLFWwindow* window, int key, int scancode, int action, - int mods) { - (void)window; - (void)scancode; - (void)mods; - if (action == GLFW_PRESS || action == GLFW_REPEAT) { - // Move camera - float mv_x = 0, mv_y = 0, mv_z = 0; - if (key == GLFW_KEY_K) - mv_x += 1; - else if (key == GLFW_KEY_J) - mv_x += -1; - else if (key == GLFW_KEY_L) - mv_y += 1; - else if (key == GLFW_KEY_H) - mv_y += -1; - else if (key == GLFW_KEY_P) - mv_z += 1; - else if (key == GLFW_KEY_N) - mv_z += -1; - // camera.move(mv_x * 0.05, mv_y * 0.05, mv_z * 0.05); - // Close window - if (key == GLFW_KEY_Q || key == GLFW_KEY_ESCAPE) - glfwSetWindowShouldClose(window, GL_TRUE); - - // init_frame = true; - } -} - -static void clickFunc(GLFWwindow* window, int button, int action, int mods) { - (void)window; - (void)mods; - if (button == GLFW_MOUSE_BUTTON_LEFT) { - if (action == GLFW_PRESS) { - mouseLeftPressed = true; - trackball(prev_quat, 0.0, 0.0, 0.0, 0.0); - } else if (action == GLFW_RELEASE) { - mouseLeftPressed = false; - } - } - if (button == GLFW_MOUSE_BUTTON_RIGHT) { - if (action == GLFW_PRESS) { - mouseRightPressed = true; - } else if (action == GLFW_RELEASE) { - mouseRightPressed = false; - } - } - if (button == GLFW_MOUSE_BUTTON_MIDDLE) { - if (action == GLFW_PRESS) { - mouseMiddlePressed = true; - } else if (action == GLFW_RELEASE) { - mouseMiddlePressed = false; - } - } -} - -static void motionFunc(GLFWwindow* window, double mouse_x, double mouse_y) { - (void)window; - float rotScale = 1.0f; - float transScale = 2.0f; - - if (mouseLeftPressed) { - trackball(prev_quat, rotScale * (2.0f * prevMouseX - width) / (float)width, - rotScale * (height - 2.0f * prevMouseY) / (float)height, - rotScale * (2.0f * mouse_x - width) / (float)width, - rotScale * (height - 2.0f * mouse_y) / (float)height); - - add_quats(prev_quat, curr_quat, curr_quat); - } else if (mouseMiddlePressed) { - eye[0] -= transScale * (mouse_x - prevMouseX) / (float)width; - lookat[0] -= transScale * (mouse_x - prevMouseX) / (float)width; - eye[1] += transScale * (mouse_y - prevMouseY) / (float)height; - lookat[1] += transScale * (mouse_y - prevMouseY) / (float)height; - } else if (mouseRightPressed) { - eye[2] += transScale * (mouse_y - prevMouseY) / (float)height; - lookat[2] += transScale * (mouse_y - prevMouseY) / (float)height; - } - - // Update mouse point - prevMouseX = mouse_x; - prevMouseY = mouse_y; -} - -static void Draw(const std::vector& drawObjects, - std::vector& materials, - std::map& textures) { - glPolygonMode(GL_FRONT, GL_FILL); - glPolygonMode(GL_BACK, GL_FILL); - - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(1.0, 1.0); - GLsizei stride = (3 + 3 + 3 + 2) * sizeof(float); - for (size_t i = 0; i < drawObjects.size(); i++) { - DrawObject o = drawObjects[i]; - if (o.vb_id < 1) { - continue; - } - - glBindBuffer(GL_ARRAY_BUFFER, o.vb_id); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - glBindTexture(GL_TEXTURE_2D, 0); - if ((o.material_id < materials.size())) { - std::string diffuse_texname = materials[o.material_id].diffuse_texname; - if (textures.find(diffuse_texname) != textures.end()) { - glBindTexture(GL_TEXTURE_2D, textures[diffuse_texname]); - } - } - glVertexPointer(3, GL_FLOAT, stride, (const void*)0); - glNormalPointer(GL_FLOAT, stride, (const void*)(sizeof(float) * 3)); - glColorPointer(3, GL_FLOAT, stride, (const void*)(sizeof(float) * 6)); - glTexCoordPointer(2, GL_FLOAT, stride, (const void*)(sizeof(float) * 9)); - - glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles); - CheckErrors("drawarrays"); - glBindTexture(GL_TEXTURE_2D, 0); - } - - // draw wireframe - glDisable(GL_POLYGON_OFFSET_FILL); - glPolygonMode(GL_FRONT, GL_LINE); - glPolygonMode(GL_BACK, GL_LINE); - - glColor3f(0.0f, 0.0f, 0.4f); - for (size_t i = 0; i < drawObjects.size(); i++) { - DrawObject o = drawObjects[i]; - if (o.vb_id < 1) { - continue; - } - - glBindBuffer(GL_ARRAY_BUFFER, o.vb_id); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glVertexPointer(3, GL_FLOAT, stride, (const void*)0); - glNormalPointer(GL_FLOAT, stride, (const void*)(sizeof(float) * 3)); - glColorPointer(3, GL_FLOAT, stride, (const void*)(sizeof(float) * 6)); - glTexCoordPointer(2, GL_FLOAT, stride, (const void*)(sizeof(float) * 9)); - - glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles); - CheckErrors("drawarrays"); - } -} - -static void Init() { - trackball(curr_quat, 0, 0, 0, 0); - - eye[0] = 0.0f; - eye[1] = 0.0f; - eye[2] = 3.0f; - - lookat[0] = 0.0f; - lookat[1] = 0.0f; - lookat[2] = 0.0f; - - up[0] = 0.0f; - up[1] = 1.0f; - up[2] = 0.0f; -} - -int main(int argc, char** argv) { - if (argc < 2) { - std::cout << "Needs input.obj\n" << std::endl; - return 0; - } - - Init(); - - if (!glfwInit()) { - std::cerr << "Failed to initialize GLFW." << std::endl; - return -1; - } - - window = glfwCreateWindow(width, height, "Obj viewer", NULL, NULL); - if (window == NULL) { - std::cerr << "Failed to open GLFW window. " << std::endl; - glfwTerminate(); - return 1; - } - - glfwMakeContextCurrent(window); - glfwSwapInterval(1); - - // Callback - glfwSetWindowSizeCallback(window, reshapeFunc); - glfwSetKeyCallback(window, keyboardFunc); - glfwSetMouseButtonCallback(window, clickFunc); - glfwSetCursorPosCallback(window, motionFunc); - - glewExperimental = true; - if (glewInit() != GLEW_OK) { - std::cerr << "Failed to initialize GLEW." << std::endl; - return -1; - } - - reshapeFunc(window, width, height); - - float bmin[3], bmax[3]; - std::vector materials; - std::map textures; - if (false == LoadObjAndConvert(bmin, bmax, &gDrawObjects, materials, textures, - argv[1])) { - return -1; - } - - float maxExtent = 0.5f * (bmax[0] - bmin[0]); - if (maxExtent < 0.5f * (bmax[1] - bmin[1])) { - maxExtent = 0.5f * (bmax[1] - bmin[1]); - } - if (maxExtent < 0.5f * (bmax[2] - bmin[2])) { - maxExtent = 0.5f * (bmax[2] - bmin[2]); - } - - while (glfwWindowShouldClose(window) == GL_FALSE) { - glfwPollEvents(); - glClearColor(0.1f, 0.2f, 0.3f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glEnable(GL_DEPTH_TEST); - glEnable(GL_TEXTURE_2D); - - // camera & rotate - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - GLfloat mat[4][4]; - gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], up[0], - up[1], up[2]); - build_rotmatrix(mat, curr_quat); - glMultMatrixf(&mat[0][0]); - - // Fit to -1, 1 - glScalef(1.0f / maxExtent, 1.0f / maxExtent, 1.0f / maxExtent); - - // Centerize object. - glTranslatef(-0.5 * (bmax[0] + bmin[0]), -0.5 * (bmax[1] + bmin[1]), - -0.5 * (bmax[2] + bmin[2])); - - Draw(gDrawObjects, materials, textures); - - glfwSwapBuffers(window); - } - - glfwTerminate(); -} diff --git a/externals/tinyobjloader/examples/voxelize/Makefile b/externals/tinyobjloader/examples/voxelize/Makefile deleted file mode 100644 index 98189d9..0000000 --- a/externals/tinyobjloader/examples/voxelize/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - g++ -o voxelizer main.cc diff --git a/externals/tinyobjloader/examples/voxelize/README.md b/externals/tinyobjloader/examples/voxelize/README.md deleted file mode 100644 index 8a113b6..0000000 --- a/externals/tinyobjloader/examples/voxelize/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Voxelize .obj and export it as also in .obj - -## Third party library - -This example uses https://github.com/karimnaaji/voxelizer, which is licensed under MIT Liense. diff --git a/externals/tinyobjloader/examples/voxelize/main.cc b/externals/tinyobjloader/examples/voxelize/main.cc deleted file mode 100644 index 6f11939..0000000 --- a/externals/tinyobjloader/examples/voxelize/main.cc +++ /dev/null @@ -1,75 +0,0 @@ -#define VOXELIZER_IMPLEMENTATION -#include "voxelizer.h" - -#define TINYOBJLOADER_IMPLEMENTATION -#include "../../tiny_obj_loader.h" - -bool Voxelize(const char* filename, float voxelsizex, float voxelsizey, float voxelsizez, float precision) -{ - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, filename); - - if (!err.empty()) { - printf("err: %s\n", err.c_str()); - } - - if (!ret) { - printf("failed to load : %s\n", filename); - return false; - } - - if (shapes.size() == 0) { - printf("err: # of shapes are zero.\n"); - return false; - } - - // Only use first shape. - { - vx_mesh_t* mesh; - vx_mesh_t* result; - - mesh = vx_mesh_alloc(attrib.vertices.size(), shapes[0].mesh.indices.size()); - - for (size_t f = 0; f < shapes[0].mesh.indices.size(); f++) { - mesh->indices[f] = shapes[0].mesh.indices[f].vertex_index; - } - - for (size_t v = 0; v < attrib.vertices.size() / 3; v++) { - mesh->vertices[v].x = attrib.vertices[3*v+0]; - mesh->vertices[v].y = attrib.vertices[3*v+1]; - mesh->vertices[v].z = attrib.vertices[3*v+2]; - } - - result = vx_voxelize(mesh, voxelsizex, voxelsizey, voxelsizez, precision); - - printf("Number of vertices: %ld\n", result->nvertices); - printf("Number of indices: %ld\n", result->nindices); - } - return true; -} - - -int -main( - int argc, - char** argv) -{ - if (argc < 4) { - printf("Usage: voxelize input.obj voxelsizex voxelsizey voxelsizez precision\n"); - exit(-1); - } - - const char* filename = argv[1]; - float voxelsizex = atof(argv[2]); - float voxelsizey = atof(argv[3]); - float voxelsizez = atof(argv[4]); - float prec = atof(argv[5]); - bool ret = Voxelize(filename, voxelsizex, voxelsizey, voxelsizez, prec); - - return ret ? EXIT_SUCCESS : EXIT_FAILURE; -} - diff --git a/externals/tinyobjloader/examples/voxelize/voxelizer.h b/externals/tinyobjloader/examples/voxelize/voxelizer.h deleted file mode 100644 index 4958695..0000000 --- a/externals/tinyobjloader/examples/voxelize/voxelizer.h +++ /dev/null @@ -1,764 +0,0 @@ -// -// LICENCE: -// The MIT License (MIT) -// -// Copyright (c) 2016 Karim Naaji, karim.naaji@gmail.com -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE -// -// REFERENCES: -// http://matthias-mueller-fischer.ch/publications/tetraederCollision.pdf -// http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/tribox2.txt -// -// HOWTO: -// #define VOXELIZER_IMPLEMENTATION -// #define VOXELIZER_DEBUG // Only if assertions need to be checked -// #include "voxelizer.h" -// -// HISTORY: -// - version 0.9.0: Initial -// -// TODO: -// - Triangle face merging -// - Add colors from input mesh -// - Potential issue with voxel bigger than triangle -// - -#ifndef VOXELIZER_H -#define VOXELIZER_H - -// ------------------------------------------------------------------------------------------------ -// VOXELIZER PUBLIC API -// - -#ifndef VOXELIZER_HELPERS -#include // malloc, calloc, free -#endif - -typedef struct vx_vertex { - union { - float v[3]; - struct { - float x; - float y; - float z; - }; - }; -} vx_vertex_t; - -typedef struct vx_mesh { - vx_vertex_t* vertices; // Contiguous mesh vertices - vx_vertex_t* normals; // Contiguous mesh normals - unsigned int* indices; // Mesh indices - unsigned int* normalindices; // Mesh normal indices - size_t nindices; // The number of normal indices - size_t nvertices; // The number of vertices - size_t nnormals; // The number of normals -} vx_mesh_t; - -vx_mesh_t* vx_voxelize(vx_mesh_t* _mesh, // The input mesh - float voxelsizex, // Voxel size on X-axis - float voxelsizey, // Voxel size on Y-axis - float voxelsizez, // Voxel size on Z-axis - float precision); // A precision factor that reduces "holes" artifact - // usually a precision = voxelsize / 10. works ok. - -void vx_mesh_free(vx_mesh_t* _mesh); -vx_mesh_t* vx_mesh_alloc(int nindices, int nvertices); - -// Voxelizer Helpers, define your own if needed -#ifndef VOXELIZER_HELPERS -#define VOXELIZER_HELPERS 1 -#define VX_MIN(a, b) (a > b ? b : a) -#define VX_MAX(a, b) (a > b ? a : b) -#define VX_FINDMINMAX(x0, x1, x2, min, max) \ - min = max = x0; \ - if (x1 < min) min = x1; \ - if (x1 > max) max = x1; \ - if (x2 < min) min = x2; \ - if (x2 > max) max = x2; -#define VX_CLAMP(v, lo, hi) VX_MAX(lo, VX_MIN(hi, v)) -#define VX_MALLOC(T, N) ((T*) malloc(N * sizeof(T))) -#define VX_FREE(T) free(T) -#define VX_CALLOC(T, N) ((T*) calloc(N * sizeof(T), 1)) -#define VX_SWAP(T, A, B) { T tmp = B; B = A; A = tmp; } -#ifdef VOXELIZER_DEBUG -#define VX_ASSERT(STMT) if (!(STMT)) { *(int *)0 = 0; } -#else -#define VX_ASSERT(STMT) -#endif // VOXELIZER_DEBUG -#endif // VOXELIZER_HELPERS - -// -// END VOXELIZER PUBLIC API -// ------------------------------------------------------------------------------------------------ - -#endif // VOXELIZER_H - -#ifdef VOXELIZER_IMPLEMENTATION - -#include // ceil, fabs & al. -#include // hughh -#include // memcpy - -#define VOXELIZER_EPSILON (0.0000001) -#define VOXELIZER_NORMAL_INDICES_SIZE (6) -#define VOXELIZER_INDICES_SIZE (36) -#define VOXELIZER_HASH_TABLE_SIZE (4096) - -unsigned int vx_voxel_indices[VOXELIZER_INDICES_SIZE] = { - 0, 1, 2, - 0, 2, 3, - 3, 2, 6, - 3, 6, 7, - 0, 7, 4, - 0, 3, 7, - 4, 7, 5, - 7, 6, 5, - 0, 4, 5, - 0, 5, 1, - 1, 5, 6, - 1, 6, 2, -}; - -float vx_normals[18] = { - 0.0, -1.0, 0.0, - 0.0, 1.0, 0.0, - 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, - -1.0, 0.0, 0.0, - 0.0, 0.0, -1.0, -}; - -unsigned int vx_normal_indices[VOXELIZER_NORMAL_INDICES_SIZE] = { - 3, 2, 1, 5, 4, 0, -}; - -typedef struct vx_aabb { - vx_vertex_t min; - vx_vertex_t max; -} vx_aabb_t; - -typedef struct vx_edge { - vx_vertex_t p1; - vx_vertex_t p2; -} vx_edge_t; - -typedef struct vx_triangle { - vx_vertex_t p1; - vx_vertex_t p2; - vx_vertex_t p3; -} vx_triangle_t; - -typedef struct vx_hash_table_node { - struct vx_hash_table_node* next; - struct vx_hash_table_node* prev; - void* data; -} vx_hash_table_node_t; - -typedef struct vx_hash_table { - vx_hash_table_node_t** elements; - size_t size; -} vx_hash_table_t; - -vx_hash_table_t* vx__hash_table_alloc(size_t size) -{ - vx_hash_table_t* table = VX_MALLOC(vx_hash_table_t, 1); - if (!table) { return NULL; } - table->size = size; - table->elements = VX_MALLOC(vx_hash_table_node_t*, size); - if (!table->elements) { return NULL; } - for (size_t i = 0; i < table->size; ++i) { - table->elements[i] = NULL; - } - return table; -} - -void vx__hash_table_free(vx_hash_table_t* table, bool freedata) -{ - for (size_t i = 0; i < table->size; ++i) { - vx_hash_table_node_t* node = table->elements[i]; - - if (node) { - if (node->next) { - while (node->next) { - node = node->next; - if (freedata) { - VX_FREE(node->prev->data); - } - VX_FREE(node->prev); - } - VX_FREE(node); - } else { - VX_FREE(node->data); - VX_FREE(node); - } - } - } - - VX_FREE(table->elements); - VX_FREE(table); -} - -bool vx__hash_table_insert(vx_hash_table_t* table, - size_t hash, - void* data, - bool (*compfunc)(void* d1, void* d2)) -{ - if (!table->elements[hash]) { - table->elements[hash] = VX_MALLOC(vx_hash_table_node_t, 1); - table->elements[hash]->prev = NULL; - table->elements[hash]->next = NULL; - table->elements[hash]->data = data; - } else { - vx_hash_table_node_t* node = table->elements[hash]; - - if (compfunc && compfunc(node->data, data)) { - return false; - } - - while (node->next) { - node = node->next; - if (compfunc && compfunc(node->data, data)) { - return false; - } - } - - vx_hash_table_node_t* nnode = VX_MALLOC(vx_hash_table_node_t, 1); - - nnode->prev = node; - nnode->next = NULL; - nnode->data = data; - node->next = nnode; - } - return true; -} - -void vx_mesh_free(vx_mesh_t* m) -{ - VX_FREE(m->vertices); - m->vertices = NULL; - m->nvertices = 0; - VX_FREE(m->indices); - m->indices = NULL; - m->nindices = 0; - if (m->normals) { VX_FREE(m->normals); } - VX_FREE(m); -} - -vx_mesh_t* vx_mesh_alloc(int nvertices, int nindices) -{ - vx_mesh_t* m = VX_MALLOC(vx_mesh_t, 1); - if (!m) { return NULL; } - m->indices = VX_CALLOC(unsigned int, nindices); - if (!m->indices) { return NULL; } - m->vertices = VX_CALLOC(vx_vertex_t, nvertices); - if (!m->vertices) { return NULL; } - m->normals = NULL; - m->nindices = nindices; - m->nvertices = nvertices; - return m; -} - -float vx__map_to_voxel(float position, float voxelSize, bool min) -{ - float vox = (position + (position < 0.f ? -1.f : 1.f) * voxelSize * 0.5f) / voxelSize; - return (min ? floor(vox) : ceil(vox)) * voxelSize; -} - -vx_vertex_t vx__vertex_cross(vx_vertex_t* v1, vx_vertex_t* v2) -{ - vx_vertex_t cross; - cross.x = v1->y * v2->z - v1->z * v2->y; - cross.y = v1->z * v2->x - v1->x * v2->z; - cross.z = v1->x * v2->y - v1->y * v2->x; - return cross; -} - -bool vx__vertex_equals(vx_vertex_t* v1, vx_vertex_t* v2) { - return fabs(v1->x - v2->x) < VOXELIZER_EPSILON && - fabs(v1->y - v2->y) < VOXELIZER_EPSILON && - fabs(v1->z - v2->z) < VOXELIZER_EPSILON; -} - -bool vx__vertex_comp_func(void* a, void* b) -{ - return vx__vertex_equals((vx_vertex_t*) a, (vx_vertex_t*) b); -} - -void vx__vertex_sub(vx_vertex_t* a, vx_vertex_t* b) -{ - a->x -= b->x; - a->y -= b->y; - a->z -= b->z; -} - -void vx__vertex_add(vx_vertex_t* a, vx_vertex_t* b) -{ - a->x += b->x; - a->y += b->y; - a->z += b->z; -} - -void vx__vertex_multiply(vx_vertex_t* a, float v) -{ - a->x *= v; - a->y *= v; - a->z *= v; -} - -float vx__vertex_dot(vx_vertex_t* v1, vx_vertex_t* v2) -{ - return v1->x * v2->x + v1->y * v2->y + v1->z * v2->z; -} - -int vx__plane_box_overlap(vx_vertex_t* normal, - float d, - vx_vertex_t* halfboxsize) -{ - vx_vertex_t vmin, vmax; - - for (int dim = 0; dim <= 2; dim++) { - if (normal->v[dim] > 0.0f) { - vmin.v[dim] = -halfboxsize->v[dim]; - vmax.v[dim] = halfboxsize->v[dim]; - } else { - vmin.v[dim] = halfboxsize->v[dim]; - vmax.v[dim] = -halfboxsize->v[dim]; - } - } - - if (vx__vertex_dot(normal, &vmin) + d > 0.0f) { - return false; - } - - if (vx__vertex_dot(normal, &vmax) + d >= 0.0f) { - return true; - } - - return false; -} - -#define AXISTEST_X01(a, b, fa, fb) \ - p1 = a * v1.y - b * v1.z; \ - p3 = a * v3.y - b * v3.z; \ - if (p1 < p3) { \ - min = p1; max = p3; \ - } else { \ - min = p3; max = p1; \ - } \ - rad = fa * halfboxsize.y + fb * halfboxsize.z; \ - if (min > rad || max < -rad) { \ - return false; \ - } \ - -#define AXISTEST_X2(a, b, fa, fb) \ - p1 = a * v1.y - b * v1.z; \ - p2 = a * v2.y - b * v2.z; \ - if (p1 < p2) { \ - min = p1; max = p2; \ - } else { \ - min = p2; max = p1; \ - } \ - rad = fa * halfboxsize.y + fb * halfboxsize.z; \ - if (min > rad || max < -rad) { \ - return false; \ - } \ - -#define AXISTEST_Y02(a, b, fa, fb) \ - p1 = -a * v1.x + b * v1.z; \ - p3 = -a * v3.x + b * v3.z; \ - if (p1 < p3) { \ - min = p1; max = p3; \ - } else { \ - min = p3; max = p1; \ - } \ - rad = fa * halfboxsize.x + fb * halfboxsize.z; \ - if (min > rad || max < -rad) { \ - return false; \ - } \ - -#define AXISTEST_Y1(a, b, fa, fb) \ - p1 = -a * v1.x + b * v1.z; \ - p2 = -a * v2.x + b * v2.z; \ - if (p1 < p2) { \ - min = p1; max = p2; \ - } else { \ - min = p2; max = p1; \ - } \ - rad = fa * halfboxsize.x + fb * halfboxsize.z; \ - if (min > rad || max < -rad) { \ - return false; \ - } - -#define AXISTEST_Z12(a, b, fa, fb) \ - p2 = a * v2.x - b * v2.y; \ - p3 = a * v3.x - b * v3.y; \ - if (p3 < p2) { \ - min = p3; max = p2; \ - } else { \ - min = p2; max = p3; \ - } \ - rad = fa * halfboxsize.x + fb * halfboxsize.y; \ - if (min > rad || max < -rad) { \ - return false; \ - } - -#define AXISTEST_Z0(a, b, fa, fb) \ - p1 = a * v1.x - b * v1.y; \ - p2 = a * v2.x - b * v2.y; \ - if (p1 < p2) { \ - min = p1; max = p2; \ - } else { \ - min = p2; max = p1; \ - } \ - rad = fa * halfboxsize.x + fb * halfboxsize.y; \ - if (min > rad || max < -rad) { \ - return false; \ - } - -int vx__triangle_box_overlap(vx_vertex_t boxcenter, - vx_vertex_t halfboxsize, - vx_triangle_t triangle) -{ - vx_vertex_t v1, v2, v3, normal, e1, e2, e3; - float min, max, d, p1, p2, p3, rad, fex, fey, fez; - - v1 = triangle.p1; - v2 = triangle.p2; - v3 = triangle.p3; - - vx__vertex_sub(&v1, &boxcenter); - vx__vertex_sub(&v2, &boxcenter); - vx__vertex_sub(&v3, &boxcenter); - - e1 = v2; - e2 = v3; - e3 = v1; - - vx__vertex_sub(&e1, &v1); - vx__vertex_sub(&e2, &v2); - vx__vertex_sub(&e3, &v3); - - fex = fabs(e1.x); - fey = fabs(e1.y); - fez = fabs(e1.z); - - AXISTEST_X01(e1.z, e1.y, fez, fey); - AXISTEST_Y02(e1.z, e1.x, fez, fex); - AXISTEST_Z12(e1.y, e1.x, fey, fex); - - fex = fabs(e2.x); - fey = fabs(e2.y); - fez = fabs(e2.z); - - AXISTEST_X01(e2.z, e2.y, fez, fey); - AXISTEST_Y02(e2.z, e2.x, fez, fex); - AXISTEST_Z0(e2.y, e2.x, fey, fex); - - fex = fabs(e3.x); - fey = fabs(e3.y); - fez = fabs(e3.z); - - AXISTEST_X2(e3.z, e3.y, fez, fey); - AXISTEST_Y1(e3.z, e3.x, fez, fex); - AXISTEST_Z12(e3.y, e3.x, fey, fex); - - VX_FINDMINMAX(v1.x, v2.x, v3.x, min, max); - if (min > halfboxsize.x || max < -halfboxsize.x) { - return false; - } - - VX_FINDMINMAX(v1.y, v2.y, v3.y, min, max); - if (min > halfboxsize.y || max < -halfboxsize.y) { - return false; - } - - VX_FINDMINMAX(v1.z, v2.z, v3.z, min, max); - if (min > halfboxsize.z || max < -halfboxsize.z) { - return false; - } - - normal = vx__vertex_cross(&e1, &e2); - d = -vx__vertex_dot(&normal, &v1); - - if (!vx__plane_box_overlap(&normal, d, &halfboxsize)) { - return false; - } - - return true; -} - -#undef AXISTEST_X2 -#undef AXISTEST_X01 -#undef AXISTEST_Y1 -#undef AXISTEST_Y02 -#undef AXISTEST_Z0 -#undef AXISTEST_Z12 - -float vx__triangle_area(vx_triangle_t* triangle) { - vx_vertex_t ab = triangle->p2; - vx_vertex_t ac = triangle->p3; - - vx__vertex_sub(&ab, &triangle->p1); - vx__vertex_sub(&ac, &triangle->p1); - - float a0 = ab.y * ac.z - ab.z * ac.y; - float a1 = ab.z * ac.x - ab.x * ac.z; - float a2 = ab.x * ac.y - ab.y * ac.x; - - return sqrtf(powf(a0, 2.f) + powf(a1, 2.f) + powf(a2, 2.f)) * 0.5f; -} - -void vx__aabb_init(vx_aabb_t* aabb) -{ - aabb->max.x = aabb->max.y = aabb->max.z = -INFINITY; - aabb->min.x = aabb->min.y = aabb->min.z = INFINITY; -} - -vx_aabb_t vx__triangle_aabb(vx_triangle_t* triangle) -{ - vx_aabb_t aabb; - - vx__aabb_init(&aabb); - - aabb.max.x = VX_MAX(aabb.max.x, triangle->p1.x); aabb.max.x = VX_MAX(aabb.max.x, - triangle->p2.x); aabb.max.x = VX_MAX(aabb.max.x, triangle->p3.x); - aabb.max.y = VX_MAX(aabb.max.y, triangle->p1.y); aabb.max.y = VX_MAX(aabb.max.y, - triangle->p2.y); aabb.max.y = VX_MAX(aabb.max.y, triangle->p3.y); - aabb.max.z = VX_MAX(aabb.max.z, triangle->p1.z); aabb.max.z = VX_MAX(aabb.max.z, - triangle->p2.z); aabb.max.z = VX_MAX(aabb.max.z, triangle->p3.z); - - aabb.min.x = VX_MIN(aabb.min.x, triangle->p1.x); aabb.min.x = VX_MIN(aabb.min.x, - triangle->p2.x); aabb.min.x = VX_MIN(aabb.min.x, triangle->p3.x); - aabb.min.y = VX_MIN(aabb.min.y, triangle->p1.y); aabb.min.y = VX_MIN(aabb.min.y, - triangle->p2.y); aabb.min.y = VX_MIN(aabb.min.y, triangle->p3.y); - aabb.min.z = VX_MIN(aabb.min.z, triangle->p1.z); aabb.min.z = VX_MIN(aabb.min.z, - triangle->p2.z); aabb.min.z = VX_MIN(aabb.min.z, triangle->p3.z); - - return aabb; -} - -vx_vertex_t vx__aabb_center(vx_aabb_t* a) -{ - vx_vertex_t boxcenter = a->min; - vx__vertex_add(&boxcenter, &a->max); - vx__vertex_multiply(&boxcenter, 0.5f); - - return boxcenter; -} - -vx_vertex_t vx__aabb_half_size(vx_aabb_t* a) -{ - vx_vertex_t size; - - size.x = fabs(a->max.x - a->min.x) * 0.5f; - size.y = fabs(a->max.y - a->min.y) * 0.5f; - size.z = fabs(a->max.z - a->min.z) * 0.5f; - - return size; -} - -vx_aabb_t vx__aabb_merge(vx_aabb_t* a, vx_aabb_t* b) -{ - vx_aabb_t merge; - - merge.min.x = VX_MIN(a->min.x, b->min.x); - merge.min.y = VX_MIN(a->min.y, b->min.y); - merge.min.z = VX_MIN(a->min.z, b->min.z); - - merge.max.x = VX_MAX(a->max.x, b->max.x); - merge.max.y = VX_MAX(a->max.y, b->max.y); - merge.max.z = VX_MAX(a->max.z, b->max.z); - - return merge; -} - -size_t vx__vertex_hash(vx_vertex_t pos, size_t n) -{ - size_t a = (size_t)(pos.x * 73856093); - size_t b = (size_t)(pos.y * 19349663); - size_t c = (size_t)(pos.z * 83492791); - - return (a ^ b ^ c) % n; -} - -void vx__add_voxel(vx_mesh_t* mesh, - vx_vertex_t* pos, - float* vertices) -{ - for (size_t i = 0; i < 8; ++i) { - size_t index = i+mesh->nvertices; - - mesh->vertices[index].x = vertices[i*3+0] + pos->x; - mesh->vertices[index].y = vertices[i*3+1] + pos->y; - mesh->vertices[index].z = vertices[i*3+2] + pos->z; - } - - int j = -1; - for (size_t i = 0; i < VOXELIZER_INDICES_SIZE; ++i) { - if (i % 6 == 0) { - j++; - } - mesh->normalindices[i+mesh->nindices] = vx_normal_indices[j]; - } - - for (size_t i = 0; i < VOXELIZER_INDICES_SIZE; ++i) { - mesh->indices[i+mesh->nindices] = vx_voxel_indices[i] + mesh->nvertices; - } - - mesh->nindices += VOXELIZER_INDICES_SIZE; - mesh->nvertices += 8; -} - -vx_mesh_t* vx_voxelize(vx_mesh_t* m, - float voxelsizex, - float voxelsizey, - float voxelsizez, - float precision) -{ - vx_mesh_t* outmesh = NULL; - vx_hash_table_t* table = NULL; - size_t voxels = 0; - - float halfsizex = voxelsizex * 0.5f; - float halfsizey = voxelsizey * 0.5f; - float halfsizez = voxelsizez * 0.5f; - - table = vx__hash_table_alloc(VOXELIZER_HASH_TABLE_SIZE); - - for (int i = 0; i < m->nindices; i += 3) { - vx_triangle_t triangle; - - VX_ASSERT(m->indices[i+0] < m->nvertices); - VX_ASSERT(m->indices[i+1] < m->nvertices); - VX_ASSERT(m->indices[i+2] < m->nvertices); - - triangle.p1 = m->vertices[m->indices[i+0]]; - triangle.p2 = m->vertices[m->indices[i+1]]; - triangle.p3 = m->vertices[m->indices[i+2]]; - - if (vx__triangle_area(&triangle) < VOXELIZER_EPSILON) { - // triangle with 0 area - continue; - } - - vx_aabb_t aabb = vx__triangle_aabb(&triangle); - - aabb.min.x = vx__map_to_voxel(aabb.min.x, voxelsizex, true); - aabb.min.y = vx__map_to_voxel(aabb.min.y, voxelsizey, true); - aabb.min.z = vx__map_to_voxel(aabb.min.z, voxelsizez, true); - - aabb.max.x = vx__map_to_voxel(aabb.max.x, voxelsizex, false); - aabb.max.y = vx__map_to_voxel(aabb.max.y, voxelsizey, false); - aabb.max.z = vx__map_to_voxel(aabb.max.z, voxelsizez, false); - - for (float x = aabb.min.x; x < aabb.max.x; x += voxelsizex) { - for (float y = aabb.min.y; y < aabb.max.y; y += voxelsizey) { - for (float z = aabb.min.z; z < aabb.max.z; z += voxelsizez) { - vx_aabb_t saabb; - - saabb.min.x = x - halfsizex; - saabb.min.y = y - halfsizey; - saabb.min.z = z - halfsizez; - saabb.max.x = x + halfsizex; - saabb.max.y = y + halfsizey; - saabb.max.z = z + halfsizez; - - vx_vertex_t boxcenter = vx__aabb_center(&saabb); - vx_vertex_t halfsize = vx__aabb_half_size(&saabb); - - // HACK: some holes might appear, this - // precision factor reduces the artifact - halfsize.x += precision; - halfsize.y += precision; - halfsize.z += precision; - - if (vx__triangle_box_overlap(boxcenter, halfsize, triangle)) { - vx_vertex_t* nodedata = VX_MALLOC(vx_vertex_t, 1); - *nodedata = boxcenter; - - size_t hash = vx__vertex_hash(boxcenter, VOXELIZER_HASH_TABLE_SIZE); - - bool insert = vx__hash_table_insert(table, - hash, - nodedata, - vx__vertex_comp_func); - - if (insert) { - voxels++; - } - } - } - } - } - } - - outmesh = VX_MALLOC(vx_mesh_t, 1); - size_t nvertices = voxels * 8; - size_t nindices = voxels * VOXELIZER_INDICES_SIZE; - outmesh->nnormals = VOXELIZER_NORMAL_INDICES_SIZE; - outmesh->vertices = VX_CALLOC(vx_vertex_t, nvertices); - outmesh->normals = VX_CALLOC(vx_vertex_t, 6); - outmesh->indices = VX_CALLOC(unsigned int, nindices); - outmesh->normalindices = VX_CALLOC(unsigned int, nindices); - outmesh->nindices = 0; - outmesh->nvertices = 0; - - memcpy(outmesh->normals, vx_normals, 18 * sizeof(float)); - - float vertices[24] = { - -halfsizex, halfsizey, halfsizez, - -halfsizex, -halfsizey, halfsizez, - halfsizex, -halfsizey, halfsizez, - halfsizex, halfsizey, halfsizez, - -halfsizex, halfsizey, -halfsizez, - -halfsizex, -halfsizey, -halfsizez, - halfsizex, -halfsizey, -halfsizez, - halfsizex, halfsizey, -halfsizez, - }; - - for (size_t i = 0; i < table->size; ++i) { - if (table->elements[i] != NULL) { - vx_hash_table_node_t* node = table->elements[i]; - - if (!node) { - continue; - } - - vx_vertex_t* p = (vx_vertex_t*) node->data; - vx__add_voxel(outmesh, p, vertices); - - while (node->next) { - node = node->next; - p = (vx_vertex_t*) node->data; - vx__add_voxel(outmesh, p, vertices); - } - } - } - - vx__hash_table_free(table, true); - - return outmesh; -} - -#undef VOXELIZER_EPSILON -#undef VOXELIZER_INDICES_SIZE -#undef VOXELIZER_HASH_TABLE_SIZE - -#endif // VX_VOXELIZER_IMPLEMENTATION diff --git a/externals/tinyobjloader/experimental/README.md b/externals/tinyobjloader/experimental/README.md deleted file mode 100644 index a0603af..0000000 --- a/externals/tinyobjloader/experimental/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Experimental code for .obj loader. - -* Multi-threaded optimized parser : tinyobj_loader_opt.h - -## Requirements - -* C++-11 compiler - -## How to build - -``` -$ premak5 gmake -``` - -## Compile options - -* zstd compressed .obj support. `--with-zstd` premake option. -* gzip compressed .obj support. `--with-zlib` premake option. - -## Notes on AMD GPU + Linux - -You may need to link with libdrm(`-ldrm`). - -## Licenses - -* lfpAlloc : MIT license. diff --git a/externals/tinyobjloader/experimental/lfpAlloc/Allocator.hpp b/externals/tinyobjloader/experimental/lfpAlloc/Allocator.hpp deleted file mode 100644 index 4dddaab..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/Allocator.hpp +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef LF_POOL_ALLOCATOR -#define LF_POOL_ALLOCATOR - -#include -#include -#include - -namespace lfpAlloc { -template -class lfpAllocator { -public: - using value_type = T; - using pointer = T*; - using const_pointer = const T*; - using reference = T&; - using const_reference = T const&; - - template - struct rebind { - typedef lfpAllocator other; - }; - - lfpAllocator() {} - - template - lfpAllocator(lfpAllocator&&) noexcept {} - - template - lfpAllocator(const lfpAllocator&) noexcept {} - - T* allocate(std::size_t count) { - if (sizeof(T) * count <= - alignof(std::max_align_t) * NumPools - sizeof(void*)) { - return reinterpret_cast( - dispatcher_.allocate(sizeof(T) * count)); - } else { - return new T[count]; - } - } - - void deallocate(T* p, std::size_t count) noexcept { - if (sizeof(T) * count <= - alignof(std::max_align_t) * NumPools - sizeof(void*)) { - dispatcher_.deallocate(p, sizeof(T) * count); - } else { - delete[] p; - } - } - - // Should not be required, but allocator_traits is not complete in - // gcc 4.9.1 - template - void destroy(U* p) { - p->~U(); - } - - template - void construct(U* p, Args&&... args) { - new (p) U(std::forward(args)...); - } - - template - friend bool operator==(const lfpAllocator&, - const lfpAllocator&) noexcept; - - template - friend class lfpAllocator; - -private: - static PoolDispatcher dispatcher_; -}; - -template -PoolDispatcher lfpAllocator::dispatcher_; - -template -inline bool operator==(const lfpAllocator&, - const lfpAllocator&) noexcept { - return N == M; -} - -template -inline bool operator!=(const lfpAllocator& left, - const lfpAllocator& right) noexcept { - return !(left == right); -} -} - -#endif diff --git a/externals/tinyobjloader/experimental/lfpAlloc/ChunkList.hpp b/externals/tinyobjloader/experimental/lfpAlloc/ChunkList.hpp deleted file mode 100644 index 760c670..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/ChunkList.hpp +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef LF_POOL_ALLOC_CHUNK_LIST -#define LF_POOL_ALLOC_CHUNK_LIST - -#include -#include -#include - -#ifndef LFP_ALLOW_BLOCKING -static_assert(ATOMIC_POINTER_LOCK_FREE == 2, - "Atomic pointer is not lock-free."); -#endif - -namespace lfpAlloc { - -template -struct Cell { - uint8_t val_[Size]; - Cell* next_ = this + 1; -}; - -// For small types (less than the size of void*), no additional -// space is needed, so union val_ with next_ to avoid overhead. -template <> -struct Cell<0> { - Cell() : next_{this + 1} {} - union { - uint8_t val_[sizeof(Cell*)]; - Cell* next_; - }; -}; - -template -struct Chunk { - Chunk() noexcept { - auto& last = memBlock_[AllocationsPerChunk - 1]; - last.next_ = nullptr; - } - Cell memBlock_[AllocationsPerChunk]; -}; - -template -struct Node { - Node() : val_(), next_(nullptr) {} - Node(const T& val) : val_(val), next_(nullptr) {} - T val_; - std::atomic*> next_; -}; - -template -class ChunkList { - static constexpr auto CellSize = - (Size > sizeof(void*)) ? Size - sizeof(void*) : 0; - using Chunk_t = Chunk; - using Cell_t = Cell; - - using ChunkNode = Node; - using CellNode = Node; - -public: - static ChunkList& getInstance() { - static ChunkList c; - return c; - } - - Cell_t* allocateChain() { - CellNode* recentHead = head_.load(); - CellNode* currentNext = nullptr; - do { - // If there are no available chains, allocate a new chunk - if (!recentHead) { - ChunkNode* currentHandle; - - // Make a new node - auto newChunk = new ChunkNode(); - - // Add the chunk to the chain - do { - currentHandle = handle_.load(); - newChunk->next_ = currentHandle; - } while ( - !handle_.compare_exchange_weak(currentHandle, newChunk)); - return &newChunk->val_.memBlock_[0]; - } - - currentNext = recentHead->next_; - } while (!head_.compare_exchange_weak(recentHead, currentNext)); - - auto retnValue = recentHead->val_; - delete recentHead; - return retnValue; - } - - void deallocateChain(Cell_t* newCell) { - if (!newCell) { - return; - } - CellNode* currentHead = head_.load(); - - // Construct a new node to be added to the linked list - CellNode* newHead = new CellNode(newCell); - - // Add the chain to the linked list - do { - newHead->next_.store(currentHead, std::memory_order_release); - } while (!head_.compare_exchange_weak(currentHead, newHead)); - } - -private: - ChunkList() : handle_(nullptr), head_(nullptr) {} - - std::atomic handle_; - std::atomic head_; -}; -} - -#endif diff --git a/externals/tinyobjloader/experimental/lfpAlloc/LICENSE b/externals/tinyobjloader/experimental/lfpAlloc/LICENSE deleted file mode 100644 index b9e2c10..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Adam Schwalm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/externals/tinyobjloader/experimental/lfpAlloc/Pool.hpp b/externals/tinyobjloader/experimental/lfpAlloc/Pool.hpp deleted file mode 100644 index 370dab7..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/Pool.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef LF_POOL_ALLOC_POOL -#define LF_POOL_ALLOC_POOL - -#include -#include - -namespace lfpAlloc { -template -class Pool { - using ChunkList_t = ChunkList; - -public: - static constexpr auto CellSize = - (Size > sizeof(void*)) ? Size - sizeof(void*) : 0; - using Cell_t = Cell; - - Pool() : head_(nullptr) {} - - ~Pool() { ChunkList_t::getInstance().deallocateChain(head_); } - - void* allocate() { - // Head loaded from head_ - Cell_t* currentHead = head_; - Cell_t* next; - - // Out of cells to allocate - if (!currentHead) { - currentHead = ChunkList_t::getInstance().allocateChain(); - } - - next = currentHead->next_; - head_ = next; - return ¤tHead->val_; - } - - void deallocate(void* p) noexcept { - auto newHead = reinterpret_cast(p); - Cell_t* currentHead = head_; - newHead->next_ = currentHead; - head_ = newHead; - } - -private: - Cell_t* head_; -}; -} - -#endif diff --git a/externals/tinyobjloader/experimental/lfpAlloc/PoolDispatcher.hpp b/externals/tinyobjloader/experimental/lfpAlloc/PoolDispatcher.hpp deleted file mode 100644 index e4d1427..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/PoolDispatcher.hpp +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef LF_POOL_DISPATCHER -#define LF_POOL_DISPATCHER - -#include -#include -#include -#include - -#ifndef LFP_ALLOCATIONS_PER_CHUNK -#define LFP_ALLOCATIONS_PER_CHUNK 64 * 100 -#endif - -namespace lfpAlloc { -namespace detail { - -template -struct Pools : Pools {}; - -template -struct Pools<0, Size...> { - using type = std::tuple...>; -}; -} - -template -class PoolDispatcher { -public: - void* allocate(std::size_t size) { return dispatchAllocate<0>(size); } - - void deallocate(void* p, std::size_t size) noexcept { - dispatchDeallocate<0>(p, size); - } - -private: - thread_local static typename detail::Pools::type pools_; - static_assert(NumPools > 0, "Invalid number of pools"); - - template - typename std::enable_if < - Index::type - dispatchAllocate(std::size_t const& requestSize) { - if (requestSize <= std::get(pools_).CellSize) { - return std::get(pools_).allocate(); - } else { - return dispatchAllocate(requestSize); - } - } - - template - typename std::enable_if::type - dispatchAllocate(std::size_t const&) { - assert(false && "Invalid allocation size."); - return nullptr; - } - - template - typename std::enable_if < - Index::type - dispatchDeallocate(void* p, std::size_t const& requestSize) noexcept { - if (requestSize <= std::get(pools_).CellSize) { - std::get(pools_).deallocate(p); - } else { - dispatchDeallocate(p, requestSize); - } - } - - template - typename std::enable_if::type - dispatchDeallocate(void*, std::size_t const&) noexcept { - assert(false && "Invalid deallocation size."); - } -}; - -template -thread_local typename detail::Pools::type - PoolDispatcher::pools_; -} - -#endif diff --git a/externals/tinyobjloader/experimental/lfpAlloc/Utils.hpp b/externals/tinyobjloader/experimental/lfpAlloc/Utils.hpp deleted file mode 100644 index 8740a79..0000000 --- a/externals/tinyobjloader/experimental/lfpAlloc/Utils.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#include - -namespace lfpAlloc { -namespace detail { -template -struct Log { - enum { value = 1 + Log::value }; -}; - -template -struct Log<1, base> { - enum { value = 0 }; -}; - -template -struct Log<0, base> { - enum { value = 0 }; -}; -} -} diff --git a/externals/tinyobjloader/experimental/premake5.lua b/externals/tinyobjloader/experimental/premake5.lua deleted file mode 100644 index 29511e1..0000000 --- a/externals/tinyobjloader/experimental/premake5.lua +++ /dev/null @@ -1,94 +0,0 @@ -newoption { - trigger = "with-zlib", - description = "Build with zlib." -} - -newoption { - trigger = "with-zstd", - description = "Build with ZStandard compression." -} - -newoption { - trigger = "clang", - description = "Use clang compiler." -} - -newoption { - trigger = "asan", - description = "Enable AddressSanitizer(gcc or clang only)." -} - -solution "objview" - -- location ( "build" ) - configurations { "Release", "Debug" } - platforms {"native", "x64", "x32"} - - project "objview" - - kind "ConsoleApp" - language "C++" - files { "viewer.cc", "trackball.cc" } - includedirs { "./" } - includedirs { "../../" } - - flags { "c++11" } - - if _OPTIONS['clang'] then - toolset "clang" - end - - if _OPTIONS['with-zlib'] then - defines { 'ENABLE_ZLIB' } - links { 'z' } - end - - if _OPTIONS['asan'] then - buildoptions { '-fsanitize=address' } - linkoptions { '-fsanitize=address' } - end - - if _OPTIONS['with-zstd'] then - print("with-zstd") - defines { 'ENABLE_ZSTD' } - -- Set path to zstd installed dir. - includedirs { '$$HOME/local/include' } - libdirs { '$$HOME/local/lib' } - links { 'zstd' } - end - - -- Uncomment if you want address sanitizer(gcc/clang only) - --buildoptions { "-fsanitize=address" } - --linkoptions { "-fsanitize=address" } - - configuration { "linux" } - linkoptions { "`pkg-config --libs glfw3`" } - links { "GL", "GLU", "m", "GLEW", "X11", "Xrandr", "Xinerama", "Xi", "Xxf86vm", "Xcursor", "dl" } - linkoptions { "-pthread" } - - configuration { "windows" } - -- Path to GLFW3 - includedirs { '../../../local/glfw-3.2.bin.WIN64/include' } - libdirs { '../../../local/glfw-3.2.bin.WIN64/lib-vc2015' } - -- Path to GLEW - includedirs { '../../../local/glew-1.13.0/include' } - libdirs { '../../../local/glew-1.13.0/lib/Release/x64' } - - links { "glfw3", "glew32", "gdi32", "winmm", "user32", "glu32","opengl32", "kernel32" } - defines { "_CRT_SECURE_NO_WARNINGS" } - defines { "NOMINMAX" } - - configuration { "macosx" } - includedirs { "/usr/local/include" } - buildoptions { "-Wno-deprecated-declarations" } - libdirs { "/usr/local/lib" } - links { "glfw3", "GLEW" } - linkoptions { "-framework OpenGL", "-framework Cocoa", "-framework IOKit", "-framework CoreVideo" } - - configuration "Debug" - defines { "DEBUG" } - flags { "Symbols"} - - configuration "Release" - defines { "NDEBUG" } - flags { "Optimize"} - diff --git a/externals/tinyobjloader/experimental/tinyobj_loader_opt.h b/externals/tinyobjloader/experimental/tinyobj_loader_opt.h deleted file mode 100644 index d2b007d..0000000 --- a/externals/tinyobjloader/experimental/tinyobj_loader_opt.h +++ /dev/null @@ -1,1722 +0,0 @@ -// -// Optimized wavefront .obj loader. -// Requires lfpAlloc and C++11 -// - -/* -The MIT License (MIT) - -Copyright (c) 2012-2017 Syoyo Fujita and many contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ -#ifndef TINOBJ_LOADER_OPT_H_ -#define TINOBJ_LOADER_OPT_H_ - -#ifdef _WIN32 -#define atoll(S) _atoi64(S) -#include -#else -#include -#include -#include -#include -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include // C++11 -#include // C++11 -#include // C++11 - -#include "lfpAlloc/Allocator.hpp" - -namespace tinyobj_opt { - -// ---------------------------------------------------------------------------- -// Small vector class useful for multi-threaded environment. -// -// stack_container.h -// -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This allocator can be used with STL containers to provide a stack buffer -// from which to allocate memory and overflows onto the heap. This stack buffer -// would be allocated on the stack and allows us to avoid heap operations in -// some situations. -// -// STL likes to make copies of allocators, so the allocator itself can't hold -// the data. Instead, we make the creator responsible for creating a -// StackAllocator::Source which contains the data. Copying the allocator -// merely copies the pointer to this shared source, so all allocators created -// based on our allocator will share the same stack buffer. -// -// This stack buffer implementation is very simple. The first allocation that -// fits in the stack buffer will use the stack buffer. Any subsequent -// allocations will not use the stack buffer, even if there is unused room. -// This makes it appropriate for array-like containers, but the caller should -// be sure to reserve() in the container up to the stack buffer size. Otherwise -// the container will allocate a small array which will "use up" the stack -// buffer. -template -class StackAllocator : public std::allocator { - public: - typedef typename std::allocator::pointer pointer; - typedef typename std::allocator::size_type size_type; - - // Backing store for the allocator. The container owner is responsible for - // maintaining this for as long as any containers using this allocator are - // live. - struct Source { - Source() : used_stack_buffer_(false) {} - - // Casts the buffer in its right type. - T *stack_buffer() { return reinterpret_cast(stack_buffer_); } - const T *stack_buffer() const { - return reinterpret_cast(stack_buffer_); - } - - // - // IMPORTANT: Take care to ensure that stack_buffer_ is aligned - // since it is used to mimic an array of T. - // Be careful while declaring any unaligned types (like bool) - // before stack_buffer_. - // - - // The buffer itself. It is not of type T because we don't want the - // constructors and destructors to be automatically called. Define a POD - // buffer of the right size instead. - char stack_buffer_[sizeof(T[stack_capacity])]; - - // Set when the stack buffer is used for an allocation. We do not track - // how much of the buffer is used, only that somebody is using it. - bool used_stack_buffer_; - }; - - // Used by containers when they want to refer to an allocator of type U. - template - struct rebind { - typedef StackAllocator other; - }; - - // For the straight up copy c-tor, we can share storage. - StackAllocator(const StackAllocator &rhs) - : source_(rhs.source_) {} - - // ISO C++ requires the following constructor to be defined, - // and std::vector in VC++2008SP1 Release fails with an error - // in the class _Container_base_aux_alloc_real (from ) - // if the constructor does not exist. - // For this constructor, we cannot share storage; there's - // no guarantee that the Source buffer of Ts is large enough - // for Us. - // TODO(Google): If we were fancy pants, perhaps we could share storage - // iff sizeof(T) == sizeof(U). - template - StackAllocator(const StackAllocator &other) - : source_(NULL) { - (void)other; - } - - explicit StackAllocator(Source *source) : source_(source) {} - - // Actually do the allocation. Use the stack buffer if nobody has used it yet - // and the size requested fits. Otherwise, fall through to the standard - // allocator. - pointer allocate(size_type n, void *hint = 0) { - if (source_ != NULL && !source_->used_stack_buffer_ && - n <= stack_capacity) { - source_->used_stack_buffer_ = true; - return source_->stack_buffer(); - } else { - return std::allocator::allocate(n, hint); - } - } - - // Free: when trying to free the stack buffer, just mark it as free. For - // non-stack-buffer pointers, just fall though to the standard allocator. - void deallocate(pointer p, size_type n) { - if (source_ != NULL && p == source_->stack_buffer()) - source_->used_stack_buffer_ = false; - else - std::allocator::deallocate(p, n); - } - - private: - Source *source_; -}; - -// A wrapper around STL containers that maintains a stack-sized buffer that the -// initial capacity of the vector is based on. Growing the container beyond the -// stack capacity will transparently overflow onto the heap. The container must -// support reserve(). -// -// WATCH OUT: the ContainerType MUST use the proper StackAllocator for this -// type. This object is really intended to be used only internally. You'll want -// to use the wrappers below for different types. -template -class StackContainer { - public: - typedef TContainerType ContainerType; - typedef typename ContainerType::value_type ContainedType; - typedef StackAllocator Allocator; - - // Allocator must be constructed before the container! - StackContainer() : allocator_(&stack_data_), container_(allocator_) { - // Make the container use the stack allocation by reserving our buffer size - // before doing anything else. - container_.reserve(stack_capacity); - } - - // Getters for the actual container. - // - // Danger: any copies of this made using the copy constructor must have - // shorter lifetimes than the source. The copy will share the same allocator - // and therefore the same stack buffer as the original. Use std::copy to - // copy into a "real" container for longer-lived objects. - ContainerType &container() { return container_; } - const ContainerType &container() const { return container_; } - - // Support operator-> to get to the container. This allows nicer syntax like: - // StackContainer<...> foo; - // std::sort(foo->begin(), foo->end()); - ContainerType *operator->() { return &container_; } - const ContainerType *operator->() const { return &container_; } - -#ifdef UNIT_TEST - // Retrieves the stack source so that that unit tests can verify that the - // buffer is being used properly. - const typename Allocator::Source &stack_data() const { return stack_data_; } -#endif - - protected: - typename Allocator::Source stack_data_; - unsigned char pad_[7]; - Allocator allocator_; - ContainerType container_; - - // DISALLOW_EVIL_CONSTRUCTORS(StackContainer); - StackContainer(const StackContainer &); - void operator=(const StackContainer &); -}; - -// StackVector -// -// Example: -// StackVector foo; -// foo->push_back(22); // we have overloaded operator-> -// foo[0] = 10; // as well as operator[] -template -class StackVector - : public StackContainer >, - stack_capacity> { - public: - StackVector() - : StackContainer >, - stack_capacity>() {} - - // We need to put this in STL containers sometimes, which requires a copy - // constructor. We can't call the regular copy constructor because that will - // take the stack buffer from the original. Here, we create an empty object - // and make a stack buffer of its own. - StackVector(const StackVector &other) - : StackContainer >, - stack_capacity>() { - this->container().assign(other->begin(), other->end()); - } - - StackVector &operator=( - const StackVector &other) { - this->container().assign(other->begin(), other->end()); - return *this; - } - - // Vectors are commonly indexed, which isn't very convenient even with - // operator-> (using "->at()" does exception stuff we don't want). - T &operator[](size_t i) { return this->container().operator[](i); } - const T &operator[](size_t i) const { - return this->container().operator[](i); - } -}; - -// ---------------------------------------------------------------------------- - -typedef struct { - std::string name; - - float ambient[3]; - float diffuse[3]; - float specular[3]; - float transmittance[3]; - float emission[3]; - float shininess; - float ior; // index of refraction - float dissolve; // 1 == opaque; 0 == fully transparent - // illumination model (see http://www.fileformat.info/format/material/) - int illum; - - int dummy; // Suppress padding warning. - - std::string ambient_texname; // map_Ka - std::string diffuse_texname; // map_Kd - std::string specular_texname; // map_Ks - std::string specular_highlight_texname; // map_Ns - std::string bump_texname; // map_bump, bump - std::string displacement_texname; // disp - std::string alpha_texname; // map_d - - // PBR extension - // http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr - float roughness; // [0, 1] default 0 - float metallic; // [0, 1] default 0 - float sheen; // [0, 1] default 0 - float clearcoat_thickness; // [0, 1] default 0 - float clearcoat_roughness; // [0, 1] default 0 - float anisotropy; // aniso. [0, 1] default 0 - float anisotropy_rotation; // anisor. [0, 1] default 0 - std::string roughness_texname; // map_Pr - std::string metallic_texname; // map_Pm - std::string sheen_texname; // map_Ps - std::string emissive_texname; // map_Ke - std::string normal_texname; // norm. For normal mapping. - - std::map unknown_parameter; -} material_t; - -typedef struct { - std::string name; // group name or object name. - // Shape's corresponding faces are accessed by attrib.indices[face_offset, - // face_offset + length] NOTE: you'll need to sum up - // attrib.face_num_verts[face_offset, face_offset + length] to find actual - // number of faces. - unsigned int face_offset; - unsigned int length; -} shape_t; - -struct index_t { - int vertex_index, texcoord_index, normal_index; - index_t() : vertex_index(-1), texcoord_index(-1), normal_index(-1) {} - explicit index_t(int idx) - : vertex_index(idx), texcoord_index(idx), normal_index(idx) {} - index_t(int vidx, int vtidx, int vnidx) - : vertex_index(vidx), texcoord_index(vtidx), normal_index(vnidx) {} -}; - -typedef struct { - std::vector > vertices; - std::vector > normals; - std::vector > texcoords; - std::vector > indices; - - // # of vertices for each face. - // 3 for triangle, 4 for qual, ... - // If triangulation is enabled and the original face are quad, - // face_num_verts will be 6(3 + 3) - std::vector > face_num_verts; - - // Per-face material IDs. - std::vector > material_ids; -} attrib_t; - -typedef StackVector ShortString; - -#define IS_SPACE(x) (((x) == ' ') || ((x) == '\t')) -#define IS_DIGIT(x) \ - (static_cast((x) - '0') < static_cast(10)) -#define IS_NEW_LINE(x) (((x) == '\r') || ((x) == '\n') || ((x) == '\0')) - -static inline void skip_space(const char **token) { - while ((*token)[0] == ' ' || (*token)[0] == '\t') { - (*token)++; - } -} - -static inline void skip_space_and_cr(const char **token) { - while ((*token)[0] == ' ' || (*token)[0] == '\t' || (*token)[0] == '\r') { - (*token)++; - } -} - -static inline int until_space(const char *token) { - const char *p = token; - while (p[0] != '\0' && p[0] != ' ' && p[0] != '\t' && p[0] != '\r') { - p++; - } - - return p - token; -} - -static inline int length_until_newline(const char *token, int n) { - int len = 0; - - // Assume token[n-1] = '\0' - for (len = 0; len < n - 1; len++) { - if (token[len] == '\n') { - break; - } - if ((token[len] == '\r') && ((len < (n - 2)) && (token[len + 1] != '\n'))) { - break; - } - } - - return len; -} - -// http://stackoverflow.com/questions/5710091/how-does-atoi-function-in-c-work -static inline int my_atoi(const char *c) { - int value = 0; - int sign = 1; - if (*c == '+' || *c == '-') { - if (*c == '-') sign = -1; - c++; - } - while (((*c) >= '0') && ((*c) <= '9')) { // isdigit(*c) - value *= 10; - value += (int)(*c - '0'); - c++; - } - return value * sign; -} - -// Make index zero-base, and also support relative index. -static inline int fixIndex(int idx, int n) { - if (idx > 0) return idx - 1; - if (idx == 0) return 0; - return n + idx; // negative value = relative -} - -// Parse raw triples: i, i/j/k, i//k, i/j -static index_t parseRawTriple(const char **token) { - index_t vi( - static_cast(0x80000000)); // 0x80000000 = -2147483648 = invalid - - vi.vertex_index = my_atoi((*token)); - while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' && - (*token)[0] != '\t' && (*token)[0] != '\r') { - (*token)++; - } - if ((*token)[0] != '/') { - return vi; - } - (*token)++; - - // i//k - if ((*token)[0] == '/') { - (*token)++; - vi.normal_index = my_atoi((*token)); - while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' && - (*token)[0] != '\t' && (*token)[0] != '\r') { - (*token)++; - } - return vi; - } - - // i/j/k or i/j - vi.texcoord_index = my_atoi((*token)); - while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' && - (*token)[0] != '\t' && (*token)[0] != '\r') { - (*token)++; - } - if ((*token)[0] != '/') { - return vi; - } - - // i/j/k - (*token)++; // skip '/' - vi.normal_index = my_atoi((*token)); - while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' && - (*token)[0] != '\t' && (*token)[0] != '\r') { - (*token)++; - } - return vi; -} - -static inline bool parseString(ShortString *s, const char **token) { - skip_space(token); - size_t e = until_space((*token)); - (*s)->insert((*s)->end(), (*token), (*token) + e); - (*token) += e; - return true; -} - -static inline int parseInt(const char **token) { - skip_space(token); - int i = my_atoi((*token)); - (*token) += until_space((*token)); - return i; -} - -// Tries to parse a floating point number located at s. -// -// s_end should be a location in the string where reading should absolutely -// stop. For example at the end of the string, to prevent buffer overflows. -// -// Parses the following EBNF grammar: -// sign = "+" | "-" ; -// END = ? anything not in digit ? -// digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; -// integer = [sign] , digit , {digit} ; -// decimal = integer , ["." , integer] ; -// float = ( decimal , END ) | ( decimal , ("E" | "e") , integer , END ) ; -// -// Valid strings are for example: -// -0 +3.1417e+2 -0.0E-3 1.0324 -1.41 11e2 -// -// If the parsing is a success, result is set to the parsed value and true -// is returned. -// -// The function is greedy and will parse until any of the following happens: -// - a non-conforming character is encountered. -// - s_end is reached. -// -// The following situations triggers a failure: -// - s >= s_end. -// - parse failure. -// -static bool tryParseDouble(const char *s, const char *s_end, double *result) { - if (s >= s_end) { - return false; - } - - double mantissa = 0.0; - // This exponent is base 2 rather than 10. - // However the exponent we parse is supposed to be one of ten, - // thus we must take care to convert the exponent/and or the - // mantissa to a * 2^E, where a is the mantissa and E is the - // exponent. - // To get the final double we will use ldexp, it requires the - // exponent to be in base 2. - int exponent = 0; - - // NOTE: THESE MUST BE DECLARED HERE SINCE WE ARE NOT ALLOWED - // TO JUMP OVER DEFINITIONS. - char sign = '+'; - char exp_sign = '+'; - char const *curr = s; - - // How many characters were read in a loop. - int read = 0; - // Tells whether a loop terminated due to reaching s_end. - bool end_not_reached = false; - - /* - BEGIN PARSING. - */ - - // Find out what sign we've got. - if (*curr == '+' || *curr == '-') { - sign = *curr; - curr++; - } else if (IS_DIGIT(*curr)) { /* Pass through. */ - } else { - goto fail; - } - - // Read the integer part. - end_not_reached = (curr != s_end); - while (end_not_reached && IS_DIGIT(*curr)) { - mantissa *= 10; - mantissa += static_cast(*curr - 0x30); - curr++; - read++; - end_not_reached = (curr != s_end); - } - - // We must make sure we actually got something. - if (read == 0) goto fail; - // We allow numbers of form "#", "###" etc. - if (!end_not_reached) goto assemble; - - // Read the decimal part. - if (*curr == '.') { - curr++; - read = 1; - end_not_reached = (curr != s_end); - while (end_not_reached && IS_DIGIT(*curr)) { - // pow(10.0, -read) - double frac_value = 1.0; - for (int f = 0; f < read; f++) { - frac_value *= 0.1; - } - mantissa += static_cast(*curr - 0x30) * frac_value; - read++; - curr++; - end_not_reached = (curr != s_end); - } - } else if (*curr == 'e' || *curr == 'E') { - } else { - goto assemble; - } - - if (!end_not_reached) goto assemble; - - // Read the exponent part. - if (*curr == 'e' || *curr == 'E') { - curr++; - // Figure out if a sign is present and if it is. - end_not_reached = (curr != s_end); - if (end_not_reached && (*curr == '+' || *curr == '-')) { - exp_sign = *curr; - curr++; - } else if (IS_DIGIT(*curr)) { /* Pass through. */ - } else { - // Empty E is not allowed. - goto fail; - } - - read = 0; - end_not_reached = (curr != s_end); - while (end_not_reached && IS_DIGIT(*curr)) { - exponent *= 10; - exponent += static_cast(*curr - 0x30); - curr++; - read++; - end_not_reached = (curr != s_end); - } - exponent *= (exp_sign == '+' ? 1 : -1); - if (read == 0) goto fail; - } - -assemble : - *result = (sign == '+' ? 1 : -1) * - (exponent ? std::ldexp(mantissa * std::pow(5.0, exponent), exponent) - : mantissa); - return true; -fail: - return false; -} - -static inline float parseFloat(const char **token) { - skip_space(token); -#ifdef TINY_OBJ_LOADER_OLD_FLOAT_PARSER - float f = static_cast(atof(*token)); - (*token) += strcspn((*token), " \t\r"); -#else - const char *end = (*token) + until_space((*token)); - double val = 0.0; - tryParseDouble((*token), end, &val); - float f = static_cast(val); - (*token) = end; -#endif - return f; -} - -static inline void parseFloat2(float *x, float *y, const char **token) { - (*x) = parseFloat(token); - (*y) = parseFloat(token); -} - -static inline void parseFloat3(float *x, float *y, float *z, - const char **token) { - (*x) = parseFloat(token); - (*y) = parseFloat(token); - (*z) = parseFloat(token); -} - -static void InitMaterial(material_t *material) { - material->name = ""; - material->ambient_texname = ""; - material->diffuse_texname = ""; - material->specular_texname = ""; - material->specular_highlight_texname = ""; - material->bump_texname = ""; - material->displacement_texname = ""; - material->alpha_texname = ""; - for (int i = 0; i < 3; i++) { - material->ambient[i] = 0.f; - material->diffuse[i] = 0.f; - material->specular[i] = 0.f; - material->transmittance[i] = 0.f; - material->emission[i] = 0.f; - } - material->illum = 0; - material->dissolve = 1.f; - material->shininess = 1.f; - material->ior = 1.f; - material->unknown_parameter.clear(); -} - -static void LoadMtl(std::map *material_map, - std::vector *materials, - std::istream *inStream) { - // Create a default material anyway. - material_t material; - InitMaterial(&material); - - size_t maxchars = 8192; // Alloc enough size. - std::vector buf(maxchars); // Alloc enough size. - while (inStream->peek() != -1) { - inStream->getline(&buf[0], static_cast(maxchars)); - - std::string linebuf(&buf[0]); - - // Trim trailing whitespace. - if (linebuf.size() > 0) { - linebuf = linebuf.substr(0, linebuf.find_last_not_of(" \t") + 1); - } - - // Trim newline '\r\n' or '\n' - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\n') - linebuf.erase(linebuf.size() - 1); - } - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\r') - linebuf.erase(linebuf.size() - 1); - } - - // Skip if empty line. - if (linebuf.empty()) { - continue; - } - - // Skip leading space. - const char *token = linebuf.c_str(); - token += strspn(token, " \t"); - - assert(token); - if (token[0] == '\0') continue; // empty line - - if (token[0] == '#') continue; // comment line - - // new mtl - if ((0 == strncmp(token, "newmtl", 6)) && IS_SPACE((token[6]))) { - // flush previous material. - if (!material.name.empty()) { - material_map->insert(std::pair( - material.name, static_cast(materials->size()))); - materials->push_back(material); - } - - // initial temporary material - InitMaterial(&material); - - // set new mtl name - char namebuf[4096]; - token += 7; -#ifdef _MSC_VER - sscanf_s(token, "%s", namebuf, (unsigned)_countof(namebuf)); -#else - sscanf(token, "%s", namebuf); -#endif - material.name = namebuf; - continue; - } - - // ambient - if (token[0] == 'K' && token[1] == 'a' && IS_SPACE((token[2]))) { - token += 2; - float r, g, b; - parseFloat3(&r, &g, &b, &token); - material.ambient[0] = r; - material.ambient[1] = g; - material.ambient[2] = b; - continue; - } - - // diffuse - if (token[0] == 'K' && token[1] == 'd' && IS_SPACE((token[2]))) { - token += 2; - float r, g, b; - parseFloat3(&r, &g, &b, &token); - material.diffuse[0] = r; - material.diffuse[1] = g; - material.diffuse[2] = b; - continue; - } - - // specular - if (token[0] == 'K' && token[1] == 's' && IS_SPACE((token[2]))) { - token += 2; - float r, g, b; - parseFloat3(&r, &g, &b, &token); - material.specular[0] = r; - material.specular[1] = g; - material.specular[2] = b; - continue; - } - - // transmittance - if ((token[0] == 'K' && token[1] == 't' && IS_SPACE((token[2]))) || - (token[0] == 'T' && token[1] == 'f' && IS_SPACE((token[2])))) { - token += 2; - float r, g, b; - parseFloat3(&r, &g, &b, &token); - material.transmittance[0] = r; - material.transmittance[1] = g; - material.transmittance[2] = b; - continue; - } - - // ior(index of refraction) - if (token[0] == 'N' && token[1] == 'i' && IS_SPACE((token[2]))) { - token += 2; - material.ior = parseFloat(&token); - continue; - } - - // emission - if (token[0] == 'K' && token[1] == 'e' && IS_SPACE(token[2])) { - token += 2; - float r, g, b; - parseFloat3(&r, &g, &b, &token); - material.emission[0] = r; - material.emission[1] = g; - material.emission[2] = b; - continue; - } - - // shininess - if (token[0] == 'N' && token[1] == 's' && IS_SPACE(token[2])) { - token += 2; - material.shininess = parseFloat(&token); - continue; - } - - // illum model - if (0 == strncmp(token, "illum", 5) && IS_SPACE(token[5])) { - token += 6; - material.illum = parseInt(&token); - continue; - } - - // dissolve - if ((token[0] == 'd' && IS_SPACE(token[1]))) { - token += 1; - material.dissolve = parseFloat(&token); - continue; - } - - if (token[0] == 'T' && token[1] == 'r' && IS_SPACE(token[2])) { - token += 2; - // Invert value of Tr(assume Tr is in range [0, 1]) - material.dissolve = 1.0f - parseFloat(&token); - continue; - } - - // PBR: roughness - if (token[0] == 'P' && token[1] == 'r' && IS_SPACE(token[2])) { - token += 2; - material.roughness = parseFloat(&token); - continue; - } - - // PBR: metallic - if (token[0] == 'P' && token[1] == 'm' && IS_SPACE(token[2])) { - token += 2; - material.metallic = parseFloat(&token); - continue; - } - - // PBR: sheen - if (token[0] == 'P' && token[1] == 's' && IS_SPACE(token[2])) { - token += 2; - material.sheen = parseFloat(&token); - continue; - } - - // PBR: clearcoat thickness - if (token[0] == 'P' && token[1] == 'c' && IS_SPACE(token[2])) { - token += 2; - material.clearcoat_thickness = parseFloat(&token); - continue; - } - - // PBR: clearcoat roughness - if ((0 == strncmp(token, "Pcr", 3)) && IS_SPACE(token[3])) { - token += 4; - material.clearcoat_roughness = parseFloat(&token); - continue; - } - - // PBR: anisotropy - if ((0 == strncmp(token, "aniso", 5)) && IS_SPACE(token[5])) { - token += 6; - material.anisotropy = parseFloat(&token); - continue; - } - - // PBR: anisotropy rotation - if ((0 == strncmp(token, "anisor", 6)) && IS_SPACE(token[6])) { - token += 7; - material.anisotropy_rotation = parseFloat(&token); - continue; - } - - // ambient texture - if ((0 == strncmp(token, "map_Ka", 6)) && IS_SPACE(token[6])) { - token += 7; - material.ambient_texname = token; - continue; - } - - // diffuse texture - if ((0 == strncmp(token, "map_Kd", 6)) && IS_SPACE(token[6])) { - token += 7; - material.diffuse_texname = token; - continue; - } - - // specular texture - if ((0 == strncmp(token, "map_Ks", 6)) && IS_SPACE(token[6])) { - token += 7; - material.specular_texname = token; - continue; - } - - // specular highlight texture - if ((0 == strncmp(token, "map_Ns", 6)) && IS_SPACE(token[6])) { - token += 7; - material.specular_highlight_texname = token; - continue; - } - - // bump texture - if ((0 == strncmp(token, "map_bump", 8)) && IS_SPACE(token[8])) { - token += 9; - material.bump_texname = token; - continue; - } - - // alpha texture - if ((0 == strncmp(token, "map_d", 5)) && IS_SPACE(token[5])) { - token += 6; - material.alpha_texname = token; - continue; - } - - // bump texture - if ((0 == strncmp(token, "bump", 4)) && IS_SPACE(token[4])) { - token += 5; - material.bump_texname = token; - continue; - } - - // displacement texture - if ((0 == strncmp(token, "disp", 4)) && IS_SPACE(token[4])) { - token += 5; - material.displacement_texname = token; - continue; - } - - // PBR: roughness texture - if ((0 == strncmp(token, "map_Pr", 6)) && IS_SPACE(token[6])) { - token += 7; - material.roughness_texname = token; - continue; - } - - // PBR: metallic texture - if ((0 == strncmp(token, "map_Pm", 6)) && IS_SPACE(token[6])) { - token += 7; - material.metallic_texname = token; - continue; - } - - // PBR: sheen texture - if ((0 == strncmp(token, "map_Ps", 6)) && IS_SPACE(token[6])) { - token += 7; - material.sheen_texname = token; - continue; - } - - // PBR: emissive texture - if ((0 == strncmp(token, "map_Ke", 6)) && IS_SPACE(token[6])) { - token += 7; - material.emissive_texname = token; - continue; - } - - // PBR: normal map texture - if ((0 == strncmp(token, "norm", 4)) && IS_SPACE(token[4])) { - token += 5; - material.normal_texname = token; - continue; - } - - // unknown parameter - const char *_space = strchr(token, ' '); - if (!_space) { - _space = strchr(token, '\t'); - } - if (_space) { - std::ptrdiff_t len = _space - token; - std::string key(token, static_cast(len)); - std::string value = _space + 1; - material.unknown_parameter.insert( - std::pair(key, value)); - } - } - // flush last material. - material_map->insert(std::pair( - material.name, static_cast(materials->size()))); - materials->push_back(material); -} - -typedef enum { - COMMAND_EMPTY, - COMMAND_V, - COMMAND_VN, - COMMAND_VT, - COMMAND_F, - COMMAND_G, - COMMAND_O, - COMMAND_USEMTL, - COMMAND_MTLLIB, - -} CommandType; - -typedef struct { - float vx, vy, vz; - float nx, ny, nz; - float tx, ty; - - // for f - std::vector > f; - // std::vector f; - std::vector > f_num_verts; - - const char *group_name; - unsigned int group_name_len; - const char *object_name; - unsigned int object_name_len; - const char *material_name; - unsigned int material_name_len; - - const char *mtllib_name; - unsigned int mtllib_name_len; - - CommandType type; -} Command; - -struct CommandCount { - size_t num_v; - size_t num_vn; - size_t num_vt; - size_t num_f; - size_t num_indices; - CommandCount() { - num_v = 0; - num_vn = 0; - num_vt = 0; - num_f = 0; - num_indices = 0; - } -}; - -class LoadOption { - public: - LoadOption() : req_num_threads(-1), triangulate(true), verbose(false) {} - - int req_num_threads; - bool triangulate; - bool verbose; -}; - -/// Parse wavefront .obj(.obj string data is expanded to linear char array -/// `buf') -/// -1 to req_num_threads use the number of HW threads in the running system. -bool parseObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, const char *buf, size_t len, - const LoadOption &option); - -} // namespace tinyobj_opt - -#endif // TINOBJ_LOADER_OPT_H_ - -#ifdef TINYOBJ_LOADER_OPT_IMPLEMENTATION - -namespace tinyobj_opt { - -static bool parseLine(Command *command, const char *p, size_t p_len, - bool triangulate = true) { - // @todo { operate directly on pointer `p'. to do that, add range check for - // string operatoion against `p', since `p' is not null-terminated at p[p_len] - // } - char linebuf[4096]; - assert(p_len < 4095); - memcpy(linebuf, p, p_len); - linebuf[p_len] = '\0'; - - const char *token = linebuf; - - command->type = COMMAND_EMPTY; - - // Skip leading space. - skip_space(&token); - - assert(token); - if (token[0] == '\0') { // empty line - return false; - } - - if (token[0] == '#') { // comment line - return false; - } - - // vertex - if (token[0] == 'v' && IS_SPACE((token[1]))) { - token += 2; - float x = 0.0f, y = 0.0f, z = 0.0f; - parseFloat3(&x, &y, &z, &token); - command->vx = x; - command->vy = y; - command->vz = z; - command->type = COMMAND_V; - return true; - } - - // normal - if (token[0] == 'v' && token[1] == 'n' && IS_SPACE((token[2]))) { - token += 3; - float x = 0.0f, y = 0.0f, z = 0.0f; - parseFloat3(&x, &y, &z, &token); - command->nx = x; - command->ny = y; - command->nz = z; - command->type = COMMAND_VN; - return true; - } - - // texcoord - if (token[0] == 'v' && token[1] == 't' && IS_SPACE((token[2]))) { - token += 3; - float x = 0.0f, y = 0.0f; - parseFloat2(&x, &y, &token); - command->tx = x; - command->ty = y; - command->type = COMMAND_VT; - return true; - } - - // face - if (token[0] == 'f' && IS_SPACE((token[1]))) { - token += 2; - skip_space(&token); - - StackVector f; - - while (!IS_NEW_LINE(token[0])) { - index_t vi = parseRawTriple(&token); - skip_space_and_cr(&token); - - f->push_back(vi); - } - - command->type = COMMAND_F; - - if (triangulate) { - index_t i0 = f[0]; - index_t i1(-1); - index_t i2 = f[1]; - - for (size_t k = 2; k < f->size(); k++) { - i1 = i2; - i2 = f[k]; - command->f.emplace_back(i0); - command->f.emplace_back(i1); - command->f.emplace_back(i2); - - command->f_num_verts.emplace_back(3); - } - - } else { - for (size_t k = 0; k < f->size(); k++) { - command->f.emplace_back(f[k]); - } - - command->f_num_verts.emplace_back(f->size()); - } - - return true; - } - - // use mtl - if ((0 == strncmp(token, "usemtl", 6)) && IS_SPACE((token[6]))) { - token += 7; - - // int newMaterialId = -1; - // if (material_map.find(namebuf) != material_map.end()) { - // newMaterialId = material_map[namebuf]; - //} else { - // // { error!! material not found } - //} - - // if (newMaterialId != materialId) { - // materialId = newMaterialId; - //} - - // command->material_name = .insert(command->material_name->end(), namebuf, - // namebuf + strlen(namebuf)); - // command->material_name->push_back('\0'); - skip_space(&token); - command->material_name = p + (token - linebuf); - command->material_name_len = - length_until_newline(token, p_len - (token - linebuf)) + 1; - command->type = COMMAND_USEMTL; - - return true; - } - - // load mtl - if ((0 == strncmp(token, "mtllib", 6)) && IS_SPACE((token[6]))) { - // By specification, `mtllib` should be appear only once in .obj - token += 7; - - skip_space(&token); - command->mtllib_name = p + (token - linebuf); - command->mtllib_name_len = - length_until_newline(token, p_len - (token - linebuf)) + 1; - command->type = COMMAND_MTLLIB; - - return true; - } - - // group name - if (token[0] == 'g' && IS_SPACE((token[1]))) { - // @todo { multiple group name. } - token += 2; - - command->group_name = p + (token - linebuf); - command->group_name_len = - length_until_newline(token, p_len - (token - linebuf)) + 1; - command->type = COMMAND_G; - - return true; - } - - // object name - if (token[0] == 'o' && IS_SPACE((token[1]))) { - // @todo { multiple object name? } - token += 2; - - command->object_name = p + (token - linebuf); - command->object_name_len = - length_until_newline(token, p_len - (token - linebuf)) + 1; - command->type = COMMAND_O; - - return true; - } - - return false; -} - -typedef struct { - size_t pos; - size_t len; -} LineInfo; - -// Idea come from https://github.com/antonmks/nvParse -// 1. mmap file -// 2. find newline(\n, \r\n, \r) and list of line data. -// 3. Do parallel parsing for each line. -// 4. Reconstruct final mesh data structure. - -// Raise # of max threads if you have more CPU cores... -// In 2018, 32 cores are getting common in high-end workstaion PC. -#define kMaxThreads (32) - -static inline bool is_line_ending(const char *p, size_t i, size_t end_i) { - if (p[i] == '\0') return true; - if (p[i] == '\n') return true; // this includes \r\n - if (p[i] == '\r') { - if (((i + 1) < end_i) && (p[i + 1] != '\n')) { // detect only \r case - return true; - } - } - return false; -} - -bool parseObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, const char *buf, size_t len, - const LoadOption &option) { - attrib->vertices.clear(); - attrib->normals.clear(); - attrib->texcoords.clear(); - attrib->indices.clear(); - attrib->face_num_verts.clear(); - attrib->material_ids.clear(); - shapes->clear(); - - if (len < 1) return false; - - auto num_threads = (option.req_num_threads < 0) - ? std::thread::hardware_concurrency() - : option.req_num_threads; - num_threads = - (std::max)(1, (std::min)(static_cast(num_threads), kMaxThreads)); - - if (option.verbose) { - std::cout << "# of threads = " << num_threads << std::endl; - } - - auto t1 = std::chrono::high_resolution_clock::now(); - - std::vector > - line_infos[kMaxThreads]; - for (size_t t = 0; t < static_cast(num_threads); t++) { - // Pre allocate enough memory. len / 128 / num_threads is just a heuristic - // value. - line_infos[t].reserve(len / 128 / num_threads); - } - - std::chrono::duration ms_linedetection; - std::chrono::duration ms_alloc; - std::chrono::duration ms_parse; - std::chrono::duration ms_load_mtl; - std::chrono::duration ms_merge; - std::chrono::duration ms_construct; - - // 1. Find '\n' and create line data. - { - StackVector workers; - - auto start_time = std::chrono::high_resolution_clock::now(); - auto chunk_size = len / num_threads; - - for (size_t t = 0; t < static_cast(num_threads); t++) { - workers->push_back(std::thread([&, t]() { - auto start_idx = (t + 0) * chunk_size; - auto end_idx = (std::min)((t + 1) * chunk_size, len - 1); - if (t == static_cast((num_threads - 1))) { - end_idx = len - 1; - } - - // true if the line currently read must be added to the current line - // info - bool new_line_found = - (t == 0) || is_line_ending(buf, start_idx - 1, end_idx); - - size_t prev_pos = start_idx; - for (size_t i = start_idx; i < end_idx; i++) { - if (is_line_ending(buf, i, end_idx)) { - if (!new_line_found) { - // first linebreak found in (chunk > 0), and a line before this - // linebreak belongs to previous chunk, so skip it. - prev_pos = i + 1; - new_line_found = true; - } else { - LineInfo info; - info.pos = prev_pos; - info.len = i - prev_pos; - - if (info.len > 0) { - line_infos[t].push_back(info); - } - - prev_pos = i + 1; - } - } - } - - // If at least one line started in this chunk, find where it ends in the - // rest of the buffer - if (new_line_found && (t < num_threads) && (buf[end_idx - 1] != '\n')) { - for (size_t i = end_idx; i < len; i++) { - if (is_line_ending(buf, i, len)) { - LineInfo info; - info.pos = prev_pos; - info.len = i - prev_pos; - - if (info.len > 0) { - line_infos[t].push_back(info); - } - - break; - } - } - } - })); - } - - for (size_t t = 0; t < workers->size(); t++) { - workers[t].join(); - } - - auto end_time = std::chrono::high_resolution_clock::now(); - - ms_linedetection = end_time - start_time; - } - - auto line_sum = 0; - for (size_t t = 0; t < num_threads; t++) { - // std::cout << t << ": # of lines = " << line_infos[t].size() << std::endl; - line_sum += line_infos[t].size(); - } - // std::cout << "# of lines = " << line_sum << std::endl; - - std::vector commands[kMaxThreads]; - - // 2. allocate buffer - auto t_alloc_start = std::chrono::high_resolution_clock::now(); - { - for (size_t t = 0; t < num_threads; t++) { - commands[t].reserve(line_infos[t].size()); - } - } - - CommandCount command_count[kMaxThreads]; - // Array index to `mtllib` line. According to wavefront .obj spec, `mtllib' - // should appear only once in .obj. - int mtllib_t_index = -1; - int mtllib_i_index = -1; - - ms_alloc = std::chrono::high_resolution_clock::now() - t_alloc_start; - - // 2. parse each line in parallel. - { - StackVector workers; - auto t_start = std::chrono::high_resolution_clock::now(); - - for (size_t t = 0; t < num_threads; t++) { - workers->push_back(std::thread([&, t]() { - for (size_t i = 0; i < line_infos[t].size(); i++) { - Command command; - bool ret = parseLine(&command, &buf[line_infos[t][i].pos], - line_infos[t][i].len, option.triangulate); - if (ret) { - if (command.type == COMMAND_V) { - command_count[t].num_v++; - } else if (command.type == COMMAND_VN) { - command_count[t].num_vn++; - } else if (command.type == COMMAND_VT) { - command_count[t].num_vt++; - } else if (command.type == COMMAND_F) { - command_count[t].num_f += command.f.size(); - command_count[t].num_indices += command.f_num_verts.size(); - } - - if (command.type == COMMAND_MTLLIB) { - // Save the indices of the `mtllib` command in `commands` to easily find it later - mtllib_t_index = t; - mtllib_i_index = commands[t].size(); - } - - commands[t].emplace_back(std::move(command)); - } - } - })); - } - - for (size_t t = 0; t < workers->size(); t++) { - workers[t].join(); - } - - auto t_end = std::chrono::high_resolution_clock::now(); - - ms_parse = t_end - t_start; - } - - std::map material_map; - - // Load material(if exits) - if (mtllib_i_index >= 0 && mtllib_t_index >= 0 && - commands[mtllib_t_index][mtllib_i_index].mtllib_name && - commands[mtllib_t_index][mtllib_i_index].mtllib_name_len > 0) { - std::string material_filename = - std::string(commands[mtllib_t_index][mtllib_i_index].mtllib_name, - commands[mtllib_t_index][mtllib_i_index].mtllib_name_len); - // std::cout << "mtllib :" << material_filename << std::endl; - - auto t1 = std::chrono::high_resolution_clock::now(); - if (material_filename.back() == '\r') { - material_filename.pop_back(); - } - std::ifstream ifs(material_filename); - if (ifs.good()) { - LoadMtl(&material_map, materials, &ifs); - - // std::cout << "maetrials = " << materials.size() << std::endl; - - ifs.close(); - } - - auto t2 = std::chrono::high_resolution_clock::now(); - - ms_load_mtl = t2 - t1; - } - - auto command_sum = 0; - for (size_t t = 0; t < num_threads; t++) { - // std::cout << t << ": # of commands = " << commands[t].size() << - // std::endl; - command_sum += commands[t].size(); - } - // std::cout << "# of commands = " << command_sum << std::endl; - - size_t num_v = 0; - size_t num_vn = 0; - size_t num_vt = 0; - size_t num_f = 0; - size_t num_indices = 0; - for (size_t t = 0; t < num_threads; t++) { - num_v += command_count[t].num_v; - num_vn += command_count[t].num_vn; - num_vt += command_count[t].num_vt; - num_f += command_count[t].num_f; - num_indices += command_count[t].num_indices; - } - - // std::cout << "# v " << num_v << std::endl; - // std::cout << "# vn " << num_vn << std::endl; - // std::cout << "# vt " << num_vt << std::endl; - // std::cout << "# f " << num_f << std::endl; - - // 4. merge - // @todo { parallelize merge. } - { - auto t_start = std::chrono::high_resolution_clock::now(); - - attrib->vertices.resize(num_v * 3); - attrib->normals.resize(num_vn * 3); - attrib->texcoords.resize(num_vt * 2); - attrib->indices.resize(num_f); - attrib->face_num_verts.resize(num_indices); - attrib->material_ids.resize(num_indices, -1); - - size_t v_offsets[kMaxThreads]; - size_t n_offsets[kMaxThreads]; - size_t t_offsets[kMaxThreads]; - size_t f_offsets[kMaxThreads]; - size_t face_offsets[kMaxThreads]; - - v_offsets[0] = 0; - n_offsets[0] = 0; - t_offsets[0] = 0; - f_offsets[0] = 0; - face_offsets[0] = 0; - - for (size_t t = 1; t < num_threads; t++) { - v_offsets[t] = v_offsets[t - 1] + command_count[t - 1].num_v; - n_offsets[t] = n_offsets[t - 1] + command_count[t - 1].num_vn; - t_offsets[t] = t_offsets[t - 1] + command_count[t - 1].num_vt; - f_offsets[t] = f_offsets[t - 1] + command_count[t - 1].num_f; - face_offsets[t] = face_offsets[t - 1] + command_count[t - 1].num_indices; - } - - StackVector workers; - - for (size_t t = 0; t < num_threads; t++) { - workers->push_back(std::thread([&, t]() { - size_t v_count = v_offsets[t]; - size_t n_count = n_offsets[t]; - size_t t_count = t_offsets[t]; - size_t f_count = f_offsets[t]; - size_t face_count = face_offsets[t]; - - for (size_t i = 0; i < commands[t].size(); i++) { - if (commands[t][i].type == COMMAND_EMPTY) { - continue; - } else if (commands[t][i].type == COMMAND_USEMTL) { - if (commands[t][i].material_name && - commands[t][i].material_name_len > 0 && - // check if there are still faces after this command - face_count < num_indices) { - // Find next face - bool found = false; - size_t i_start = i + 1, t_next, i_next; - for (t_next = t; t_next < num_threads; t_next++) { - for (i_next = i_start; i_next < commands[t_next].size(); - i_next++) { - if (commands[t_next][i_next].type == COMMAND_F) { - found = true; - break; - } - } - if (found) break; - i_start = 0; - } - // Assign material to this face - if (found) { - std::string material_name(commands[t][i].material_name, - commands[t][i].material_name_len); - for (size_t k = 0; - k < commands[t_next][i_next].f_num_verts.size(); k++) { - if (material_map.find(material_name) != material_map.end()) { - attrib->material_ids[face_count + k] = - material_map[material_name]; - } else { - // Assign invalid material ID - // Set a different value than the default, to - // prevent following faces from being assigned a valid - // material - attrib->material_ids[face_count + k] = -2; - } - } - } - } - } else if (commands[t][i].type == COMMAND_V) { - attrib->vertices[3 * v_count + 0] = commands[t][i].vx; - attrib->vertices[3 * v_count + 1] = commands[t][i].vy; - attrib->vertices[3 * v_count + 2] = commands[t][i].vz; - v_count++; - } else if (commands[t][i].type == COMMAND_VN) { - attrib->normals[3 * n_count + 0] = commands[t][i].nx; - attrib->normals[3 * n_count + 1] = commands[t][i].ny; - attrib->normals[3 * n_count + 2] = commands[t][i].nz; - n_count++; - } else if (commands[t][i].type == COMMAND_VT) { - attrib->texcoords[2 * t_count + 0] = commands[t][i].tx; - attrib->texcoords[2 * t_count + 1] = commands[t][i].ty; - t_count++; - } else if (commands[t][i].type == COMMAND_F) { - for (size_t k = 0; k < commands[t][i].f.size(); k++) { - index_t &vi = commands[t][i].f[k]; - int vertex_index = fixIndex(vi.vertex_index, v_count); - int texcoord_index = fixIndex(vi.texcoord_index, t_count); - int normal_index = fixIndex(vi.normal_index, n_count); - attrib->indices[f_count + k] = - index_t(vertex_index, texcoord_index, normal_index); - } - for (size_t k = 0; k < commands[t][i].f_num_verts.size(); k++) { - attrib->face_num_verts[face_count + k] = - commands[t][i].f_num_verts[k]; - } - - f_count += commands[t][i].f.size(); - face_count += commands[t][i].f_num_verts.size(); - } - } - })); - } - - for (size_t t = 0; t < workers->size(); t++) { - workers[t].join(); - } - - // To each face with uninitialized material id, - // assign the material id of the last face preceding it that has one - for (size_t face_count = 1; face_count < num_indices; ++face_count) - if (attrib->material_ids[face_count] == -1) - attrib->material_ids[face_count] = attrib->material_ids[face_count - 1]; - - auto t_end = std::chrono::high_resolution_clock::now(); - ms_merge = t_end - t_start; - } - - auto t4 = std::chrono::high_resolution_clock::now(); - - // 5. Construct shape information. - { - auto t_start = std::chrono::high_resolution_clock::now(); - - // @todo { Can we boost the performance by multi-threaded execution? } - int face_count = 0; - shape_t shape; - shape.face_offset = 0; - shape.length = 0; - int face_prev_offset = 0; - for (size_t t = 0; t < num_threads; t++) { - for (size_t i = 0; i < commands[t].size(); i++) { - if (commands[t][i].type == COMMAND_O || - commands[t][i].type == COMMAND_G) { - std::string name; - if (commands[t][i].type == COMMAND_O) { - name = std::string(commands[t][i].object_name, - commands[t][i].object_name_len); - } else { - name = std::string(commands[t][i].group_name, - commands[t][i].group_name_len); - } - - if (face_count == 0) { - // 'o' or 'g' appears before any 'f' - shape.name = name; - shape.face_offset = face_count; - face_prev_offset = face_count; - } else { - if (shapes->size() == 0) { - // 'o' or 'g' after some 'v' lines. - // create a shape with null name - shape.length = face_count - face_prev_offset; - face_prev_offset = face_count; - - shapes->push_back(shape); - - } else { - if ((face_count - face_prev_offset) > 0) { - // push previous shape - shape.length = face_count - face_prev_offset; - shapes->push_back(shape); - face_prev_offset = face_count; - } - } - - // redefine shape. - shape.name = name; - shape.face_offset = face_count; - shape.length = 0; - } - } - if (commands[t][i].type == COMMAND_F) { - // Consider generation of multiple faces per `f` line by triangulation - face_count += commands[t][i].f_num_verts.size(); - } - } - } - - if ((face_count - face_prev_offset) > 0) { - shape.length = face_count - shape.face_offset; - if (shape.length > 0) { - shapes->push_back(shape); - } - } else { - // Guess no 'v' line occurrence after 'o' or 'g', so discards current - // shape information. - } - - auto t_end = std::chrono::high_resolution_clock::now(); - - ms_construct = t_end - t_start; - } - - std::chrono::duration ms_total = t4 - t1; - if (option.verbose) { - std::cout << "total parsing time: " << ms_total.count() << " ms\n"; - std::cout << " line detection : " << ms_linedetection.count() << " ms\n"; - std::cout << " alloc buf : " << ms_alloc.count() << " ms\n"; - std::cout << " parse : " << ms_parse.count() << " ms\n"; - std::cout << " merge : " << ms_merge.count() << " ms\n"; - std::cout << " construct : " << ms_construct.count() << " ms\n"; - std::cout << " mtl load : " << ms_load_mtl.count() << " ms\n"; - std::cout << "# of vertices = " << attrib->vertices.size() << std::endl; - std::cout << "# of normals = " << attrib->normals.size() << std::endl; - std::cout << "# of texcoords = " << attrib->texcoords.size() << std::endl; - std::cout << "# of face indices = " << attrib->indices.size() << std::endl; - std::cout << "# of indices = " << attrib->material_ids.size() << std::endl; - std::cout << "# of shapes = " << shapes->size() << std::endl; - } - - return true; -} - -} // namespace tinyobj_opt - -#endif // TINYOBJ_LOADER_OPT_IMPLEMENTATION diff --git a/externals/tinyobjloader/experimental/trackball.cc b/externals/tinyobjloader/experimental/trackball.cc deleted file mode 100644 index 27642e8..0000000 --- a/externals/tinyobjloader/experimental/trackball.cc +++ /dev/null @@ -1,292 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#include -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float[4]); - -static void vzero(float *v) { - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -static void vset(float *v, float x, float y, float z) { - v[0] = x; - v[1] = y; - v[2] = z; -} - -static void vsub(const float *src1, const float *src2, float *dst) { - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -static void vcopy(const float *v1, float *v2) { - int i; - for (i = 0; i < 3; i++) - v2[i] = v1[i]; -} - -static void vcross(const float *v1, const float *v2, float *cross) { - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -static float vlength(const float *v) { - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -static void vscale(float *v, float div) { - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -static void vnormal(float *v) { vscale(v, 1.0 / vlength(v)); } - -static float vdot(const float *v1, const float *v2) { - return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; -} - -static void vadd(const float *src1, const float *src2, float *dst) { - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void trackball(float q[4], float p1x, float p1y, float p2x, float p2y) { - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y)); - vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2, p1, a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1, p2, d); - t = vlength(d) / (2.0 * TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) - t = 1.0; - if (t < -1.0) - t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a, phi, q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void axis_to_quat(float a[3], float phi, float q[4]) { - vnormal(a); - vcopy(a, q); - vscale(q, sin(phi / 2.0)); - q[3] = cos(phi / 2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float tb_project_to_sphere(float r, float x, float y) { - float d, t, z; - - d = sqrt(x * x + y * y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r * r - d * d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t * t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void add_quats(float q1[4], float q2[4], float dest[4]) { - static int count = 0; - float t1[4], t2[4], t3[4]; - float tf[4]; - - vcopy(q1, t1); - vscale(t1, q2[3]); - - vcopy(q2, t2); - vscale(t2, q1[3]); - - vcross(q2, q1, t3); - vadd(t1, t2, tf); - vadd(t3, tf, tf); - tf[3] = q1[3] * q2[3] - vdot(q1, q2); - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void normalize_quat(float q[4]) { - int i; - float mag; - - mag = (q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]); - for (i = 0; i < 4; i++) - q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void build_rotmatrix(float m[4][4], const float q[4]) { - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} diff --git a/externals/tinyobjloader/experimental/trackball.h b/externals/tinyobjloader/experimental/trackball.h deleted file mode 100644 index b1f9437..0000000 --- a/externals/tinyobjloader/experimental/trackball.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -void negate_quat(float *q, float *qn); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void build_rotmatrix(float m[4][4], const float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void axis_to_quat(float a[3], float phi, float q[4]); diff --git a/externals/tinyobjloader/experimental/viewer.cc b/externals/tinyobjloader/experimental/viewer.cc deleted file mode 100644 index 4886b78..0000000 --- a/externals/tinyobjloader/experimental/viewer.cc +++ /dev/null @@ -1,748 +0,0 @@ -// -// Simple .obj viewer(vertex only) -// -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(ENABLE_ZLIB) -#include -#endif - -#if defined(ENABLE_ZSTD) -#include -#endif - -#include - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include - -#include "trackball.h" - -#define TINYOBJ_LOADER_OPT_IMPLEMENTATION -#include "tinyobj_loader_opt.h" - -typedef struct { - GLuint vb; // vertex buffer - int numTriangles; -} DrawObject; - -std::vector gDrawObjects; - -int width = 768; -int height = 768; - -double prevMouseX, prevMouseY; -bool mouseLeftPressed; -bool mouseMiddlePressed; -bool mouseRightPressed; -float curr_quat[4]; -float prev_quat[4]; -float eye[3], lookat[3], up[3]; - -GLFWwindow* window; - -void CheckErrors(std::string desc) { - GLenum e = glGetError(); - if (e != GL_NO_ERROR) { - fprintf(stderr, "OpenGL error in \"%s\": %d (%d)\n", desc.c_str(), e, e); - exit(20); - } -} - -void CalcNormal(float N[3], float v0[3], float v1[3], float v2[3]) { - float v10[3]; - v10[0] = v1[0] - v0[0]; - v10[1] = v1[1] - v0[1]; - v10[2] = v1[2] - v0[2]; - - float v20[3]; - v20[0] = v2[0] - v0[0]; - v20[1] = v2[1] - v0[1]; - v20[2] = v2[2] - v0[2]; - - N[0] = v20[1] * v10[2] - v20[2] * v10[1]; - N[1] = v20[2] * v10[0] - v20[0] * v10[2]; - N[2] = v20[0] * v10[1] - v20[1] * v10[0]; - - float len2 = N[0] * N[0] + N[1] * N[1] + N[2] * N[2]; - if (len2 > 0.0f) { - float len = sqrtf(len2); - - N[0] /= len; - N[1] /= len; - } -} - -const char *mmap_file(size_t *len, const char* filename) -{ - (*len) = 0; -#ifdef _WIN32 - HANDLE file = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); - assert(file != INVALID_HANDLE_VALUE); - - HANDLE fileMapping = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL); - assert(fileMapping != INVALID_HANDLE_VALUE); - - LPVOID fileMapView = MapViewOfFile(fileMapping, FILE_MAP_READ, 0, 0, 0); - auto fileMapViewChar = (const char*)fileMapView; - assert(fileMapView != NULL); - - LARGE_INTEGER fileSize; - fileSize.QuadPart = 0; - GetFileSizeEx(file, &fileSize); - - (*len) = static_cast(fileSize.QuadPart); - return fileMapViewChar; - -#else - - FILE* f = fopen(filename, "rb" ); - if (!f) { - fprintf(stderr, "Failed to open file : %s\n", filename); - return nullptr; - } - fseek(f, 0, SEEK_END); - long fileSize = ftell(f); - fclose(f); - - if (fileSize < 16) { - fprintf(stderr, "Empty or invalid .obj : %s\n", filename); - return nullptr; - } - - struct stat sb; - char *p; - int fd; - - fd = open (filename, O_RDONLY); - if (fd == -1) { - perror ("open"); - return nullptr; - } - - if (fstat (fd, &sb) == -1) { - perror ("fstat"); - return nullptr; - } - - if (!S_ISREG (sb.st_mode)) { - fprintf (stderr, "%s is not a file\n", filename); - return nullptr; - } - - p = (char*)mmap (0, fileSize, PROT_READ, MAP_SHARED, fd, 0); - - if (p == MAP_FAILED) { - perror ("mmap"); - return nullptr; - } - - if (close (fd) == -1) { - perror ("close"); - return nullptr; - } - - (*len) = fileSize; - - return p; - -#endif -} - -bool gz_load(std::vector* buf, const char* filename) -{ -#ifdef ENABLE_ZLIB - gzFile file; - file = gzopen (filename, "r"); - if (! file) { - fprintf (stderr, "gzopen of '%s' failed: %s.\n", filename, - strerror (errno)); - exit (EXIT_FAILURE); - return false; - } - while (1) { - int err; - int bytes_read; - unsigned char buffer[1024]; - bytes_read = gzread (file, buffer, 1024); - buf->insert(buf->end(), buffer, buffer + 1024); - //printf ("%s", buffer); - if (bytes_read < 1024) { - if (gzeof (file)) { - break; - } - else { - const char * error_string; - error_string = gzerror (file, & err); - if (err) { - fprintf (stderr, "Error: %s.\n", error_string); - exit (EXIT_FAILURE); - return false; - } - } - } - } - gzclose (file); - return true; -#else - return false; -#endif -} - -#ifdef ENABLE_ZSTD -static off_t fsize_X(const char *filename) -{ - struct stat st; - if (stat(filename, &st) == 0) return st.st_size; - /* error */ - printf("stat: %s : %s \n", filename, strerror(errno)); - exit(1); -} - -static FILE* fopen_X(const char *filename, const char *instruction) -{ - FILE* const inFile = fopen(filename, instruction); - if (inFile) return inFile; - /* error */ - printf("fopen: %s : %s \n", filename, strerror(errno)); - exit(2); -} - -static void* malloc_X(size_t size) -{ - void* const buff = malloc(size); - if (buff) return buff; - /* error */ - printf("malloc: %s \n", strerror(errno)); - exit(3); -} -#endif - -bool zstd_load(std::vector* buf, const char* filename) -{ -#ifdef ENABLE_ZSTD - off_t const buffSize = fsize_X(filename); - FILE* const inFile = fopen_X(filename, "rb"); - void* const buffer = malloc_X(buffSize); - size_t const readSize = fread(buffer, 1, buffSize, inFile); - if (readSize != (size_t)buffSize) { - printf("fread: %s : %s \n", filename, strerror(errno)); - exit(4); - } - fclose(inFile); - - unsigned long long const rSize = ZSTD_getDecompressedSize(buffer, buffSize); - if (rSize==0) { - printf("%s : original size unknown \n", filename); - exit(5); - } - - buf->resize(rSize); - - size_t const dSize = ZSTD_decompress(buf->data(), rSize, buffer, buffSize); - - if (dSize != rSize) { - printf("error decoding %s : %s \n", filename, ZSTD_getErrorName(dSize)); - exit(7); - } - - free(buffer); - - return true; -#else - return false; -#endif -} - -const char* get_file_data(size_t *len, const char* filename) -{ - - const char *ext = strrchr(filename, '.'); - - size_t data_len = 0; - const char* data = nullptr; - - if (strcmp(ext, ".gz") == 0) { - // gzipped data. - - std::vector buf; - bool ret = gz_load(&buf, filename); - - if (ret) { - char *p = static_cast(malloc(buf.size() + 1)); // @fixme { implement deleter } - memcpy(p, &buf.at(0), buf.size()); - p[buf.size()] = '\0'; - data = p; - data_len = buf.size(); - } - - } else if (strcmp(ext, ".zst") == 0) { - printf("zstd\n"); - // Zstandard data. - - std::vector buf; - bool ret = zstd_load(&buf, filename); - - if (ret) { - char *p = static_cast(malloc(buf.size() + 1)); // @fixme { implement deleter } - memcpy(p, &buf.at(0), buf.size()); - p[buf.size()] = '\0'; - data = p; - data_len = buf.size(); - } - } else { - - data = mmap_file(&data_len, filename); - - } - - (*len) = data_len; - return data; -} - - -bool LoadObjAndConvert(float bmin[3], float bmax[3], const char* filename, int num_threads, bool verbose) -{ - tinyobj_opt::attrib_t attrib; - std::vector shapes; - std::vector materials; - - auto load_t_begin = std::chrono::high_resolution_clock::now(); - size_t data_len = 0; - const char* data = get_file_data(&data_len, filename); - if (data == nullptr) { - printf("failed to load file\n"); - exit(-1); - return false; - } - auto load_t_end = std::chrono::high_resolution_clock::now(); - std::chrono::duration load_ms = load_t_end - load_t_begin; - if (verbose) { - std::cout << "filesize: " << data_len << std::endl; - std::cout << "load time: " << load_ms.count() << " [msecs]" << std::endl; - } - - - tinyobj_opt::LoadOption option; - option.req_num_threads = num_threads; - option.verbose = verbose; - bool ret = parseObj(&attrib, &shapes, &materials, data, data_len, option); - - if (!ret) { - std::cerr << "Failed to parse .obj" << std::endl; - return false; - } - bmin[0] = bmin[1] = bmin[2] = std::numeric_limits::max(); - bmax[0] = bmax[1] = bmax[2] = -std::numeric_limits::max(); - - //std::cout << "vertices.size() = " << attrib.vertices.size() << std::endl; - //std::cout << "normals.size() = " << attrib.normals.size() << std::endl; - - { - DrawObject o; - std::vector vb; // pos(3float), normal(3float), color(3float) - size_t face_offset = 0; - for (size_t v = 0; v < attrib.face_num_verts.size(); v++) { - assert(attrib.face_num_verts[v] % 3 == 0); // assume all triangle face(multiple of 3). - for (size_t f = 0; f < attrib.face_num_verts[v] / 3; f++) { - tinyobj_opt::index_t idx0 = attrib.indices[face_offset+3*f+0]; - tinyobj_opt::index_t idx1 = attrib.indices[face_offset+3*f+1]; - tinyobj_opt::index_t idx2 = attrib.indices[face_offset+3*f+2]; - - float v[3][3]; - for (int k = 0; k < 3; k++) { - int f0 = idx0.vertex_index; - int f1 = idx1.vertex_index; - int f2 = idx2.vertex_index; - assert(f0 >= 0); - assert(f1 >= 0); - assert(f2 >= 0); - - v[0][k] = attrib.vertices[3*f0+k]; - v[1][k] = attrib.vertices[3*f1+k]; - v[2][k] = attrib.vertices[3*f2+k]; - bmin[k] = std::min(v[0][k], bmin[k]); - bmin[k] = std::min(v[1][k], bmin[k]); - bmin[k] = std::min(v[2][k], bmin[k]); - bmax[k] = std::max(v[0][k], bmax[k]); - bmax[k] = std::max(v[1][k], bmax[k]); - bmax[k] = std::max(v[2][k], bmax[k]); - } - - float n[3][3]; - - if (attrib.normals.size() > 0) { - int nf0 = idx0.normal_index; - int nf1 = idx1.normal_index; - int nf2 = idx2.normal_index; - - if (nf0 >= 0 && nf1 >= 0 && nf2 >= 0) { - assert(3*nf0+2 < attrib.normals.size()); - assert(3*nf1+2 < attrib.normals.size()); - assert(3*nf2+2 < attrib.normals.size()); - for (int k = 0; k < 3; k++) { - n[0][k] = attrib.normals[3*nf0+k]; - n[1][k] = attrib.normals[3*nf1+k]; - n[2][k] = attrib.normals[3*nf2+k]; - } - } else { - // compute geometric normal - CalcNormal(n[0], v[0], v[1], v[2]); - n[1][0] = n[0][0]; n[1][1] = n[0][1]; n[1][2] = n[0][2]; - n[2][0] = n[0][0]; n[2][1] = n[0][1]; n[2][2] = n[0][2]; - } - } else { - // compute geometric normal - CalcNormal(n[0], v[0], v[1], v[2]); - n[1][0] = n[0][0]; n[1][1] = n[0][1]; n[1][2] = n[0][2]; - n[2][0] = n[0][0]; n[2][1] = n[0][1]; n[2][2] = n[0][2]; - } - - for (int k = 0; k < 3; k++) { - vb.push_back(v[k][0]); - vb.push_back(v[k][1]); - vb.push_back(v[k][2]); - vb.push_back(n[k][0]); - vb.push_back(n[k][1]); - vb.push_back(n[k][2]); - // Use normal as color. - float c[3] = {n[k][0], n[k][1], n[k][2]}; - float len2 = c[0] * c[0] + c[1] * c[1] + c[2] * c[2]; - if (len2 > 1.0e-6f) { - float len = sqrtf(len2); - - c[0] /= len; - c[1] /= len; - c[2] /= len; - } - vb.push_back(c[0] * 0.5 + 0.5); - vb.push_back(c[1] * 0.5 + 0.5); - vb.push_back(c[2] * 0.5 + 0.5); - } - } - face_offset += attrib.face_num_verts[v]; - } - - o.vb = 0; - o.numTriangles = 0; - if (vb.size() > 0) { - glGenBuffers(1, &o.vb); - glBindBuffer(GL_ARRAY_BUFFER, o.vb); - glBufferData(GL_ARRAY_BUFFER, vb.size() * sizeof(float), &vb.at(0), GL_STATIC_DRAW); - o.numTriangles = vb.size() / 9 / 3; - } - - gDrawObjects.push_back(o); - } - - printf("bmin = %f, %f, %f\n", bmin[0], bmin[1], bmin[2]); - printf("bmax = %f, %f, %f\n", bmax[0], bmax[1], bmax[2]); - - return true; -} - -void reshapeFunc(GLFWwindow* window, int w, int h) -{ - (void)window; - // for retinal display. - int fb_w, fb_h; - glfwGetFramebufferSize(window, &fb_w, &fb_h); - - glViewport(0, 0, fb_w, fb_h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0, (float)w / (float)h, 0.01f, 100.0f); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - width = w; - height = h; -} - -void keyboardFunc(GLFWwindow *window, int key, int scancode, int action, int mods) { - (void)window; - (void)scancode; - (void)mods; - if(action == GLFW_PRESS || action == GLFW_REPEAT){ - // Move camera - float mv_x = 0, mv_y = 0, mv_z = 0; - if(key == GLFW_KEY_K) mv_x += 1; - else if(key == GLFW_KEY_J) mv_x += -1; - else if(key == GLFW_KEY_L) mv_y += 1; - else if(key == GLFW_KEY_H) mv_y += -1; - else if(key == GLFW_KEY_P) mv_z += 1; - else if(key == GLFW_KEY_N) mv_z += -1; - //camera.move(mv_x * 0.05, mv_y * 0.05, mv_z * 0.05); - // Close window - if(key == GLFW_KEY_Q || key == GLFW_KEY_ESCAPE) glfwSetWindowShouldClose(window, GL_TRUE); - - //init_frame = true; - } -} - -void clickFunc(GLFWwindow* window, int button, int action, int mods){ - (void)window; - (void)mods; - if(button == GLFW_MOUSE_BUTTON_LEFT){ - if(action == GLFW_PRESS){ - mouseLeftPressed = true; - trackball(prev_quat, 0.0, 0.0, 0.0, 0.0); - } else if(action == GLFW_RELEASE){ - mouseLeftPressed = false; - } - } - if(button == GLFW_MOUSE_BUTTON_RIGHT){ - if(action == GLFW_PRESS){ - mouseRightPressed = true; - } else if(action == GLFW_RELEASE){ - mouseRightPressed = false; - } - } - if(button == GLFW_MOUSE_BUTTON_MIDDLE){ - if(action == GLFW_PRESS){ - mouseMiddlePressed = true; - } else if(action == GLFW_RELEASE){ - mouseMiddlePressed = false; - } - } -} - -void motionFunc(GLFWwindow* window, double mouse_x, double mouse_y){ - (void)window; - float rotScale = 1.0f; - float transScale = 2.0f; - - if(mouseLeftPressed){ - trackball(prev_quat, - rotScale * (2.0f * prevMouseX - width) / (float)width, - rotScale * (height - 2.0f * prevMouseY) / (float)height, - rotScale * (2.0f * mouse_x - width) / (float)width, - rotScale * (height - 2.0f * mouse_y) / (float)height); - - add_quats(prev_quat, curr_quat, curr_quat); - } else if (mouseMiddlePressed) { - eye[0] -= transScale * (mouse_x - prevMouseX) / (float)width; - lookat[0] -= transScale * (mouse_x - prevMouseX) / (float)width; - eye[1] += transScale * (mouse_y - prevMouseY) / (float)height; - lookat[1] += transScale * (mouse_y - prevMouseY) / (float)height; - } else if (mouseRightPressed) { - eye[2] += transScale * (mouse_y - prevMouseY) / (float)height; - lookat[2] += transScale * (mouse_y - prevMouseY) / (float)height; - } - - // Update mouse point - prevMouseX = mouse_x; - prevMouseY = mouse_y; -} - -void Draw(const std::vector& drawObjects) -{ - glPolygonMode(GL_FRONT, GL_FILL); - glPolygonMode(GL_BACK, GL_FILL); - - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(1.0, 1.0); - glColor3f(1.0f, 1.0f, 1.0f); - for (size_t i = 0; i < drawObjects.size(); i++) { - DrawObject o = drawObjects[i]; - if (o.vb < 1) { - continue; - } - - glBindBuffer(GL_ARRAY_BUFFER, o.vb); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - glVertexPointer(3, GL_FLOAT, 36, (const void*)0); - glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float)*3)); - glColorPointer(3, GL_FLOAT, 36, (const void*)(sizeof(float)*6)); - - glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles); - CheckErrors("drawarrays"); - } - - // draw wireframe - glDisable(GL_POLYGON_OFFSET_FILL); - glPolygonMode(GL_FRONT, GL_LINE); - glPolygonMode(GL_BACK, GL_LINE); - - glColor3f(0.0f, 0.0f, 0.4f); - for (size_t i = 0; i < drawObjects.size(); i++) { - DrawObject o = drawObjects[i]; - if (o.vb < 1) { - continue; - } - - glBindBuffer(GL_ARRAY_BUFFER, o.vb); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - glVertexPointer(3, GL_FLOAT, 36, (const void*)0); - glNormalPointer(GL_FLOAT, 36, (const void*)(sizeof(float)*3)); - - glDrawArrays(GL_TRIANGLES, 0, 3 * o.numTriangles); - CheckErrors("drawarrays"); - } -} - -static void Init() { - trackball(curr_quat, 0, 0, 0, 0); - - eye[0] = 0.0f; - eye[1] = 0.0f; - eye[2] = 3.0f; - - lookat[0] = 0.0f; - lookat[1] = 0.0f; - lookat[2] = 0.0f; - - up[0] = 0.0f; - up[1] = 1.0f; - up[2] = 0.0f; -} - - -int main(int argc, char **argv) -{ - if (argc < 2) { - std::cout << "view input.obj " << std::endl; - return 0; - } - - bool benchmark_only = false; - int num_threads = -1; - bool verbose = false; - - if (argc > 2) { - num_threads = atoi(argv[2]); - } - - if (argc > 3) { - benchmark_only = (atoi(argv[3]) > 0) ? true : false; - } - - if (argc > 4) { - verbose = true; - } - - if (benchmark_only) { - - tinyobj_opt::attrib_t attrib; - std::vector shapes; - std::vector materials; - - size_t data_len = 0; - const char* data = get_file_data(&data_len, argv[1]); - if (data == nullptr) { - printf("failed to load file\n"); - exit(-1); - return false; - } - - if (data_len < 4) { - printf("Empty file\n"); - exit(-1); - return false; - } - printf("filesize: %d\n", (int)data_len); - tinyobj_opt::LoadOption option; - option.req_num_threads = num_threads; - option.verbose = true; - - bool ret = parseObj(&attrib, &shapes, &materials, data, data_len, option); - - return ret; - } - - Init(); - - std::cout << "Initialize GLFW..." << std::endl; - - if(!glfwInit()){ - std::cerr << "Failed to initialize GLFW." << std::endl; - return -1; - } - - std::cout << "GLFW Init OK." << std::endl; - - - window = glfwCreateWindow(width, height, "Obj viewer", NULL, NULL); - if(window == NULL){ - std::cerr << "Failed to open GLFW window. " << std::endl; - glfwTerminate(); - return 1; - } - - glfwMakeContextCurrent(window); - glfwSwapInterval(1); - - // Callback - glfwSetWindowSizeCallback(window, reshapeFunc); - glfwSetKeyCallback(window, keyboardFunc); - glfwSetMouseButtonCallback(window, clickFunc); - glfwSetCursorPosCallback(window, motionFunc); - - glewExperimental = true; - if (glewInit() != GLEW_OK) { - std::cerr << "Failed to initialize GLEW." << std::endl; - return -1; - } - - reshapeFunc(window, width, height); - - float bmin[3], bmax[3]; - if (false == LoadObjAndConvert(bmin, bmax, argv[1], num_threads, verbose)) { - printf("failed to load & conv\n"); - return -1; - } - - float maxExtent = 0.5f * (bmax[0] - bmin[0]); - if (maxExtent < 0.5f * (bmax[1] - bmin[1])) { - maxExtent = 0.5f * (bmax[1] - bmin[1]); - } - if (maxExtent < 0.5f * (bmax[2] - bmin[2])) { - maxExtent = 0.5f * (bmax[2] - bmin[2]); - } - - while(glfwWindowShouldClose(window) == GL_FALSE) { - glfwPollEvents(); - glClearColor(0.1f, 0.2f, 0.3f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glEnable(GL_DEPTH_TEST); - - // camera & rotate - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - GLfloat mat[4][4]; - gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], up[0], up[1], up[2]); - build_rotmatrix(mat, curr_quat); - glMultMatrixf(&mat[0][0]); - - // Fit to -1, 1 - glScalef(1.0f / maxExtent, 1.0f / maxExtent, 1.0f / maxExtent); - - // Centerize object. - glTranslatef(-0.5*(bmax[0] + bmin[0]), -0.5*(bmax[1] + bmin[1]), -0.5*(bmax[2] + bmin[2])); - - Draw(gDrawObjects); - - glfwSwapBuffers(window); - } - - glfwTerminate(); -} diff --git a/externals/tinyobjloader/fuzzer/README.md b/externals/tinyobjloader/fuzzer/README.md deleted file mode 100644 index 1cd63a2..0000000 --- a/externals/tinyobjloader/fuzzer/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Fuzzing test - -Do fuzzing test for tinyobjloader - -## Supported API - -* [x] ParseFromString - -## Requirements - -* clang with fuzzer support(`-fsanitize=fuzzer`. at least clang 8.0 should work) - -## Setup - -### Ubuntu 18.04 - -``` -$ sudo apt install clang++-8 -$ sudo apt install libfuzzer-8-dev -``` - -Optionally, if you didn't set `update-alternatives` you can set `clang++` to point to `clang++8` - -``` -$ sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 10 -$ sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-8 10 -``` - -## How to compile - -Fuzz target is compiled with the rest of the project when environment variable `LIB_FUZZING_ENGINE` is defined when running cmake -With clang, you can compile with -``` -$ export LIB_FUZZING_ENGINE=-fsanitize=fuzzer -$ mkdir build && cd build -$ cmake .. -DBUILD_SHARED_LIBS=OFF -$ make -j $(nproc) -``` - -## How to run - -Increase memory limit. e.g. `-rss_limit_mb=2000` -cf libfuzzer.info for all options - -``` -$ ./fuzz_ParseFromString -rss_limit_mb=2000 -``` - -## Regression tests - -See `regression_runner/` diff --git a/externals/tinyobjloader/fuzzer/afl.tar.gz b/externals/tinyobjloader/fuzzer/afl.tar.gz deleted file mode 100644 index 40a924f3131887ac6c62c998be40b32c57a993a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10719 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 gvc-uo>l? -#include -#include -#include -#include - -#define TINYOBJLOADER_IMPLEMENTATION // define this in only *one* .cc -#include "tiny_obj_loader.h" - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - tinyobj::ObjReaderConfig reader_config; - tinyobj::ObjReader reader; - if (Size < 2) { - return 0; - } - for (size_t i = 0; i < Size-1; i++) { - if (Data[i] == 0) { - std::string obj_text (reinterpret_cast(Data), i); - std::string mtl_text (reinterpret_cast(Data+i+1), Size-i-1); - reader.ParseFromString(obj_text, mtl_text,reader_config); - return 0; - } - } - return 0; -} - diff --git a/externals/tinyobjloader/fuzzer/regression_runner/Makefile b/externals/tinyobjloader/fuzzer/regression_runner/Makefile deleted file mode 100644 index f2c38a0..0000000 --- a/externals/tinyobjloader/fuzzer/regression_runner/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - clang++ -fsanitize=address,undefined ../../loader_example.cc diff --git a/externals/tinyobjloader/fuzzer/regression_runner/README.md b/externals/tinyobjloader/fuzzer/regression_runner/README.md deleted file mode 100644 index f59b9f6..0000000 --- a/externals/tinyobjloader/fuzzer/regression_runner/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Run fuzzer regression tests - -Currently we only support Linux + clang. - -## How to run - -``` -$ make -$ ./a.out ../regressions/ -``` - diff --git a/externals/tinyobjloader/fuzzer/regressions/clusterfuzz-testcase-minimized-fuzz_ParseFromString-4877060179886080 b/externals/tinyobjloader/fuzzer/regressions/clusterfuzz-testcase-minimized-fuzz_ParseFromString-4877060179886080 deleted file mode 100644 index e5094497f11c155cd4bfaedf32fcb377051f8885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmXR@Fm^RDH8(IfG&C}^U{C-69`^${ diff --git a/externals/tinyobjloader/fuzzer/runner.py b/externals/tinyobjloader/fuzzer/runner.py deleted file mode 100644 index d9b5b61..0000000 --- a/externals/tinyobjloader/fuzzer/runner.py +++ /dev/null @@ -1,19 +0,0 @@ -import glob -import subprocess - -def main(): - for g in glob.glob("../tests/afl/id*"): - print(g) - - cmd = ["../a.out", g] - - proc = subprocess.Popen(cmd) - try: - outs, errs = proc.communicate(timeout=15) - print(outs) - except TimeoutExpired: - proc.kill() - outs, errs = proc.communicate() - - -main() diff --git a/externals/tinyobjloader/images/rungholt.jpg b/externals/tinyobjloader/images/rungholt.jpg deleted file mode 100644 index 17718eb7c951f9b5df59b0be6a1c58eee755745b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96018 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

Dn}P1v(FP_bRYgDj}7oRm)2V?5D~Z!vVPVFix@b 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ΈQ*o=GJ-knUX9g&y9#F1nS8L!7FbmkIbW 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¶+!CtG^>N1teMMk$)c4O-~ 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%0DEhl;NO96hNC2HjJ*A^v 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 diff --git a/externals/tinyobjloader/images/sanmugel.png b/externals/tinyobjloader/images/sanmugel.png deleted file mode 100644 index 9d6b5f071b23e43585f9f2b8c9881dec05d566a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112710 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%0Dc=EVlNK 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 diff --git a/externals/tinyobjloader/jni/Android.mk b/externals/tinyobjloader/jni/Android.mk deleted file mode 100644 index bc81f8f..0000000 --- a/externals/tinyobjloader/jni/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -# A simple test for the minimal standard C++ library -# - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_MODULE := tinyobjloader -LOCAL_SRC_FILES := ../tiny_obj_loader.cc - -LOCAL_C_INCLUDES := ../ - -include $(BUILD_STATIC_LIBRARY) diff --git a/externals/tinyobjloader/jni/Application.mk b/externals/tinyobjloader/jni/Application.mk deleted file mode 100644 index e5d3191..0000000 --- a/externals/tinyobjloader/jni/Application.mk +++ /dev/null @@ -1,2 +0,0 @@ -APP_ABI := all -APP_STL := stlport_static diff --git a/externals/tinyobjloader/jni/Makefile b/externals/tinyobjloader/jni/Makefile deleted file mode 100644 index 1f13853..0000000 --- a/externals/tinyobjloader/jni/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - ndk-build diff --git a/externals/tinyobjloader/jni/README b/externals/tinyobjloader/jni/README deleted file mode 100644 index f93bc08..0000000 --- a/externals/tinyobjloader/jni/README +++ /dev/null @@ -1 +0,0 @@ -Just tests compilation with Android NDK r10. diff --git a/externals/tinyobjloader/loader_example.cc b/externals/tinyobjloader/loader_example.cc deleted file mode 100644 index 8143bb7..0000000 --- a/externals/tinyobjloader/loader_example.cc +++ /dev/null @@ -1,437 +0,0 @@ -// -// g++ loader_example.cc -// -#define TINYOBJLOADER_IMPLEMENTATION -#include "tiny_obj_loader.h" - -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -#ifdef __cplusplus -} -#endif -#pragma comment(lib, "winmm.lib") -#else -#if defined(__unix__) || defined(__APPLE__) -#include -#else -#include -#endif -#endif - -#ifdef __clang__ -#pragma clang diagnostic push -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif -#endif - -class timerutil { - public: -#ifdef _WIN32 - typedef DWORD time_t; - - timerutil() { ::timeBeginPeriod(1); } - ~timerutil() { ::timeEndPeriod(1); } - - void start() { t_[0] = ::timeGetTime(); } - void end() { t_[1] = ::timeGetTime(); } - - time_t sec() { return (time_t)((t_[1] - t_[0]) / 1000); } - time_t msec() { return (time_t)((t_[1] - t_[0])); } - time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000); } - time_t current() { return ::timeGetTime(); } - -#else -#if defined(__unix__) || defined(__APPLE__) - typedef unsigned long int time_t; - - void start() { gettimeofday(tv + 0, &tz); } - void end() { gettimeofday(tv + 1, &tz); } - - time_t sec() { return static_cast(tv[1].tv_sec - tv[0].tv_sec); } - time_t msec() { - return this->sec() * 1000 + - static_cast((tv[1].tv_usec - tv[0].tv_usec) / 1000); - } - time_t usec() { - return this->sec() * 1000000 + - static_cast(tv[1].tv_usec - tv[0].tv_usec); - } - time_t current() { - struct timeval t; - gettimeofday(&t, NULL); - return static_cast(t.tv_sec * 1000 + t.tv_usec); - } - -#else // C timer - // using namespace std; - typedef clock_t time_t; - - void start() { t_[0] = clock(); } - void end() { t_[1] = clock(); } - - time_t sec() { return (time_t)((t_[1] - t_[0]) / CLOCKS_PER_SEC); } - time_t msec() { return (time_t)((t_[1] - t_[0]) * 1000 / CLOCKS_PER_SEC); } - time_t usec() { return (time_t)((t_[1] - t_[0]) * 1000000 / CLOCKS_PER_SEC); } - time_t current() { return (time_t)clock(); } - -#endif -#endif - - private: -#ifdef _WIN32 - DWORD t_[2]; -#else -#if defined(__unix__) || defined(__APPLE__) - struct timeval tv[2]; - struct timezone tz; -#else - time_t t_[2]; -#endif -#endif -}; - -static void PrintInfo(const tinyobj::attrib_t& attrib, - const std::vector& shapes, - const std::vector& materials) { - std::cout << "# of vertices : " << (attrib.vertices.size() / 3) << std::endl; - std::cout << "# of normals : " << (attrib.normals.size() / 3) << std::endl; - std::cout << "# of texcoords : " << (attrib.texcoords.size() / 2) - << std::endl; - - std::cout << "# of shapes : " << shapes.size() << std::endl; - std::cout << "# of materials : " << materials.size() << std::endl; - - for (size_t v = 0; v < attrib.vertices.size() / 3; v++) { - printf(" v[%ld] = (%f, %f, %f)\n", static_cast(v), - static_cast(attrib.vertices[3 * v + 0]), - static_cast(attrib.vertices[3 * v + 1]), - static_cast(attrib.vertices[3 * v + 2])); - } - - for (size_t v = 0; v < attrib.normals.size() / 3; v++) { - printf(" n[%ld] = (%f, %f, %f)\n", static_cast(v), - static_cast(attrib.normals[3 * v + 0]), - static_cast(attrib.normals[3 * v + 1]), - static_cast(attrib.normals[3 * v + 2])); - } - - for (size_t v = 0; v < attrib.texcoords.size() / 2; v++) { - printf(" uv[%ld] = (%f, %f)\n", static_cast(v), - static_cast(attrib.texcoords[2 * v + 0]), - static_cast(attrib.texcoords[2 * v + 1])); - } - - // For each shape - for (size_t i = 0; i < shapes.size(); i++) { - printf("shape[%ld].name = %s\n", static_cast(i), - shapes[i].name.c_str()); - printf("Size of shape[%ld].mesh.indices: %lu\n", static_cast(i), - static_cast(shapes[i].mesh.indices.size())); - printf("Size of shape[%ld].lines.indices: %lu\n", static_cast(i), - static_cast(shapes[i].lines.indices.size())); - printf("Size of shape[%ld].points.indices: %lu\n", static_cast(i), - static_cast(shapes[i].points.indices.size())); - - size_t index_offset = 0; - - assert(shapes[i].mesh.num_face_vertices.size() == - shapes[i].mesh.material_ids.size()); - - assert(shapes[i].mesh.num_face_vertices.size() == - shapes[i].mesh.smoothing_group_ids.size()); - - printf("shape[%ld].num_faces: %lu\n", static_cast(i), - static_cast(shapes[i].mesh.num_face_vertices.size())); - - // For each face - for (size_t f = 0; f < shapes[i].mesh.num_face_vertices.size(); f++) { - size_t fnum = shapes[i].mesh.num_face_vertices[f]; - - printf(" face[%ld].fnum = %ld\n", static_cast(f), - static_cast(fnum)); - - // For each vertex in the face - for (size_t v = 0; v < fnum; v++) { - tinyobj::index_t idx = shapes[i].mesh.indices[index_offset + v]; - printf(" face[%ld].v[%ld].idx = %d/%d/%d\n", static_cast(f), - static_cast(v), idx.vertex_index, idx.normal_index, - idx.texcoord_index); - } - - printf(" face[%ld].material_id = %d\n", static_cast(f), - shapes[i].mesh.material_ids[f]); - printf(" face[%ld].smoothing_group_id = %d\n", static_cast(f), - shapes[i].mesh.smoothing_group_ids[f]); - - index_offset += fnum; - } - - printf("shape[%ld].num_tags: %lu\n", static_cast(i), - static_cast(shapes[i].mesh.tags.size())); - for (size_t t = 0; t < shapes[i].mesh.tags.size(); t++) { - printf(" tag[%ld] = %s ", static_cast(t), - shapes[i].mesh.tags[t].name.c_str()); - printf(" ints: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].intValues.size(); ++j) { - printf("%ld", static_cast(shapes[i].mesh.tags[t].intValues[j])); - if (j < (shapes[i].mesh.tags[t].intValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - - printf(" floats: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].floatValues.size(); ++j) { - printf("%f", static_cast( - shapes[i].mesh.tags[t].floatValues[j])); - if (j < (shapes[i].mesh.tags[t].floatValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - - printf(" strings: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].stringValues.size(); ++j) { - printf("%s", shapes[i].mesh.tags[t].stringValues[j].c_str()); - if (j < (shapes[i].mesh.tags[t].stringValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - printf("\n"); - } - } - - for (size_t i = 0; i < materials.size(); i++) { - printf("material[%ld].name = %s\n", static_cast(i), - materials[i].name.c_str()); - printf(" material.Ka = (%f, %f ,%f)\n", - static_cast(materials[i].ambient[0]), - static_cast(materials[i].ambient[1]), - static_cast(materials[i].ambient[2])); - printf(" material.Kd = (%f, %f ,%f)\n", - static_cast(materials[i].diffuse[0]), - static_cast(materials[i].diffuse[1]), - static_cast(materials[i].diffuse[2])); - printf(" material.Ks = (%f, %f ,%f)\n", - static_cast(materials[i].specular[0]), - static_cast(materials[i].specular[1]), - static_cast(materials[i].specular[2])); - printf(" material.Tr = (%f, %f ,%f)\n", - static_cast(materials[i].transmittance[0]), - static_cast(materials[i].transmittance[1]), - static_cast(materials[i].transmittance[2])); - printf(" material.Ke = (%f, %f ,%f)\n", - static_cast(materials[i].emission[0]), - static_cast(materials[i].emission[1]), - static_cast(materials[i].emission[2])); - printf(" material.Ns = %f\n", - static_cast(materials[i].shininess)); - printf(" material.Ni = %f\n", static_cast(materials[i].ior)); - printf(" material.dissolve = %f\n", - static_cast(materials[i].dissolve)); - printf(" material.illum = %d\n", materials[i].illum); - printf(" material.map_Ka = %s\n", materials[i].ambient_texname.c_str()); - printf(" material.map_Kd = %s\n", materials[i].diffuse_texname.c_str()); - printf(" material.map_Ks = %s\n", materials[i].specular_texname.c_str()); - printf(" material.map_Ns = %s\n", - materials[i].specular_highlight_texname.c_str()); - printf(" material.map_bump = %s\n", materials[i].bump_texname.c_str()); - printf(" bump_multiplier = %f\n", static_cast(materials[i].bump_texopt.bump_multiplier)); - printf(" material.map_d = %s\n", materials[i].alpha_texname.c_str()); - printf(" material.disp = %s\n", materials[i].displacement_texname.c_str()); - printf(" <>\n"); - printf(" material.Pr = %f\n", static_cast(materials[i].roughness)); - printf(" material.Pm = %f\n", static_cast(materials[i].metallic)); - printf(" material.Ps = %f\n", static_cast(materials[i].sheen)); - printf(" material.Pc = %f\n", static_cast(materials[i].clearcoat_thickness)); - printf(" material.Pcr = %f\n", static_cast(materials[i].clearcoat_thickness)); - printf(" material.aniso = %f\n", static_cast(materials[i].anisotropy)); - printf(" material.anisor = %f\n", static_cast(materials[i].anisotropy_rotation)); - printf(" material.map_Ke = %s\n", materials[i].emissive_texname.c_str()); - printf(" material.map_Pr = %s\n", materials[i].roughness_texname.c_str()); - printf(" material.map_Pm = %s\n", materials[i].metallic_texname.c_str()); - printf(" material.map_Ps = %s\n", materials[i].sheen_texname.c_str()); - printf(" material.norm = %s\n", materials[i].normal_texname.c_str()); - std::map::const_iterator it( - materials[i].unknown_parameter.begin()); - std::map::const_iterator itEnd( - materials[i].unknown_parameter.end()); - - for (; it != itEnd; it++) { - printf(" material.%s = %s\n", it->first.c_str(), it->second.c_str()); - } - printf("\n"); - } -} - -static bool TestLoadObj(const char* filename, const char* basepath = NULL, - bool triangulate = true) { - std::cout << "Loading " << filename << std::endl; - - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - timerutil t; - t.start(); - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, filename, - basepath, triangulate); - t.end(); - printf("Parsing time: %lu [msecs]\n", t.msec()); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - if (!ret) { - printf("Failed to load/parse .obj.\n"); - return false; - } - - PrintInfo(attrib, shapes, materials); - - return true; -} - -static bool TestStreamLoadObj() { - std::cout << "Stream Loading " << std::endl; - - std::stringstream objStream; - objStream << "mtllib cube.mtl\n" - "\n" - "v 0.000000 2.000000 2.000000\n" - "v 0.000000 0.000000 2.000000\n" - "v 2.000000 0.000000 2.000000\n" - "v 2.000000 2.000000 2.000000\n" - "v 0.000000 2.000000 0.000000\n" - "v 0.000000 0.000000 0.000000\n" - "v 2.000000 0.000000 0.000000\n" - "v 2.000000 2.000000 0.000000\n" - "# 8 vertices\n" - "\n" - "g front cube\n" - "usemtl white\n" - "f 1 2 3 4\n" - "g back cube\n" - "# expects white material\n" - "f 8 7 6 5\n" - "g right cube\n" - "usemtl red\n" - "f 4 3 7 8\n" - "g top cube\n" - "usemtl white\n" - "f 5 1 4 8\n" - "g left cube\n" - "usemtl green\n" - "f 5 6 2 1\n" - "g bottom cube\n" - "usemtl white\n" - "f 2 6 7 3\n" - "# 6 elements"; - - std::string matStream( - "newmtl white\n" - "Ka 0 0 0\n" - "Kd 1 1 1\n" - "Ks 0 0 0\n" - "\n" - "newmtl red\n" - "Ka 0 0 0\n" - "Kd 1 0 0\n" - "Ks 0 0 0\n" - "\n" - "newmtl green\n" - "Ka 0 0 0\n" - "Kd 0 1 0\n" - "Ks 0 0 0\n" - "\n" - "newmtl blue\n" - "Ka 0 0 0\n" - "Kd 0 0 1\n" - "Ks 0 0 0\n" - "\n" - "newmtl light\n" - "Ka 20 20 20\n" - "Kd 1 1 1\n" - "Ks 0 0 0"); - - using namespace tinyobj; - class MaterialStringStreamReader : public MaterialReader { - public: - MaterialStringStreamReader(const std::string& matSStream) - : m_matSStream(matSStream) {} - virtual ~MaterialStringStreamReader() TINYOBJ_OVERRIDE {} - virtual bool operator()(const std::string& matId, - std::vector* materials, - std::map* matMap, - std::string* warn, - std::string* err) TINYOBJ_OVERRIDE { - (void)err; - (void)matId; - LoadMtl(matMap, materials, &m_matSStream, warn, err); - - return true; - } - - private: - std::stringstream m_matSStream; - }; - - MaterialStringStreamReader matSSReader(matStream); - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, &objStream, - &matSSReader); - - if (!err.empty()) { - std::cerr << err << std::endl; - } - - if (!ret) { - return false; - } - - PrintInfo(attrib, shapes, materials); - - return true; -} - -int main(int argc, char** argv) { - if (argc > 1) { - const char* basepath = "models/"; - if (argc > 2) { - basepath = argv[2]; - } - assert(true == TestLoadObj(argv[1], basepath)); - } else { - // assert(true == TestLoadObj("cornell_box.obj")); - // assert(true == TestLoadObj("cube.obj")); - assert(true == TestStreamLoadObj()); - assert(true == - TestLoadObj("models/catmark_torus_creases0.obj", "models/", false)); - } - - return 0; -} diff --git a/externals/tinyobjloader/mapbox/LICENSE b/externals/tinyobjloader/mapbox/LICENSE deleted file mode 100644 index 8bafb57..0000000 --- a/externals/tinyobjloader/mapbox/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -ISC License - -Copyright (c) 2015, Mapbox - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/externals/tinyobjloader/mapbox/earcut.hpp b/externals/tinyobjloader/mapbox/earcut.hpp deleted file mode 100644 index 01bd7e9..0000000 --- a/externals/tinyobjloader/mapbox/earcut.hpp +++ /dev/null @@ -1,820 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -namespace mapbox { - -namespace util { - -template struct nth { - inline static typename std::tuple_element::type - get(const T& t) { return std::get(t); }; -}; - -} - -namespace detail { - -template -class Earcut { -public: - std::vector indices; - std::size_t vertices = 0; - - template - void operator()(const Polygon& points); - -private: - struct Node { - Node(N index, double x_, double y_) : i(index), x(x_), y(y_) {} - Node(const Node&) = delete; - Node& operator=(const Node&) = delete; - Node(Node&&) = delete; - Node& operator=(Node&&) = delete; - - const N i; - const double x; - const double y; - - // previous and next vertice nodes in a polygon ring - Node* prev = nullptr; - Node* next = nullptr; - - // z-order curve value - int32_t z = 0; - - // previous and next nodes in z-order - Node* prevZ = nullptr; - Node* nextZ = nullptr; - - // indicates whether this is a steiner point - bool steiner = false; - }; - - template Node* linkedList(const Ring& points, const bool clockwise); - Node* filterPoints(Node* start, Node* end = nullptr); - void earcutLinked(Node* ear, int pass = 0); - bool isEar(Node* ear); - bool isEarHashed(Node* ear); - Node* cureLocalIntersections(Node* start); - void splitEarcut(Node* start); - template Node* eliminateHoles(const Polygon& points, Node* outerNode); - Node* eliminateHole(Node* hole, Node* outerNode); - Node* findHoleBridge(Node* hole, Node* outerNode); - bool sectorContainsSector(const Node* m, const Node* p); - void indexCurve(Node* start); - Node* sortLinked(Node* list); - int32_t zOrder(const double x_, const double y_); - Node* getLeftmost(Node* start); - bool pointInTriangle(double ax, double ay, double bx, double by, double cx, double cy, double px, double py) const; - bool isValidDiagonal(Node* a, Node* b); - double area(const Node* p, const Node* q, const Node* r) const; - bool equals(const Node* p1, const Node* p2); - bool intersects(const Node* p1, const Node* q1, const Node* p2, const Node* q2); - bool onSegment(const Node* p, const Node* q, const Node* r); - int sign(double val); - bool intersectsPolygon(const Node* a, const Node* b); - bool locallyInside(const Node* a, const Node* b); - bool middleInside(const Node* a, const Node* b); - Node* splitPolygon(Node* a, Node* b); - template Node* insertNode(std::size_t i, const Point& p, Node* last); - void removeNode(Node* p); - - bool hashing; - double minX, maxX; - double minY, maxY; - double inv_size = 0; - - template > - class ObjectPool { - public: - ObjectPool() { } - ObjectPool(std::size_t blockSize_) { - reset(blockSize_); - } - ~ObjectPool() { - clear(); - } - template - T* construct(Args&&... args) { - if (currentIndex >= blockSize) { - currentBlock = alloc_traits::allocate(alloc, blockSize); - allocations.emplace_back(currentBlock); - currentIndex = 0; - } - T* object = ¤tBlock[currentIndex++]; - alloc_traits::construct(alloc, object, std::forward(args)...); - return object; - } - void reset(std::size_t newBlockSize) { - for (auto allocation : allocations) { - alloc_traits::deallocate(alloc, allocation, blockSize); - } - allocations.clear(); - blockSize = std::max(1, newBlockSize); - currentBlock = nullptr; - currentIndex = blockSize; - } - void clear() { reset(blockSize); } - private: - T* currentBlock = nullptr; - std::size_t currentIndex = 1; - std::size_t blockSize = 1; - std::vector allocations; - Alloc alloc; - typedef typename std::allocator_traits alloc_traits; - }; - ObjectPool nodes; -}; - -template template -void Earcut::operator()(const Polygon& points) { - // reset - indices.clear(); - vertices = 0; - - if (points.empty()) return; - - double x; - double y; - int threshold = 80; - std::size_t len = 0; - - for (size_t i = 0; threshold >= 0 && i < points.size(); i++) { - threshold -= static_cast(points[i].size()); - len += points[i].size(); - } - - //estimate size of nodes and indices - nodes.reset(len * 3 / 2); - indices.reserve(len + points[0].size()); - - Node* outerNode = linkedList(points[0], true); - if (!outerNode || outerNode->prev == outerNode->next) return; - - if (points.size() > 1) outerNode = eliminateHoles(points, outerNode); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - hashing = threshold < 0; - if (hashing) { - Node* p = outerNode->next; - minX = maxX = outerNode->x; - minY = maxY = outerNode->y; - do { - x = p->x; - y = p->y; - minX = std::min(minX, x); - minY = std::min(minY, y); - maxX = std::max(maxX, x); - maxY = std::max(maxY, y); - p = p->next; - } while (p != outerNode); - - // minX, minY and size are later used to transform coords into integers for z-order calculation - inv_size = std::max(maxX - minX, maxY - minY); - inv_size = inv_size != .0 ? (1. / inv_size) : .0; - } - - earcutLinked(outerNode); - - nodes.clear(); -} - -// create a circular doubly linked list from polygon points in the specified winding order -template template -typename Earcut::Node* -Earcut::linkedList(const Ring& points, const bool clockwise) { - using Point = typename Ring::value_type; - double sum = 0; - const std::size_t len = points.size(); - std::size_t i, j; - Node* last = nullptr; - - // calculate original winding order of a polygon ring - for (i = 0, j = len > 0 ? len - 1 : 0; i < len; j = i++) { - const auto& p1 = points[i]; - const auto& p2 = points[j]; - const double p20 = util::nth<0, Point>::get(p2); - const double p10 = util::nth<0, Point>::get(p1); - const double p11 = util::nth<1, Point>::get(p1); - const double p21 = util::nth<1, Point>::get(p2); - sum += (p20 - p10) * (p11 + p21); - } - - // link points into circular doubly-linked list in the specified winding order - if (clockwise == (sum > 0)) { - for (i = 0; i < len; i++) last = insertNode(vertices + i, points[i], last); - } else { - for (i = len; i-- > 0;) last = insertNode(vertices + i, points[i], last); - } - - if (last && equals(last, last->next)) { - removeNode(last); - last = last->next; - } - - vertices += len; - - return last; -} - -// eliminate colinear or duplicate points -template -typename Earcut::Node* -Earcut::filterPoints(Node* start, Node* end) { - if (!end) end = start; - - Node* p = start; - bool again; - do { - again = false; - - if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) { - removeNode(p); - p = end = p->prev; - - if (p == p->next) break; - again = true; - - } else { - p = p->next; - } - } while (again || p != end); - - return end; -} - -// main ear slicing loop which triangulates a polygon (given as a linked list) -template -void Earcut::earcutLinked(Node* ear, int pass) { - if (!ear) return; - - // interlink polygon nodes in z-order - if (!pass && hashing) indexCurve(ear); - - Node* stop = ear; - Node* prev; - Node* next; - - int iterations = 0; - - // iterate through ears, slicing them one by one - while (ear->prev != ear->next) { - iterations++; - prev = ear->prev; - next = ear->next; - - if (hashing ? isEarHashed(ear) : isEar(ear)) { - // cut off the triangle - indices.emplace_back(prev->i); - indices.emplace_back(ear->i); - indices.emplace_back(next->i); - - removeNode(ear); - - // skipping the next vertice leads to less sliver triangles - ear = next->next; - stop = next->next; - - continue; - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if (ear == stop) { - // try filtering points and slicing again - if (!pass) earcutLinked(filterPoints(ear), 1); - - // if this didn't work, try curing all small self-intersections locally - else if (pass == 1) { - ear = cureLocalIntersections(filterPoints(ear)); - earcutLinked(ear, 2); - - // as a last resort, try splitting the remaining polygon into two - } else if (pass == 2) splitEarcut(ear); - - break; - } - } -} - -// check whether a polygon node forms a valid ear with adjacent nodes -template -bool Earcut::isEar(Node* ear) { - const Node* a = ear->prev; - const Node* b = ear; - const Node* c = ear->next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - Node* p = ear->next->next; - - while (p != ear->prev) { - if (pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) && - area(p->prev, p, p->next) >= 0) return false; - p = p->next; - } - - return true; -} - -template -bool Earcut::isEarHashed(Node* ear) { - const Node* a = ear->prev; - const Node* b = ear; - const Node* c = ear->next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // triangle bbox; min & max are calculated like this for speed - const double minTX = std::min(a->x, std::min(b->x, c->x)); - const double minTY = std::min(a->y, std::min(b->y, c->y)); - const double maxTX = std::max(a->x, std::max(b->x, c->x)); - const double maxTY = std::max(a->y, std::max(b->y, c->y)); - - // z-order range for the current triangle bbox; - const int32_t minZ = zOrder(minTX, minTY); - const int32_t maxZ = zOrder(maxTX, maxTY); - - // first look for points inside the triangle in increasing z-order - Node* p = ear->nextZ; - - while (p && p->z <= maxZ) { - if (p != ear->prev && p != ear->next && - pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) && - area(p->prev, p, p->next) >= 0) return false; - p = p->nextZ; - } - - // then look for points in decreasing z-order - p = ear->prevZ; - - while (p && p->z >= minZ) { - if (p != ear->prev && p != ear->next && - pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) && - area(p->prev, p, p->next) >= 0) return false; - p = p->prevZ; - } - - return true; -} - -// go through all polygon nodes and cure small local self-intersections -template -typename Earcut::Node* -Earcut::cureLocalIntersections(Node* start) { - Node* p = start; - do { - Node* a = p->prev; - Node* b = p->next->next; - - // a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2]) - if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { - indices.emplace_back(a->i); - indices.emplace_back(p->i); - indices.emplace_back(b->i); - - // remove two nodes involved - removeNode(p); - removeNode(p->next); - - p = start = b; - } - p = p->next; - } while (p != start); - - return filterPoints(p); -} - -// try splitting polygon into two and triangulate them independently -template -void Earcut::splitEarcut(Node* start) { - // look for a valid diagonal that divides the polygon into two - Node* a = start; - do { - Node* b = a->next->next; - while (b != a->prev) { - if (a->i != b->i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - Node* c = splitPolygon(a, b); - - // filter colinear points around the cuts - a = filterPoints(a, a->next); - c = filterPoints(c, c->next); - - // run earcut on each half - earcutLinked(a); - earcutLinked(c); - return; - } - b = b->next; - } - a = a->next; - } while (a != start); -} - -// link every hole into the outer loop, producing a single-ring polygon without holes -template template -typename Earcut::Node* -Earcut::eliminateHoles(const Polygon& points, Node* outerNode) { - const size_t len = points.size(); - - std::vector queue; - for (size_t i = 1; i < len; i++) { - Node* list = linkedList(points[i], false); - if (list) { - if (list == list->next) list->steiner = true; - queue.push_back(getLeftmost(list)); - } - } - std::sort(queue.begin(), queue.end(), [](const Node* a, const Node* b) { - return a->x < b->x; - }); - - // process holes from left to right - for (size_t i = 0; i < queue.size(); i++) { - outerNode = eliminateHole(queue[i], outerNode); - outerNode = filterPoints(outerNode, outerNode->next); - } - - return outerNode; -} - -// find a bridge between vertices that connects hole with an outer ring and and link it -template -typename Earcut::Node* -Earcut::eliminateHole(Node* hole, Node* outerNode) { - Node* bridge = findHoleBridge(hole, outerNode); - if (!bridge) { - return outerNode; - } - - Node* bridgeReverse = splitPolygon(bridge, hole); - - // filter collinear points around the cuts - Node* filteredBridge = filterPoints(bridge, bridge->next); - filterPoints(bridgeReverse, bridgeReverse->next); - - // Check if input node was removed by the filtering - return outerNode == bridge ? filteredBridge : outerNode; -} - -// David Eberly's algorithm for finding a bridge between hole and outer polygon -template -typename Earcut::Node* -Earcut::findHoleBridge(Node* hole, Node* outerNode) { - Node* p = outerNode; - double hx = hole->x; - double hy = hole->y; - double qx = -std::numeric_limits::infinity(); - Node* m = nullptr; - - // find a segment intersected by a ray from the hole's leftmost Vertex to the left; - // segment's endpoint with lesser x will be potential connection Vertex - do { - if (hy <= p->y && hy >= p->next->y && p->next->y != p->y) { - double x = p->x + (hy - p->y) * (p->next->x - p->x) / (p->next->y - p->y); - if (x <= hx && x > qx) { - qx = x; - if (x == hx) { - if (hy == p->y) return p; - if (hy == p->next->y) return p->next; - } - m = p->x < p->next->x ? p : p->next; - } - } - p = p->next; - } while (p != outerNode); - - if (!m) return 0; - - if (hx == qx) return m; // hole touches outer segment; pick leftmost endpoint - - // look for points inside the triangle of hole Vertex, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the Vertex of the minimum angle with the ray as connection Vertex - - const Node* stop = m; - double tanMin = std::numeric_limits::infinity(); - double tanCur = 0; - - p = m; - double mx = m->x; - double my = m->y; - - do { - if (hx >= p->x && p->x >= mx && hx != p->x && - pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p->x, p->y)) { - - tanCur = std::abs(hy - p->y) / (hx - p->x); // tangential - - if (locallyInside(p, hole) && - (tanCur < tanMin || (tanCur == tanMin && (p->x > m->x || sectorContainsSector(m, p))))) { - m = p; - tanMin = tanCur; - } - } - - p = p->next; - } while (p != stop); - - return m; -} - -// whether sector in vertex m contains sector in vertex p in the same coordinates -template -bool Earcut::sectorContainsSector(const Node* m, const Node* p) { - return area(m->prev, m, p->prev) < 0 && area(p->next, m, m->next) < 0; -} - -// interlink polygon nodes in z-order -template -void Earcut::indexCurve(Node* start) { - assert(start); - Node* p = start; - - do { - p->z = p->z ? p->z : zOrder(p->x, p->y); - p->prevZ = p->prev; - p->nextZ = p->next; - p = p->next; - } while (p != start); - - p->prevZ->nextZ = nullptr; - p->prevZ = nullptr; - - sortLinked(p); -} - -// Simon Tatham's linked list merge sort algorithm -// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html -template -typename Earcut::Node* -Earcut::sortLinked(Node* list) { - assert(list); - Node* p; - Node* q; - Node* e; - Node* tail; - int i, numMerges, pSize, qSize; - int inSize = 1; - - for (;;) { - p = list; - list = nullptr; - tail = nullptr; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q->nextZ; - if (!q) break; - } - - qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q)) { - - if (pSize == 0) { - e = q; - q = q->nextZ; - qSize--; - } else if (qSize == 0 || !q) { - e = p; - p = p->nextZ; - pSize--; - } else if (p->z <= q->z) { - e = p; - p = p->nextZ; - pSize--; - } else { - e = q; - q = q->nextZ; - qSize--; - } - - if (tail) tail->nextZ = e; - else list = e; - - e->prevZ = tail; - tail = e; - } - - p = q; - } - - tail->nextZ = nullptr; - - if (numMerges <= 1) return list; - - inSize *= 2; - } -} - -// z-order of a Vertex given coords and size of the data bounding box -template -int32_t Earcut::zOrder(const double x_, const double y_) { - // coords are transformed into non-negative 15-bit integer range - int32_t x = static_cast(32767.0 * (x_ - minX) * inv_size); - int32_t y = static_cast(32767.0 * (y_ - minY) * inv_size); - - x = (x | (x << 8)) & 0x00FF00FF; - x = (x | (x << 4)) & 0x0F0F0F0F; - x = (x | (x << 2)) & 0x33333333; - x = (x | (x << 1)) & 0x55555555; - - y = (y | (y << 8)) & 0x00FF00FF; - y = (y | (y << 4)) & 0x0F0F0F0F; - y = (y | (y << 2)) & 0x33333333; - y = (y | (y << 1)) & 0x55555555; - - return x | (y << 1); -} - -// find the leftmost node of a polygon ring -template -typename Earcut::Node* -Earcut::getLeftmost(Node* start) { - Node* p = start; - Node* leftmost = start; - do { - if (p->x < leftmost->x || (p->x == leftmost->x && p->y < leftmost->y)) - leftmost = p; - p = p->next; - } while (p != start); - - return leftmost; -} - -// check if a point lies within a convex triangle -template -bool Earcut::pointInTriangle(double ax, double ay, double bx, double by, double cx, double cy, double px, double py) const { - return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && - (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && - (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; -} - -// check if a diagonal between two polygon nodes is valid (lies in polygon interior) -template -bool Earcut::isValidDiagonal(Node* a, Node* b) { - return a->next->i != b->i && a->prev->i != b->i && !intersectsPolygon(a, b) && // dones't intersect other edges - ((locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible - (area(a->prev, a, b->prev) != 0.0 || area(a, b->prev, b) != 0.0)) || // does not create opposite-facing sectors - (equals(a, b) && area(a->prev, a, a->next) > 0 && area(b->prev, b, b->next) > 0)); // special zero-length case -} - -// signed area of a triangle -template -double Earcut::area(const Node* p, const Node* q, const Node* r) const { - return (q->y - p->y) * (r->x - q->x) - (q->x - p->x) * (r->y - q->y); -} - -// check if two points are equal -template -bool Earcut::equals(const Node* p1, const Node* p2) { - return p1->x == p2->x && p1->y == p2->y; -} - -// check if two segments intersect -template -bool Earcut::intersects(const Node* p1, const Node* q1, const Node* p2, const Node* q2) { - int o1 = sign(area(p1, q1, p2)); - int o2 = sign(area(p1, q1, q2)); - int o3 = sign(area(p2, q2, p1)); - int o4 = sign(area(p2, q2, q1)); - - if (o1 != o2 && o3 != o4) return true; // general case - - if (o1 == 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if (o2 == 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if (o3 == 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if (o4 == 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; -} - -// for collinear points p, q, r, check if point q lies on segment pr -template -bool Earcut::onSegment(const Node* p, const Node* q, const Node* r) { - return q->x <= std::max(p->x, r->x) && - q->x >= std::min(p->x, r->x) && - q->y <= std::max(p->y, r->y) && - q->y >= std::min(p->y, r->y); -} - -template -int Earcut::sign(double val) { - return (0.0 < val) - (val < 0.0); -} - -// check if a polygon diagonal intersects any polygon segments -template -bool Earcut::intersectsPolygon(const Node* a, const Node* b) { - const Node* p = a; - do { - if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i && - intersects(p, p->next, a, b)) return true; - p = p->next; - } while (p != a); - - return false; -} - -// check if a polygon diagonal is locally inside the polygon -template -bool Earcut::locallyInside(const Node* a, const Node* b) { - return area(a->prev, a, a->next) < 0 ? - area(a, b, a->next) >= 0 && area(a, a->prev, b) >= 0 : - area(a, b, a->prev) < 0 || area(a, a->next, b) < 0; -} - -// check if the middle Vertex of a polygon diagonal is inside the polygon -template -bool Earcut::middleInside(const Node* a, const Node* b) { - const Node* p = a; - bool inside = false; - double px = (a->x + b->x) / 2; - double py = (a->y + b->y) / 2; - do { - if (((p->y > py) != (p->next->y > py)) && p->next->y != p->y && - (px < (p->next->x - p->x) * (py - p->y) / (p->next->y - p->y) + p->x)) - inside = !inside; - p = p->next; - } while (p != a); - - return inside; -} - -// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits -// polygon into two; if one belongs to the outer ring and another to a hole, it merges it into a -// single ring -template -typename Earcut::Node* -Earcut::splitPolygon(Node* a, Node* b) { - Node* a2 = nodes.construct(a->i, a->x, a->y); - Node* b2 = nodes.construct(b->i, b->x, b->y); - Node* an = a->next; - Node* bp = b->prev; - - a->next = b; - b->prev = a; - - a2->next = an; - an->prev = a2; - - b2->next = a2; - a2->prev = b2; - - bp->next = b2; - b2->prev = bp; - - return b2; -} - -// create a node and util::optionally link it with previous one (in a circular doubly linked list) -template template -typename Earcut::Node* -Earcut::insertNode(std::size_t i, const Point& pt, Node* last) { - Node* p = nodes.construct(static_cast(i), util::nth<0, Point>::get(pt), util::nth<1, Point>::get(pt)); - - if (!last) { - p->prev = p; - p->next = p; - - } else { - assert(last); - p->next = last->next; - p->prev = last; - last->next->prev = p; - last->next = p; - } - return p; -} - -template -void Earcut::removeNode(Node* p) { - p->next->prev = p->prev; - p->prev->next = p->next; - - if (p->prevZ) p->prevZ->nextZ = p->nextZ; - if (p->nextZ) p->nextZ->prevZ = p->prevZ; -} -} - -template -std::vector earcut(const Polygon& poly) { - mapbox::detail::Earcut earcut; - earcut(poly); - return std::move(earcut.indices); -} -} diff --git a/externals/tinyobjloader/models/catmark_torus_creases0.obj b/externals/tinyobjloader/models/catmark_torus_creases0.obj deleted file mode 100644 index bf18f15..0000000 --- a/externals/tinyobjloader/models/catmark_torus_creases0.obj +++ /dev/null @@ -1,101 +0,0 @@ -# -# Copyright 2013 Pixar -# -# Licensed under the Apache License, Version 2.0 (the "Apache License") -# with the following modification; you may not use this file except in -# compliance with the Apache License and the following modification to it: -# Section 6. Trademarks. is deleted and replaced with: -# -# 6. Trademarks. This License does not grant permission to use the trade -# names, trademarks, service marks, or product names of the Licensor -# and its affiliates, except as required to comply with Section 4(c) of -# the License and to reproduce the content of the NOTICE file. -# -# You may obtain a copy of the Apache License at -# -# http:#www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the Apache License with the above modification is -# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the Apache License for the specific -# language governing permissions and limitations under the Apache License. -# -# This file uses centimeters as units for non-parametric coordinates. - -v 1.25052 0.517982 0.353553 -v 0.597239 0.247384 0.353553 -v 0.597239 0.247384 -0.353553 -v 1.25052 0.517982 -0.353553 -v 0.517982 1.25052 0.353553 -v 0.247384 0.597239 0.353553 -v 0.247384 0.597239 -0.353553 -v 0.517982 1.25052 -0.353553 -v -0.517982 1.25052 0.353553 -v -0.247384 0.597239 0.353553 -v -0.247384 0.597239 -0.353553 -v -0.517982 1.25052 -0.353553 -v -1.25052 0.517982 0.353553 -v -0.597239 0.247384 0.353553 -v -0.597239 0.247384 -0.353553 -v -1.25052 0.517982 -0.353553 -v -1.25052 -0.517982 0.353553 -v -0.597239 -0.247384 0.353553 -v -0.597239 -0.247384 -0.353553 -v -1.25052 -0.517982 -0.353553 -v -0.517982 -1.25052 0.353553 -v -0.247384 -0.597239 0.353553 -v -0.247384 -0.597239 -0.353553 -v -0.517982 -1.25052 -0.353553 -v 0.517982 -1.25052 0.353553 -v 0.247384 -0.597239 0.353553 -v 0.247384 -0.597239 -0.353553 -v 0.517982 -1.25052 -0.353553 -v 1.25052 -0.517982 0.353553 -v 0.597239 -0.247384 0.353553 -v 0.597239 -0.247384 -0.353553 -v 1.25052 -0.517982 -0.353553 -vt 0 0 -vt 1 0 -vt 1 1 -vt 0 1 -f 5/1/1 6/2/2 2/3/3 1/4/4 -f 6/1/5 7/2/6 3/3/7 2/4/8 -f 7/1/9 8/2/10 4/3/11 3/4/12 -f 8/1/13 5/2/14 1/3/15 4/4/16 -f 9/1/17 10/2/18 6/3/19 5/4/20 -f 10/1/21 11/2/22 7/3/23 6/4/24 -f 11/1/25 12/2/26 8/3/27 7/4/28 -f 12/1/29 9/2/30 5/3/31 8/4/32 -f 13/1/33 14/2/34 10/3/35 9/4/36 -f 14/1/37 15/2/38 11/3/39 10/4/40 -f 15/1/41 16/2/42 12/3/43 11/4/44 -f 16/1/45 13/2/46 9/3/47 12/4/48 -f 17/1/49 18/2/50 14/3/51 13/4/52 -f 18/1/53 19/2/54 15/3/55 14/4/56 -f 19/1/57 20/2/58 16/3/59 15/4/60 -f 20/1/61 17/2/62 13/3/63 16/4/64 -f 21/1/65 22/2/66 18/3/67 17/4/68 -f 22/1/69 23/2/70 19/3/71 18/4/72 -f 23/1/73 24/2/74 20/3/75 19/4/76 -f 24/1/77 21/2/78 17/3/79 20/4/80 -f 25/1/81 26/2/82 22/3/83 21/4/84 -f 26/1/85 27/2/86 23/3/87 22/4/88 -f 27/1/89 28/2/90 24/3/91 23/4/92 -f 28/1/93 25/2/94 21/3/95 24/4/96 -f 29/1/97 30/2/98 26/3/99 25/4/100 -f 30/1/101 31/2/102 27/3/103 26/4/104 -f 31/1/105 32/2/106 28/3/107 27/4/108 -f 32/1/109 29/2/110 25/3/111 28/4/112 -f 1/1/113 2/2/114 30/3/115 29/4/116 -f 2/1/117 3/2/118 31/3/119 30/4/120 -f 3/1/121 4/2/122 32/3/123 31/4/124 -f 4/1/125 1/2/126 29/3/127 32/4/128 -t crease 2/1/0 1 5 4.7 -t crease 2/1/0 5 9 4.7 -t crease 2/1/0 9 13 4.7 -t crease 2/1/0 13 17 4.7 -t crease 2/1/0 17 21 4.7 -t crease 2/1/0 21 25 4.7 -t crease 2/1/0 25 29 4.7 -t crease 2/1/0 29 1 4.7 diff --git a/externals/tinyobjloader/models/colorspace-issue-184.mtl b/externals/tinyobjloader/models/colorspace-issue-184.mtl deleted file mode 100644 index 7f3f9a4..0000000 --- a/externals/tinyobjloader/models/colorspace-issue-184.mtl +++ /dev/null @@ -1,9 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 -map_Kd -colorspace sRGB -o 0.1 diffuse.jpg -map_Ks -s 0.1 0.2 specular.jpg -map_bump -colorspace linear -bm 3 bumpmap.jpg - diff --git a/externals/tinyobjloader/models/colorspace-issue-184.obj b/externals/tinyobjloader/models/colorspace-issue-184.obj deleted file mode 100644 index ae589cb..0000000 --- a/externals/tinyobjloader/models/colorspace-issue-184.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib colorspace-issue-184.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/cornell_box.mtl b/externals/tinyobjloader/models/cornell_box.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/externals/tinyobjloader/models/cornell_box.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/cornell_box.obj b/externals/tinyobjloader/models/cornell_box.obj deleted file mode 100644 index 43e021f..0000000 --- a/externals/tinyobjloader/models/cornell_box.obj +++ /dev/null @@ -1,145 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -mtllib cornell_box.mtl - -o floor -usemtl white -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -usemtl light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -usemtl white -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -usemtl white -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -usemtl blue -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -usemtl green -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -usemtl red -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block -usemtl white - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block -usemtl white - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -usemtl white -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/externals/tinyobjloader/models/cornell_box_multimaterial.obj b/externals/tinyobjloader/models/cornell_box_multimaterial.obj deleted file mode 100644 index 68093be..0000000 --- a/externals/tinyobjloader/models/cornell_box_multimaterial.obj +++ /dev/null @@ -1,146 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -mtllib cornell_box.mtl - -o floor -usemtl white -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -usemtl light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -usemtl white -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -usemtl white -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -usemtl blue -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -usemtl green -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -usemtl red -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block -usemtl white - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block -usemtl white - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -usemtl white -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 -usemtl green - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/externals/tinyobjloader/models/cube-vertexcol.obj b/externals/tinyobjloader/models/cube-vertexcol.obj deleted file mode 100644 index 494ce21..0000000 --- a/externals/tinyobjloader/models/cube-vertexcol.obj +++ /dev/null @@ -1,31 +0,0 @@ -mtllib cube.mtl - -v 0.000000 2.000000 2.000000 0 0 0 -v 0.000000 0.000000 2.000000 0 0 1 -v 2.000000 0.000000 2.000000 0 1 0 -v 2.000000 2.000000 2.000000 0 1 1 -v 0.000000 2.000000 0.000000 1 0 0 -v 0.000000 0.000000 0.000000 1 0 1 -v 2.000000 0.000000 0.000000 1 1 0 -v 2.000000 2.000000 0.000000 1 1 1 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/cube.mtl b/externals/tinyobjloader/models/cube.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/externals/tinyobjloader/models/cube.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/cube.obj b/externals/tinyobjloader/models/cube.obj deleted file mode 100644 index f12451f..0000000 --- a/externals/tinyobjloader/models/cube.obj +++ /dev/null @@ -1,32 +0,0 @@ -mtllib cube.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -# two white spaces between 'back' and 'cube' -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/invalid-face-definition.mtl b/externals/tinyobjloader/models/invalid-face-definition.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/externals/tinyobjloader/models/invalid-face-definition.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/invalid-face-definition.obj b/externals/tinyobjloader/models/invalid-face-definition.obj deleted file mode 100644 index 73ca678..0000000 --- a/externals/tinyobjloader/models/invalid-face-definition.obj +++ /dev/null @@ -1,18 +0,0 @@ -mtllib invalid-face-definition.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 -g back cube -# expects white material -f 8 7 diff --git a/externals/tinyobjloader/models/issue-138.mtl b/externals/tinyobjloader/models/issue-138.mtl deleted file mode 100644 index 8894d7e..0000000 --- a/externals/tinyobjloader/models/issue-138.mtl +++ /dev/null @@ -1,23 +0,0 @@ -newmtl test1 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.5 0.2 0.2 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - - newmtl test2 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.2 0.5 0.2 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 diff --git a/externals/tinyobjloader/models/issue-138.obj b/externals/tinyobjloader/models/issue-138.obj deleted file mode 100644 index 2465920..0000000 --- a/externals/tinyobjloader/models/issue-138.obj +++ /dev/null @@ -1,51 +0,0 @@ - -# cube.obj -# - -mtllib issue-138.mtl - -v -0.500000 -0.500000 0.500000 -v 0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -v -0.500000 0.500000 -0.500000 -v 0.500000 0.500000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v 0.500000 -0.500000 -0.500000 - -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 - -vn 0.000000 0.000000 1.000000 -vn 0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn -1.000000 0.000000 0.000000 - -usemtl test1 -g test1 -s 1 -f 1/1/1 2/2/1 3/3/1 -f 3/3/1 2/2/1 4/4/1 - -usemtl test2 -g test2 - -s 2 -f 3/1/2 4/2/2 5/3/2 -f 5/3/2 4/2/2 6/4/2 -s 3 -f 5/4/3 6/3/3 7/2/3 -f 7/2/3 6/3/3 8/1/3 -s 4 -f 7/1/4 8/2/4 1/3/4 -f 1/3/4 8/2/4 2/4/4 -s 5 -f 2/1/5 8/2/5 4/3/5 -f 4/3/5 8/2/5 6/4/5 -s 6 -f 7/1/6 1/2/6 5/3/6 -f 5/3/6 1/2/6 3/4/6 diff --git a/externals/tinyobjloader/models/issue-140-zero-face-idx.mtl b/externals/tinyobjloader/models/issue-140-zero-face-idx.mtl deleted file mode 100644 index 990a345..0000000 --- a/externals/tinyobjloader/models/issue-140-zero-face-idx.mtl +++ /dev/null @@ -1,2 +0,0 @@ -newmtl main -Kd 1 1 1 diff --git a/externals/tinyobjloader/models/issue-140-zero-face-idx.obj b/externals/tinyobjloader/models/issue-140-zero-face-idx.obj deleted file mode 100644 index 21a6060..0000000 --- a/externals/tinyobjloader/models/issue-140-zero-face-idx.obj +++ /dev/null @@ -1,17 +0,0 @@ -mtllib issue-140-zero-face-idx.mtl - -v -0.5 -0.5 0 -v 0.5 -0.5 0 -v 0.5 0.5 0 -v -0.5 0.5 0 - -vt 0 0 0 -vt 1 0 0 -vt 1 1 0 -vt 0 1 0 - -vn 0 0 -1 - -usemtl main -f 0/0/0 1/1/0 3/3/0 -f 1/1/0 3/3/0 2/2/0 diff --git a/externals/tinyobjloader/models/issue-161-inconsistent-f.obj b/externals/tinyobjloader/models/issue-161-inconsistent-f.obj deleted file mode 100644 index 6cd8c43..0000000 --- a/externals/tinyobjloader/models/issue-161-inconsistent-f.obj +++ /dev/null @@ -1,37 +0,0 @@ -o cube -mtllib cube.mtl - -v -0.500000 -0.500000 0.500000 -v 0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -v -0.500000 0.500000 -0.500000 -v 0.500000 0.500000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v 0.500000 -0.500000 -0.500000 - -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 - -g cube -usemtl cube -s 1 -f 1/1 2/2 3/3 -f 3/3 2/2 4/4 -s 2 -f 3/1 4/2 5/3 -f 5/3 4/2 6/4 -s 3 -f 5/4 6/3 7/2 -f 7/2 6/3 8/1 -s 4 -f 7/1 8/2 1/3 -f 1/3 8/2 2/4 -s 5 -f 2/1 8/2 4/3 -f 4/3 8/2 6/4 -s 6 -f 7/1 1/2 5/3 -f 5 1 3 diff --git a/externals/tinyobjloader/models/issue-162-smoothing-group.mtl b/externals/tinyobjloader/models/issue-162-smoothing-group.mtl deleted file mode 100644 index 8894d7e..0000000 --- a/externals/tinyobjloader/models/issue-162-smoothing-group.mtl +++ /dev/null @@ -1,23 +0,0 @@ -newmtl test1 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.5 0.2 0.2 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - - newmtl test2 - Ns 10.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.2 0.5 0.2 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 diff --git a/externals/tinyobjloader/models/issue-162-smoothing-group.obj b/externals/tinyobjloader/models/issue-162-smoothing-group.obj deleted file mode 100644 index 0b0c8b3..0000000 --- a/externals/tinyobjloader/models/issue-162-smoothing-group.obj +++ /dev/null @@ -1,51 +0,0 @@ - -# cube.obj -# - -mtllib issue-162-smoothing-group.mtl - -v -0.500000 -0.500000 0.500000 -v 0.500000 -0.500000 0.500000 -v -0.500000 0.500000 0.500000 -v 0.500000 0.500000 0.500000 -v -0.500000 0.500000 -0.500000 -v 0.500000 0.500000 -0.500000 -v -0.500000 -0.500000 -0.500000 -v 0.500000 -0.500000 -0.500000 - -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 - -vn 0.000000 0.000000 1.000000 -vn 0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn -1.000000 0.000000 0.000000 - -usemtl test1 -g test1 -s 1 -f 1/1/1 2/2/1 3/3/1 -f 3/3/1 2/2/1 4/4/1 - -usemtl test2 -g test2 - -s off -f 3/1/2 4/2/2 5/3/2 -f 5/3/2 4/2/2 6/4/2 -s 3 -f 5/4/3 6/3/3 7/2/3 -f 7/2/3 6/3/3 8/1/3 -s 4 -f 7/1/4 8/2/4 1/3/4 -f 1/3/4 8/2/4 2/4/4 -s 0 -f 2/1/5 8/2/5 4/3/5 -f 4/3/5 8/2/5 6/4/5 -s 6 -f 7/1/6 1/2/6 5/3/6 -f 5/3/6 1/2/6 3/4/6 diff --git a/externals/tinyobjloader/models/issue-235-usemtl-then-o.obj b/externals/tinyobjloader/models/issue-235-usemtl-then-o.obj deleted file mode 100644 index 170d33e..0000000 --- a/externals/tinyobjloader/models/issue-235-usemtl-then-o.obj +++ /dev/null @@ -1,21 +0,0 @@ -mtllib issue-235.mtl - -v -1.000000 1.202466 1.000000 -v 1.000000 1.202466 1.000000 -v -1.000000 1.202466 -1.000000 -v 1.000000 1.202466 -1.000000 -vn 0.0000 1.0000 0.0000 -v -1.000000 0.000000 1.000000 -v 1.000000 0.000000 1.000000 -v -1.000000 0.000000 -1.000000 -v 1.000000 0.000000 -1.000000 -vn 0.0000 1.0000 0.0000 - -usemtl None -o Plane.001 -f 1//1 2//1 4//1 - -# Following geometry is ignored without fix for #235 -usemtl None1 -o Plane -f 5//2 6//2 8//2 diff --git a/externals/tinyobjloader/models/issue-235.mtl b/externals/tinyobjloader/models/issue-235.mtl deleted file mode 100644 index 63c46a4..0000000 --- a/externals/tinyobjloader/models/issue-235.mtl +++ /dev/null @@ -1,11 +0,0 @@ -newmtl None -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl None1 -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - - diff --git a/externals/tinyobjloader/models/issue-244-mtl-searchpaths.obj b/externals/tinyobjloader/models/issue-244-mtl-searchpaths.obj deleted file mode 100644 index 58abea1..0000000 --- a/externals/tinyobjloader/models/issue-244-mtl-searchpaths.obj +++ /dev/null @@ -1,22 +0,0 @@ -# .mtl is located at tests/assets -mtllib issue-244.mtl - -v -1.000000 1.202466 1.000000 -v 1.000000 1.202466 1.000000 -v -1.000000 1.202466 -1.000000 -v 1.000000 1.202466 -1.000000 -vn 0.0000 1.0000 0.0000 -v -1.000000 0.000000 1.000000 -v 1.000000 0.000000 1.000000 -v -1.000000 0.000000 -1.000000 -v 1.000000 0.000000 -1.000000 -vn 0.0000 1.0000 0.0000 - -usemtl None -o Plane.001 -f 1//1 2//1 4//1 - -# Following geometry is ignored without fix for #235 -usemtl None1 -o Plane -f 5//2 6//2 8//2 diff --git a/externals/tinyobjloader/models/issue-246-usemtl-whitespace.mtl b/externals/tinyobjloader/models/issue-246-usemtl-whitespace.mtl deleted file mode 100644 index e7c91e3..0000000 --- a/externals/tinyobjloader/models/issue-246-usemtl-whitespace.mtl +++ /dev/null @@ -1,4 +0,0 @@ -newmtl 1 -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/issue-246-usemtl-whitespace.obj b/externals/tinyobjloader/models/issue-246-usemtl-whitespace.obj deleted file mode 100644 index f159349..0000000 --- a/externals/tinyobjloader/models/issue-246-usemtl-whitespace.obj +++ /dev/null @@ -1,17 +0,0 @@ -# .mtl is located at tests/assets -mtllib issue-246-usemtl-whitespace.mtl - -v -1.000000 1.202466 1.000000 -v 1.000000 1.202466 1.000000 -v -1.000000 1.202466 -1.000000 -v 1.000000 1.202466 -1.000000 -vn 0.0000 1.0000 0.0000 -v -1.000000 0.000000 1.000000 -v 1.000000 0.000000 1.000000 -v -1.000000 0.000000 -1.000000 -v 1.000000 0.000000 -1.000000 -vn 0.0000 1.0000 0.0000 - -usemtl 1 -o Plane.001 -f 1//1 2//1 4//1 diff --git a/externals/tinyobjloader/models/issue-248-texres-texopt.mtl b/externals/tinyobjloader/models/issue-248-texres-texopt.mtl deleted file mode 100644 index 537fa15..0000000 --- a/externals/tinyobjloader/models/issue-248-texres-texopt.mtl +++ /dev/null @@ -1,25 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 -map_Kd -texres 512 input.jpg - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/issue-248-texres-texopt.obj b/externals/tinyobjloader/models/issue-248-texres-texopt.obj deleted file mode 100644 index 43058a9..0000000 --- a/externals/tinyobjloader/models/issue-248-texres-texopt.obj +++ /dev/null @@ -1,32 +0,0 @@ -mtllib issue-248-texres-texopt.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -# two white spaces between 'back' and 'cube' -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/issue-295-trianguation-failure.obj b/externals/tinyobjloader/models/issue-295-trianguation-failure.obj deleted file mode 100644 index f3b2649..0000000 --- a/externals/tinyobjloader/models/issue-295-trianguation-failure.obj +++ /dev/null @@ -1,38 +0,0 @@ -#mtllib invalid.mtl -v 14678.0 0.0 9605.0 -v 14678.0 1.0 9605.0 -v 14678.0 0.0 9606.0 -v 14678.0 1.0 9606.0 -v 14678.0 0.0 9607.0 -v 14678.0 1.0 9607.0 -v 14678.0 0.0 9608.0 -v 14678.0 1.0 9608.0 -v 14679.0 0.0 9605.0 -v 14679.0 1.0 9605.0 -v 14679.0 0.0 9606.0 -v 14679.0 1.0 9606.0 -v 14679.0 0.0 9607.0 -v 14679.0 1.0 9607.0 -v 14679.0 0.0 9608.0 -v 14679.0 1.0 9608.0 -# UV -vt 0.0 0.0 -vt 1.0 0.0 -vt 1.0 1.0 -vt 0.0 1.0 -#usemtl invalid -o invalid -f 9/4 11/1 3/2 1/3 -f 4/1 12/2 10/3 2/4 -f 2/3 10/4 9/1 1/2 -f 3/2 4/3 2/4 1/1 -f 10/3 12/4 11/1 9/2 -f 11/4 13/1 5/2 3/3 -f 6/1 14/2 12/3 4/4 -f 5/2 6/3 4/4 3/1 -f 12/3 14/4 13/1 11/2 -f 13/4 15/1 7/2 5/3 -f 8/1 16/2 14/3 6/4 -f 15/2 16/3 8/4 7/1 -f 7/2 8/3 6/4 5/1 -f 14/3 16/4 15/1 13/2 diff --git a/externals/tinyobjloader/models/issue-92.mtl b/externals/tinyobjloader/models/issue-92.mtl deleted file mode 100644 index 5ebd668..0000000 --- a/externals/tinyobjloader/models/issue-92.mtl +++ /dev/null @@ -1,6 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -map_Kd tmp.png - diff --git a/externals/tinyobjloader/models/issue-92.obj b/externals/tinyobjloader/models/issue-92.obj deleted file mode 100644 index f7be3b6..0000000 --- a/externals/tinyobjloader/models/issue-92.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib issue-92.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/issue-95-2.mtl b/externals/tinyobjloader/models/issue-95-2.mtl deleted file mode 100644 index 68d484c..0000000 --- a/externals/tinyobjloader/models/issue-95-2.mtl +++ /dev/null @@ -1,5 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Tf 0.1 0.2 0.3 diff --git a/externals/tinyobjloader/models/issue-95-2.obj b/externals/tinyobjloader/models/issue-95-2.obj deleted file mode 100644 index 456f854..0000000 --- a/externals/tinyobjloader/models/issue-95-2.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib issue-95-2.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/issue-95.mtl b/externals/tinyobjloader/models/issue-95.mtl deleted file mode 100644 index 1d29fee..0000000 --- a/externals/tinyobjloader/models/issue-95.mtl +++ /dev/null @@ -1,5 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 diff --git a/externals/tinyobjloader/models/issue-95.obj b/externals/tinyobjloader/models/issue-95.obj deleted file mode 100644 index 8ee267e..0000000 --- a/externals/tinyobjloader/models/issue-95.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib issue-95.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/leading-decimal-dot-issue-201.mtl b/externals/tinyobjloader/models/leading-decimal-dot-issue-201.mtl deleted file mode 100644 index 1d29fee..0000000 --- a/externals/tinyobjloader/models/leading-decimal-dot-issue-201.mtl +++ /dev/null @@ -1,5 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 diff --git a/externals/tinyobjloader/models/leading-decimal-dot-issue-201.obj b/externals/tinyobjloader/models/leading-decimal-dot-issue-201.obj deleted file mode 100644 index 202cfdc..0000000 --- a/externals/tinyobjloader/models/leading-decimal-dot-issue-201.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib leading-decimal-dot-issue-201.mtl -o Test -v .8e-1 -.7e+2 -5.532511 -v .575869 -.666304 5.896140 -v .940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.mtl b/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.mtl deleted file mode 100644 index 1d29fee..0000000 --- a/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.mtl +++ /dev/null @@ -1,5 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 diff --git a/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.obj b/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.obj deleted file mode 100644 index cf6f99b..0000000 --- a/externals/tinyobjloader/models/leading-zero-in-exponent-notation-issue-210.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib leading-zero-in-exponent-notation-issue-210.mtl -o Test -v .8e-001 -.7e+02 -5.532511 -v .575869 -.666304 5.896140 -v .940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/line-prim.obj b/externals/tinyobjloader/models/line-prim.obj deleted file mode 100644 index 22f55d3..0000000 --- a/externals/tinyobjloader/models/line-prim.obj +++ /dev/null @@ -1,16 +0,0 @@ -mtllib cube.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g g0 -usemtl white -l 1 2 3 4 -l 5 6 7 8 diff --git a/externals/tinyobjloader/models/map-bump.mtl b/externals/tinyobjloader/models/map-bump.mtl deleted file mode 100644 index 6fb1291..0000000 --- a/externals/tinyobjloader/models/map-bump.mtl +++ /dev/null @@ -1,10 +0,0 @@ -newmtl Material.001 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -map_Bump bump.jpg - -newmtl Material.003 -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/map-bump.obj b/externals/tinyobjloader/models/map-bump.obj deleted file mode 100644 index 03071f1..0000000 --- a/externals/tinyobjloader/models/map-bump.obj +++ /dev/null @@ -1,817 +0,0 @@ -# https://github.com/syoyo/tinyobjloader/issues/68 -# Blender v2.73 (sub 0) OBJ File: 'enemy.blend' -# www.blender.org -mtllib map-bump.mtl -o Cube -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -v 1.620345 1.000000 -5.815706 -v 1.864152 1.000000 -6.334323 -v 0.575869 -0.129842 5.896143 -v 5.440438 -1.462153 -5.818601 -v 4.896782 -1.462153 -2.744413 -v 1.000825 -0.677484 1.899605 -v 5.440438 -1.246362 -5.818600 -v 1.000825 0.852342 1.899608 -v 4.896782 -1.246362 -2.744412 -v 1.160660 -0.450871 -2.356325 -v 1.704316 -0.450871 -5.430513 -v 1.000825 -0.351920 -1.293797 -v 1.000825 1.000000 -1.293794 -v 1.160660 -0.877888 -2.356326 -v 1.704316 -0.877888 -5.430514 -v 1.000825 -1.219172 -1.452514 -v 1.000825 1.000000 -1.452511 -v 1.000825 -0.351920 1.759410 -v 1.000825 1.000000 1.759413 -v 9.097919 1.221145 -6.212147 -v 8.356775 1.221145 -2.021231 -v 1.864151 -0.109586 -6.334325 -v 0.575869 -0.398073 5.896141 -v 9.097919 0.943958 -6.212148 -v 8.356775 0.943958 -2.021233 -v 1.061916 0.113661 -1.797961 -v 1.000825 0.161258 1.899606 -v 1.000825 0.324040 -1.293795 -v 1.803060 0.113661 -5.988876 -v 1.000825 -0.109586 -1.452513 -v 1.061916 0.776753 -1.797960 -v 1.803061 0.776753 -5.988875 -v 1.000825 0.324040 1.759412 -v 0.000825 -1.219172 -5.532512 -v 0.000825 -0.666304 5.896139 -v 0.000826 1.000000 -6.334325 -v 0.000825 -0.129842 5.896140 -v 0.000825 0.852342 1.899606 -v 0.000825 -0.677484 1.899604 -v 0.000825 -0.351920 -1.293797 -v 0.000825 1.000000 -1.293796 -v 0.000825 1.000000 -1.452513 -v 0.000825 -1.219172 -1.452515 -v 0.000825 -0.351920 1.759409 -v 0.000825 1.000000 1.759411 -v 0.000826 -0.109586 -6.334326 -v 0.000825 -0.398073 5.896140 -v 0.152918 1.000000 -5.815708 -v 0.152917 1.000000 -1.971130 -v 0.940448 1.168419 -1.971128 -v 1.620345 1.168419 -5.815706 -v 0.152918 1.168419 -5.815708 -v 0.152917 1.168419 -1.971130 -v 0.921118 1.091883 -1.050430 -v 0.921118 1.091883 1.516050 -v 0.080533 1.091883 -1.050432 -v 0.080533 1.091883 1.516048 -v 0.613003 -0.553430 5.546911 -v 0.963691 -0.559956 2.248834 -v 0.613003 -0.396857 5.546912 -v 0.963691 -0.070362 2.248835 -v 1.499370 -0.994317 3.966028 -v 1.850058 -0.997914 0.667950 -v 1.499370 -0.908021 3.966029 -v 1.850058 -0.728071 0.667951 -v 1.601022 0.760960 -6.334324 -v 1.601021 0.129454 -6.334325 -v 0.263955 0.760960 -6.334325 -v 0.263955 0.129454 -6.334325 -v 1.334809 0.760960 -7.515329 -v 1.334809 0.129455 -7.515330 -v 0.530168 0.760960 -7.515330 -v 0.530168 0.129455 -7.515330 -v 1.192720 0.649445 -7.515329 -v 1.192720 0.240971 -7.515330 -v 0.672258 0.649445 -7.515330 -v 0.672258 0.240971 -7.515330 -v 1.192719 0.649444 -6.524630 -v 1.192719 0.240970 -6.524631 -v 0.672257 0.649444 -6.524631 -v 0.672257 0.240970 -6.524631 -v 3.851026 0.431116 -1.883326 -v 3.851026 0.946662 -1.883325 -v 4.592170 0.946662 -6.074241 -v 4.592169 0.431116 -6.074242 -v 4.995714 0.561404 -1.918362 -v 4.995714 1.016394 -1.918360 -v 5.736857 1.016394 -6.109276 -v 5.736857 0.561404 -6.109277 -v 3.975454 0.471731 -2.162156 -v 3.975454 0.919244 -2.162155 -v 4.618796 0.919244 -5.800034 -v 4.618795 0.471730 -5.800035 -v 4.969088 0.584825 -2.192568 -v 4.969088 0.979775 -2.192567 -v 5.612430 0.979775 -5.830446 -v 5.612429 0.584825 -5.830447 -v 0.864214 -0.673890 3.184381 -v 0.864213 0.489129 3.184384 -v 0.864213 -0.018552 3.184383 -v 0.000825 0.489129 3.184382 -v 0.000825 -0.673890 3.184381 -v 0.850955 -0.557858 3.309075 -v 0.850955 -0.175321 3.309076 -v 1.737321 -0.996758 1.728192 -v 1.737321 -0.785920 1.728193 -v -1.864151 -1.219172 -5.532511 -v -0.575869 -0.666304 5.896140 -v -0.940448 1.000000 -1.971128 -v -1.620345 1.000000 -5.815706 -v -1.864152 1.000000 -6.334323 -v -0.575869 -0.129842 5.896143 -v -5.440438 -1.462153 -5.818601 -v -4.896782 -1.462153 -2.744413 -v -1.000825 -0.677484 1.899605 -v -5.440438 -1.246362 -5.818600 -v -1.000825 0.852342 1.899608 -v -4.896782 -1.246362 -2.744412 -v -1.160660 -0.450871 -2.356325 -v -1.704316 -0.450871 -5.430513 -v -1.000825 -0.351920 -1.293797 -v -1.000825 1.000000 -1.293794 -v -1.160660 -0.877888 -2.356326 -v -1.704316 -0.877888 -5.430514 -v -1.000825 -1.219172 -1.452514 -v -1.000825 1.000000 -1.452511 -v -1.000825 -0.351920 1.759410 -v -1.000825 1.000000 1.759413 -v -9.097919 1.221145 -6.212147 -v -8.356775 1.221145 -2.021231 -v -1.864151 -0.109586 -6.334325 -v -0.575869 -0.398073 5.896141 -v -9.097919 0.943958 -6.212148 -v -8.356775 0.943958 -2.021233 -v -1.061916 0.113661 -1.797961 -v -1.000825 0.161258 1.899606 -v -1.000825 0.324040 -1.293795 -v -1.803060 0.113661 -5.988876 -v -1.000825 -0.109586 -1.452513 -v -1.061916 0.776753 -1.797960 -v -1.803061 0.776753 -5.988875 -v -1.000825 0.324040 1.759412 -v -0.000825 -1.219172 -5.532512 -v -0.000825 -0.666304 5.896139 -v -0.000826 1.000000 -6.334325 -v -0.000825 -0.129842 5.896140 -v -0.000825 0.852342 1.899606 -v -0.000825 -0.677484 1.899604 -v -0.000825 -0.351920 -1.293797 -v -0.000825 1.000000 -1.293796 -v -0.000825 1.000000 -1.452513 -v -0.000825 -1.219172 -1.452515 -v -0.000825 -0.351920 1.759409 -v -0.000825 1.000000 1.759411 -v -0.000826 -0.109586 -6.334326 -v -0.000825 -0.398073 5.896140 -v -0.152918 1.000000 -5.815708 -v -0.152917 1.000000 -1.971130 -v -0.940448 1.168419 -1.971128 -v -1.620345 1.168419 -5.815706 -v -0.152918 1.168419 -5.815708 -v -0.152917 1.168419 -1.971130 -v -0.921118 1.091883 -1.050430 -v -0.921118 1.091883 1.516050 -v -0.080533 1.091883 -1.050432 -v -0.080533 1.091883 1.516048 -v -0.613003 -0.553430 5.546911 -v -0.963691 -0.559956 2.248834 -v -0.613003 -0.396857 5.546912 -v -0.963691 -0.070362 2.248835 -v -1.499370 -0.994317 3.966028 -v -1.850058 -0.997914 0.667950 -v -1.499370 -0.908021 3.966029 -v -1.850058 -0.728071 0.667951 -v -1.601022 0.760960 -6.334324 -v -1.601021 0.129454 -6.334325 -v -0.263955 0.760960 -6.334325 -v -0.263955 0.129454 -6.334325 -v -1.334809 0.760960 -7.515329 -v -1.334809 0.129455 -7.515330 -v -0.530168 0.760960 -7.515330 -v -0.530168 0.129455 -7.515330 -v -1.192720 0.649445 -7.515329 -v -1.192720 0.240971 -7.515330 -v -0.672258 0.649445 -7.515330 -v -0.672258 0.240971 -7.515330 -v -1.192719 0.649444 -6.524630 -v -1.192719 0.240970 -6.524631 -v -0.672257 0.649444 -6.524631 -v -0.672257 0.240970 -6.524631 -v -3.851026 0.431116 -1.883326 -v -3.851026 0.946662 -1.883325 -v -4.592170 0.946662 -6.074241 -v -4.592169 0.431116 -6.074242 -v -4.995714 0.561404 -1.918362 -v -4.995714 1.016394 -1.918360 -v -5.736857 1.016394 -6.109276 -v -5.736857 0.561404 -6.109277 -v -3.975454 0.471731 -2.162156 -v -3.975454 0.919244 -2.162155 -v -4.618796 0.919244 -5.800034 -v -4.618795 0.471730 -5.800035 -v -4.969088 0.584825 -2.192568 -v -4.969088 0.979775 -2.192567 -v -5.612430 0.979775 -5.830446 -v -5.612429 0.584825 -5.830447 -v -0.864214 -0.673890 3.184381 -v -0.864213 0.489129 3.184384 -v -0.864213 -0.018552 3.184383 -v -0.000825 0.489129 3.184382 -v -0.000825 -0.673890 3.184381 -v -0.850955 -0.557858 3.309075 -v -0.850955 -0.175321 3.309076 -v -1.737321 -0.996758 1.728192 -v -1.737321 -0.785920 1.728193 -vt 0.135351 -0.558072 -vt 0.003035 -0.363507 -vt 0.092282 -0.976844 -vt -0.081322 0.947351 -vt 0.100058 1.958891 -vt 0.050091 1.852185 -vt -0.092752 1.055565 -vt -0.251711 1.059474 -vt 0.075587 0.041384 -vt -0.086008 0.279003 -vt -0.086212 0.249830 -vt -0.276044 1.968137 -vt -0.246101 1.859467 -vt 0.009828 1.911388 -vt -0.133014 1.114769 -vt 0.413322 1.261595 -vt 0.299103 0.624605 -vt 1.243955 0.407183 -vt 0.515404 1.111487 -vt 1.358173 1.044173 -vt -0.081553 0.914324 -vt 0.080042 0.676706 -vt 0.401185 0.474498 -vt 1.295541 0.331328 -vt 0.365315 1.568841 -vt 0.299111 1.575740 -vt 0.143401 0.707357 -vt 0.629403 1.011947 -vt 0.449192 0.167251 -vt 1.409760 0.968317 -vt 0.986264 1.738667 -vt 1.573373 1.877873 -vt 1.417663 1.009490 -vt 0.237182 -0.196235 -vt 0.721785 1.030226 -vt 0.830554 0.870285 -vt 0.877494 1.898608 -vt 1.351399 1.106930 -vt 0.183935 0.557301 -vt 1.507109 1.975312 -vt 0.241636 0.439088 -vt 0.114297 -0.045011 -vt 0.140593 1.808834 -vt -0.015118 0.940452 -vt 0.156405 -1.071134 -vt 0.164119 -0.998223 -vt 0.040336 -1.068281 -vt 0.104459 -1.162571 -vt -0.165787 1.882802 -vt -0.014821 1.660811 -vt -0.287852 0.283965 -vt -0.293374 0.366508 -vt -0.289630 0.900550 -vt 0.035337 -0.191272 -vt 0.247348 0.172213 -vt 0.253300 1.021193 -vt -0.283166 0.952313 -vt -0.283398 0.919286 -vt 0.039792 0.444050 -vt 0.314806 -0.339851 -vt 0.112962 -0.334889 -vt -0.288056 0.254793 -vt -0.023788 -0.973990 -vt -0.155922 -0.359599 -vt 0.220528 -1.165425 -vt 0.108710 -0.748730 -vt -0.286364 1.918670 -vt -0.291973 1.118678 -vt -0.119962 0.896379 -vt -0.123707 0.362337 -vt 0.162891 -0.598569 -vt 0.467532 -0.853353 -vt 0.201549 -1.053262 -vt 0.161663 -0.198915 -vt 0.267667 -0.752638 -vt 0.278705 -0.371021 -vt 0.526390 -0.542053 -vt 0.483821 -0.479457 -vt 0.488162 -0.883689 -vt 0.500110 -0.105561 -vt 0.564618 -0.200418 -vt -0.110331 2.127229 -vt 0.040636 1.905238 -vt -0.010786 1.578087 -vt 0.104092 1.876168 -vt 0.255058 1.654176 -vt -0.054992 2.087323 -vt 0.203048 1.901245 -vt 0.052081 2.123235 -vt 0.042658 1.943733 -vt -0.056437 1.881175 -vt 0.147710 1.941151 -vt 0.050060 2.084741 -vt 0.146264 1.735002 -vt 0.041212 1.737584 -vt 0.048615 1.878591 -vt 0.663065 1.872485 -vt 0.786311 1.691257 -vt 0.507355 1.004102 -vt 0.630601 0.822874 -vt 0.955144 1.689498 -vt 0.860727 1.828333 -vt 0.725565 1.074543 -vt 0.819981 0.935708 -vt 0.674594 1.805657 -vt 0.539432 1.051867 -vt 0.646413 0.894554 -vt 0.781576 1.648344 -vt 0.240127 -0.712141 -vn 0.994400 0.000000 0.105700 -vn 0.000000 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.984700 0.000000 0.174100 -vn 0.211800 0.976600 0.037500 -vn -0.103300 0.000000 -0.994600 -vn 0.103300 -0.000000 0.994600 -vn 0.911400 0.378700 0.161200 -vn -0.157300 -0.987200 -0.027800 -vn 0.113700 -0.993300 0.020100 -vn 0.030600 -0.000000 0.999500 -vn -0.061100 0.998100 -0.010800 -vn -0.030600 0.000000 -0.999500 -vn -0.000000 -0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -vn -0.755400 0.655300 0.000000 -vn 0.000000 -1.000000 0.000000 -vn -0.000000 -0.180000 0.983700 -vn 0.000000 -0.395500 -0.918500 -vn -0.000000 0.688500 0.725200 -vn 0.000000 -0.585700 -0.810500 -vn -0.000000 0.974900 0.222500 -vn -0.000000 -1.000000 0.002800 -vn -1.000000 0.000000 -0.000000 -vn -0.000000 0.935500 0.353200 -vn 0.755400 0.655300 0.000000 -vn 0.000000 0.935500 -0.353200 -vn 0.673800 0.724900 0.143400 -vn 0.872300 -0.000000 0.489100 -vn -0.872300 0.000000 -0.489100 -vn -0.518300 -0.853500 -0.054200 -vn -0.975500 0.000000 -0.219900 -vn 0.975500 0.000000 -0.219900 -vn -0.913200 0.000000 -0.407500 -vn -0.436900 0.896200 -0.077300 -vn -0.995300 -0.000000 0.096600 -vn -0.297300 -0.953400 -0.052600 -vn 0.473900 -0.876600 0.083800 -vn 0.913200 0.000000 0.407500 -vn 0.342200 0.937700 0.060500 -vn 0.995300 -0.000000 -0.096600 -vn -0.519200 -0.853000 -0.054300 -vn 0.722400 0.676400 0.143800 -vn -0.994400 0.000000 0.105700 -vn -0.984700 0.000000 0.174100 -vn -0.211800 0.976600 0.037500 -vn 0.103300 0.000000 -0.994600 -vn -0.103300 -0.000000 0.994600 -vn -0.911400 0.378700 0.161200 -vn 0.157300 -0.987200 -0.027800 -vn -0.113700 -0.993300 0.020100 -vn -0.030600 -0.000000 0.999500 -vn 0.061100 0.998100 -0.010800 -vn 0.030600 0.000000 -0.999500 -vn -0.691900 0.713200 0.112500 -vn -0.872300 -0.000000 0.489100 -vn 0.872300 0.000000 -0.489100 -vn 0.518300 -0.853500 -0.054200 -vn 0.913200 0.000000 -0.407500 -vn 0.436900 0.896200 -0.077300 -vn 0.995300 0.000000 0.096600 -vn 0.297300 -0.953300 -0.052600 -vn -0.473900 -0.876600 0.083800 -vn -0.913200 -0.000000 0.407500 -vn -0.342200 0.937700 0.060500 -vn -0.995300 -0.000000 -0.096600 -vn 0.519200 -0.853000 -0.054300 -vn -0.714800 0.690100 0.113700 -vn 0.974400 0.089700 0.206200 -vn 0.870400 0.288400 0.399100 -vn 0.691900 0.713200 0.112500 -vn -0.518000 -0.853700 -0.053400 -vn -0.519700 -0.852700 -0.053600 -vn 0.714800 0.690100 0.113700 -vn -0.974400 0.089700 0.206200 -vn -0.870400 0.288400 0.399100 -vn -0.673800 0.724900 0.143400 -vn 0.518000 -0.853700 -0.053400 -vn 0.297300 -0.953400 -0.052600 -vn 0.519700 -0.852700 -0.053600 -vn -0.722400 0.676400 0.143800 -vn -0.000000 0.962300 0.272000 -usemtl Material.001 -s off -f 103/1/1 102/2/1 6/3/1 -f 20/4/2 5/5/2 4/6/2 -f 20/4/2 3/7/2 52/8/2 -f 36/9/3 22/10/3 11/11/3 -f 39/12/2 51/13/2 4/6/2 -f 4/6/4 54/14/4 53/15/4 -f 14/16/5 13/17/5 12/18/5 -f 18/19/6 14/16/6 10/20/6 -f 20/4/3 16/21/3 31/22/3 -f 17/23/7 8/24/7 12/18/7 -f 25/25/4 32/26/4 29/27/4 -f 10/20/4 12/18/4 8/24/4 -f 1/28/8 18/19/8 17/23/8 -f 19/29/4 17/23/4 13/17/4 -f 25/25/4 14/16/4 18/19/4 -f 18/19/9 7/30/9 8/24/9 -f 92/31/10 27/32/10 28/33/10 -f 16/21/3 22/10/3 36/9/3 -f 31/22/3 36/9/3 21/34/3 -f 90/35/11 89/36/11 28/33/11 -f 91/37/12 90/35/12 24/38/12 -f 33/39/4 13/17/4 14/16/4 -f 23/40/4 24/38/4 28/33/4 -f 33/39/3 31/22/3 15/41/3 -f 21/34/3 36/9/3 30/42/3 -f 5/5/4 35/43/4 32/26/4 -f 5/5/4 20/4/4 34/44/4 -f 33/39/4 29/27/4 34/44/4 -f 91/37/13 23/40/13 27/32/13 -f 103/1/1 26/45/1 63/46/1 -f 26/45/14 50/47/14 38/48/14 -f 39/12/15 71/49/15 72/50/15 -f 48/51/16 60/52/16 59/53/16 -f 15/41/17 21/34/17 47/54/17 -f 19/29/17 46/55/17 37/56/17 -f 39/12/2 45/57/2 52/8/2 -f 20/4/2 45/57/2 44/58/2 -f 19/29/18 15/41/18 43/59/18 -f 9/60/19 42/61/19 47/54/19 -f 22/10/20 48/51/20 41/62/20 -f 25/25/21 1/28/21 37/56/21 -f 6/3/14 40/63/14 50/47/14 -f 104/64/22 40/63/22 6/3/22 -f 2/65/23 38/48/23 105/66/23 -f 55/67/2 56/68/2 53/15/2 -f 3/7/14 53/15/14 56/68/14 -f 51/13/15 55/67/15 54/14/15 -f 52/8/24 56/68/24 55/67/24 -f 57/69/2 59/53/2 60/52/2 -f 48/51/25 22/10/25 58/70/25 -f 16/21/26 57/69/26 58/70/26 -f 16/21/27 44/58/27 59/53/27 -f 107/71/28 63/46/28 67/72/28 -f 26/45/1 2/65/1 61/73/1 -f 9/60/1 30/42/1 64/74/1 -f 101/75/1 9/60/1 62/76/1 -f 108/77/1 109/78/1 67/72/1 -f 61/73/29 65/79/29 67/72/29 -f 62/76/30 64/74/30 68/80/30 -f 62/76/31 66/81/31 108/77/31 -f 71/49/32 75/82/32 76/83/32 -f 25/25/15 49/84/15 72/50/15 -f 5/5/15 69/85/15 71/49/15 -f 25/25/15 70/86/15 69/85/15 -f 76/83/15 75/82/15 79/87/15 -f 72/50/17 76/83/17 74/88/17 -f 71/49/2 69/85/2 73/89/2 -f 70/86/33 74/88/33 73/89/33 -f 80/90/3 79/87/3 83/91/3 -f 76/83/15 80/90/15 78/92/15 -f 75/82/15 73/89/15 77/93/15 -f 74/88/15 78/92/15 77/93/15 -f 82/94/15 84/95/15 83/91/15 -f 80/90/2 84/95/2 82/94/2 -f 77/93/17 81/96/17 83/91/17 -f 77/93/24 78/92/24 82/94/24 -f 35/43/13 87/97/13 88/98/13 -f 35/43/12 34/44/12 86/99/12 -f 34/44/11 29/27/11 85/100/11 -f 32/26/10 88/98/10 85/100/10 -f 92/31/34 100/101/34 99/102/34 -f 90/35/35 91/37/35 99/102/35 -f 89/36/36 90/35/36 98/103/36 -f 89/36/37 97/104/37 100/101/37 -f 95/105/13 99/102/13 100/101/13 -f 95/105/12 94/106/12 98/103/12 -f 94/106/11 93/107/11 97/104/11 -f 96/108/10 100/101/10 97/104/10 -f 88/98/38 96/108/38 93/107/38 -f 86/99/39 85/100/39 93/107/39 -f 87/97/40 86/99/40 94/106/40 -f 87/97/41 95/105/41 96/108/41 -f 106/109/42 108/77/42 65/79/42 -f 66/81/1 68/80/1 109/78/1 -f 101/75/1 106/109/1 61/73/1 -f 64/74/43 107/71/43 109/78/43 -f 101/75/23 105/66/23 42/61/23 -f 103/1/1 107/71/1 64/74/1 -f 30/42/1 11/11/1 102/2/1 -f 212/1/44 135/45/44 115/3/44 -f 129/4/2 112/7/2 113/6/2 -f 161/8/2 112/7/2 129/4/2 -f 145/9/24 139/42/24 120/11/24 -f 113/6/2 160/13/2 148/12/2 -f 162/15/45 163/14/45 113/6/45 -f 123/16/46 119/20/46 121/18/46 -f 127/19/47 116/30/47 119/20/47 -f 140/22/24 125/21/24 129/4/24 -f 121/18/48 117/24/48 126/23/48 -f 138/27/45 141/26/45 134/25/45 -f 117/24/45 121/18/45 119/20/45 -f 126/23/49 127/19/49 110/28/49 -f 122/17/45 126/23/45 128/29/45 -f 127/19/45 123/16/45 134/25/45 -f 117/24/50 116/30/50 127/19/50 -f 137/33/51 136/32/51 201/31/51 -f 145/9/24 131/10/24 125/21/24 -f 130/34/24 145/9/24 140/22/24 -f 199/35/52 133/38/52 137/33/52 -f 200/37/53 132/40/53 133/38/53 -f 123/16/45 122/17/45 142/39/45 -f 137/33/45 133/38/45 132/40/45 -f 124/41/24 140/22/24 142/39/24 -f 130/34/24 118/60/24 139/42/24 -f 141/26/45 144/43/45 114/5/45 -f 114/5/45 144/43/45 143/44/45 -f 143/44/45 138/27/45 142/39/45 -f 136/32/54 132/40/54 200/37/54 -f 212/1/44 216/71/44 172/46/44 -f 147/48/14 159/47/14 135/45/14 -f 181/50/15 180/49/15 148/12/15 -f 168/53/26 169/52/26 157/51/26 -f 124/41/17 152/59/17 156/54/17 -f 146/56/17 155/55/17 128/29/17 -f 148/12/2 160/13/2 161/8/2 -f 129/4/2 125/21/2 153/58/2 -f 155/55/18 152/59/18 124/41/18 -f 130/34/19 156/54/19 151/61/19 -f 131/10/20 120/11/20 150/62/20 -f 134/25/21 158/84/21 146/56/21 -f 159/47/14 149/63/14 115/3/14 -f 115/3/22 149/63/22 213/64/22 -f 214/66/23 147/48/23 111/65/23 -f 162/15/2 165/68/2 164/67/2 -f 165/68/14 162/15/14 112/7/14 -f 163/14/15 164/67/15 160/13/15 -f 164/67/3 165/68/3 161/8/3 -f 166/69/2 167/70/2 169/52/2 -f 157/51/25 169/52/25 167/70/25 -f 167/70/16 166/69/16 125/21/16 -f 125/21/27 166/69/27 168/53/27 -f 216/71/55 218/78/55 176/72/55 -f 135/45/44 172/46/44 170/73/44 -f 118/60/44 171/76/44 173/74/44 -f 210/75/44 215/109/44 171/76/44 -f 217/77/44 174/79/44 176/72/44 -f 176/72/56 174/79/56 170/73/56 -f 171/76/57 175/81/57 177/80/57 -f 217/77/58 175/81/58 171/76/58 -f 185/83/33 184/82/33 180/49/33 -f 134/25/15 179/86/15 181/50/15 -f 180/49/15 178/85/15 114/5/15 -f 178/85/15 179/86/15 134/25/15 -f 189/90/15 188/87/15 184/82/15 -f 183/88/17 185/83/17 181/50/17 -f 180/49/2 184/82/2 182/89/2 -f 182/89/32 183/88/32 179/86/32 -f 189/90/24 193/95/24 192/91/24 -f 187/92/15 189/90/15 185/83/15 -f 184/82/15 188/87/15 186/93/15 -f 186/93/15 187/92/15 183/88/15 -f 192/91/15 193/95/15 191/94/15 -f 191/94/2 193/95/2 189/90/2 -f 192/91/17 190/96/17 186/93/17 -f 186/93/3 190/96/3 191/94/3 -f 197/98/54 196/97/54 144/43/54 -f 144/43/53 196/97/53 195/99/53 -f 143/44/52 195/99/52 194/100/52 -f 194/100/51 197/98/51 141/26/51 -f 208/102/59 209/101/59 201/31/59 -f 199/35/60 207/103/60 208/102/60 -f 198/36/61 206/104/61 207/103/61 -f 209/101/62 206/104/62 198/36/62 -f 209/101/54 208/102/54 204/105/54 -f 204/105/53 208/102/53 207/103/53 -f 203/106/52 207/103/52 206/104/52 -f 206/104/51 209/101/51 205/108/51 -f 202/107/63 205/108/63 197/98/63 -f 195/99/64 203/106/64 202/107/64 -f 196/97/65 204/105/65 203/106/65 -f 205/108/66 204/105/66 196/97/66 -f 174/79/67 217/77/67 215/109/67 -f 175/81/44 217/77/44 218/78/44 -f 170/73/44 215/109/44 210/75/44 -f 173/74/68 177/80/68 218/78/68 -f 151/61/23 214/66/23 210/75/23 -f 173/74/44 216/71/44 212/1/44 -f 139/42/44 212/1/44 211/2/44 -f 26/45/1 103/1/1 6/3/1 -f 3/7/2 20/4/2 4/6/2 -f 45/57/2 20/4/2 52/8/2 -f 30/42/3 36/9/3 11/11/3 -f 5/5/2 39/12/2 4/6/2 -f 3/7/4 4/6/4 53/15/4 -f 10/20/5 14/16/5 12/18/5 -f 7/30/6 18/19/6 10/20/6 -f 33/39/3 20/4/3 31/22/3 -f 13/17/7 17/23/7 12/18/7 -f 33/39/4 25/25/4 29/27/4 -f 7/30/4 10/20/4 8/24/4 -f 19/29/69 1/28/69 17/23/69 -f 33/39/4 19/29/4 13/17/4 -f 1/28/70 25/25/70 18/19/70 -f 17/23/9 18/19/9 8/24/9 -f 89/36/10 92/31/10 28/33/10 -f 31/22/3 16/21/3 36/9/3 -f 15/41/3 31/22/3 21/34/3 -f 24/38/11 90/35/11 28/33/11 -f 23/40/12 91/37/12 24/38/12 -f 25/25/4 33/39/4 14/16/4 -f 27/32/4 23/40/4 28/33/4 -f 19/29/3 33/39/3 15/41/3 -f 9/60/3 21/34/3 30/42/3 -f 25/25/4 5/5/4 32/26/4 -f 35/43/4 5/5/4 34/44/4 -f 20/4/4 33/39/4 34/44/4 -f 92/31/13 91/37/13 27/32/13 -f 107/71/1 103/1/1 63/46/1 -f 2/65/14 26/45/14 38/48/14 -f 49/84/15 39/12/15 72/50/15 -f 44/58/16 48/51/16 59/53/16 -f 43/59/17 15/41/17 47/54/17 -f 1/28/17 19/29/17 37/56/17 -f 51/13/2 39/12/2 52/8/2 -f 16/21/2 20/4/2 44/58/2 -f 46/55/18 19/29/18 43/59/18 -f 21/34/19 9/60/19 47/54/19 -f 11/11/20 22/10/20 41/62/20 -f 49/84/21 25/25/21 37/56/21 -f 26/45/14 6/3/14 50/47/14 -f 102/2/22 104/64/22 6/3/22 -f 101/75/23 2/65/23 105/66/23 -f 54/14/2 55/67/2 53/15/2 -f 52/8/14 3/7/14 56/68/14 -f 4/6/15 51/13/15 54/14/15 -f 51/13/24 52/8/24 55/67/24 -f 58/70/2 57/69/2 60/52/2 -f 60/52/25 48/51/25 58/70/25 -f 22/10/26 16/21/26 58/70/26 -f 57/69/27 16/21/27 59/53/27 -f 109/78/71 107/71/71 67/72/71 -f 63/46/1 26/45/1 61/73/1 -f 62/76/1 9/60/1 64/74/1 -f 106/109/1 101/75/1 62/76/1 -f 65/79/1 108/77/1 67/72/1 -f 63/46/29 61/73/29 67/72/29 -f 66/81/30 62/76/30 68/80/30 -f 106/109/72 62/76/72 108/77/72 -f 72/50/32 71/49/32 76/83/32 -f 70/86/15 25/25/15 72/50/15 -f 39/12/15 5/5/15 71/49/15 -f 5/5/15 25/25/15 69/85/15 -f 80/90/15 76/83/15 79/87/15 -f 70/86/17 72/50/17 74/88/17 -f 75/82/2 71/49/2 73/89/2 -f 69/85/33 70/86/33 73/89/33 -f 84/95/3 80/90/3 83/91/3 -f 74/88/15 76/83/15 78/92/15 -f 79/87/15 75/82/15 77/93/15 -f 73/89/15 74/88/15 77/93/15 -f 81/96/15 82/94/15 83/91/15 -f 78/92/2 80/90/2 82/94/2 -f 79/87/17 77/93/17 83/91/17 -f 81/96/24 77/93/24 82/94/24 -f 32/26/13 35/43/13 88/98/13 -f 87/97/12 35/43/12 86/99/12 -f 86/99/11 34/44/11 85/100/11 -f 29/27/10 32/26/10 85/100/10 -f 91/37/34 92/31/34 99/102/34 -f 98/103/35 90/35/35 99/102/35 -f 97/104/36 89/36/36 98/103/36 -f 92/31/37 89/36/37 100/101/37 -f 96/108/13 95/105/13 100/101/13 -f 99/102/12 95/105/12 98/103/12 -f 98/103/11 94/106/11 97/104/11 -f 93/107/10 96/108/10 97/104/10 -f 85/100/38 88/98/38 93/107/38 -f 94/106/39 86/99/39 93/107/39 -f 95/105/40 87/97/40 94/106/40 -f 88/98/41 87/97/41 96/108/41 -f 61/73/73 106/109/73 65/79/73 -f 108/77/1 66/81/1 109/78/1 -f 2/65/1 101/75/1 61/73/1 -f 68/80/74 64/74/74 109/78/74 -f 9/60/23 101/75/23 42/61/23 -f 30/42/1 103/1/1 64/74/1 -f 103/1/1 30/42/1 102/2/1 -f 211/2/44 212/1/44 115/3/44 -f 114/5/2 129/4/2 113/6/2 -f 154/57/2 161/8/2 129/4/2 -f 131/10/24 145/9/24 120/11/24 -f 114/5/2 113/6/2 148/12/2 -f 112/7/45 162/15/45 113/6/45 -f 122/17/46 123/16/46 121/18/46 -f 123/16/47 127/19/47 119/20/47 -f 142/39/24 140/22/24 129/4/24 -f 122/17/48 121/18/48 126/23/48 -f 142/39/45 138/27/45 134/25/45 -f 116/30/45 117/24/45 119/20/45 -f 128/29/75 126/23/75 110/28/75 -f 142/39/45 122/17/45 128/29/45 -f 110/28/76 127/19/76 134/25/76 -f 126/23/50 117/24/50 127/19/50 -f 198/36/51 137/33/51 201/31/51 -f 140/22/24 145/9/24 125/21/24 -f 124/41/24 130/34/24 140/22/24 -f 198/36/52 199/35/52 137/33/52 -f 199/35/53 200/37/53 133/38/53 -f 134/25/45 123/16/45 142/39/45 -f 136/32/45 137/33/45 132/40/45 -f 128/29/24 124/41/24 142/39/24 -f 145/9/24 130/34/24 139/42/24 -f 134/25/45 141/26/45 114/5/45 -f 129/4/45 114/5/45 143/44/45 -f 129/4/45 143/44/45 142/39/45 -f 201/31/54 136/32/54 200/37/54 -f 135/45/44 212/1/44 172/46/44 -f 111/65/14 147/48/14 135/45/14 -f 158/84/15 181/50/15 148/12/15 -f 153/58/26 168/53/26 157/51/26 -f 130/34/17 124/41/17 156/54/17 -f 110/28/17 146/56/17 128/29/17 -f 154/57/2 148/12/2 161/8/2 -f 154/57/2 129/4/2 153/58/2 -f 128/29/18 155/55/18 124/41/18 -f 118/60/19 130/34/19 151/61/19 -f 157/51/20 131/10/20 150/62/20 -f 110/28/21 134/25/21 146/56/21 -f 135/45/14 159/47/14 115/3/14 -f 211/2/22 115/3/22 213/64/22 -f 210/75/23 214/66/23 111/65/23 -f 163/14/2 162/15/2 164/67/2 -f 161/8/14 165/68/14 112/7/14 -f 113/6/15 163/14/15 160/13/15 -f 160/13/3 164/67/3 161/8/3 -f 168/53/2 166/69/2 169/52/2 -f 131/10/25 157/51/25 167/70/25 -f 131/10/16 167/70/16 125/21/16 -f 153/58/27 125/21/27 168/53/27 -f 172/46/77 216/71/77 176/72/77 -f 111/65/44 135/45/44 170/73/44 -f 139/42/44 118/60/44 173/74/44 -f 118/60/44 210/75/44 171/76/44 -f 218/78/44 217/77/44 176/72/44 -f 172/46/56 176/72/56 170/73/56 -f 173/74/57 171/76/57 177/80/57 -f 215/109/78 217/77/78 171/76/78 -f 181/50/33 185/83/33 180/49/33 -f 158/84/15 134/25/15 181/50/15 -f 148/12/15 180/49/15 114/5/15 -f 114/5/15 178/85/15 134/25/15 -f 185/83/15 189/90/15 184/82/15 -f 179/86/17 183/88/17 181/50/17 -f 178/85/2 180/49/2 182/89/2 -f 178/85/32 182/89/32 179/86/32 -f 188/87/24 189/90/24 192/91/24 -f 183/88/15 187/92/15 185/83/15 -f 182/89/15 184/82/15 186/93/15 -f 182/89/15 186/93/15 183/88/15 -f 190/96/15 192/91/15 191/94/15 -f 187/92/2 191/94/2 189/90/2 -f 188/87/17 192/91/17 186/93/17 -f 187/92/3 186/93/3 191/94/3 -f 141/26/54 197/98/54 144/43/54 -f 143/44/53 144/43/53 195/99/53 -f 138/27/52 143/44/52 194/100/52 -f 138/27/51 194/100/51 141/26/51 -f 200/37/59 208/102/59 201/31/59 -f 200/37/60 199/35/60 208/102/60 -f 199/35/61 198/36/61 207/103/61 -f 201/31/79 209/101/79 198/36/79 -f 205/108/54 209/101/54 204/105/54 -f 203/106/53 204/105/53 207/103/53 -f 202/107/52 203/106/52 206/104/52 -f 202/107/51 206/104/51 205/108/51 -f 194/100/63 202/107/63 197/98/63 -f 194/100/64 195/99/64 202/107/64 -f 195/99/65 196/97/65 203/106/65 -f 197/98/66 205/108/66 196/97/66 -f 170/73/80 174/79/80 215/109/80 -f 177/80/44 175/81/44 218/78/44 -f 111/65/44 170/73/44 210/75/44 -f 216/71/81 173/74/81 218/78/81 -f 118/60/23 151/61/23 210/75/23 -f 139/42/44 173/74/44 212/1/44 -f 120/11/44 139/42/44 211/2/44 -usemtl Material.003 -f 41/62/82 104/64/82 102/2/82 -f 211/2/82 213/64/82 150/62/82 -f 11/11/82 41/62/82 102/2/82 -f 120/11/82 211/2/82 150/62/82 diff --git a/externals/tinyobjloader/models/missing_material_file.obj b/externals/tinyobjloader/models/missing_material_file.obj deleted file mode 100644 index 9e1d98c..0000000 --- a/externals/tinyobjloader/models/missing_material_file.obj +++ /dev/null @@ -1,145 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -#mtllib no_material.mtl - -o floor -usemtl white -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -usemtl light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -usemtl white -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -usemtl white -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -usemtl blue -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -usemtl green -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -usemtl red -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block -usemtl white - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block -usemtl white - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -usemtl white -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/externals/tinyobjloader/models/mtl filename with whitespace issue46.mtl b/externals/tinyobjloader/models/mtl filename with whitespace issue46.mtl deleted file mode 100644 index b79d99b..0000000 --- a/externals/tinyobjloader/models/mtl filename with whitespace issue46.mtl +++ /dev/null @@ -1,4 +0,0 @@ -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/mtl filename with whitespace issue46.obj b/externals/tinyobjloader/models/mtl filename with whitespace issue46.obj deleted file mode 100644 index 72d1dc9..0000000 --- a/externals/tinyobjloader/models/mtl filename with whitespace issue46.obj +++ /dev/null @@ -1,31 +0,0 @@ -mtllib invalid-file-without-spaces.mtl invalid\ file\ with\ spaces.mtl mtl\ filename\ with\ whitespace\ issue46.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl green -f 1 2 3 4 -g back cube -usemtl green -f 8 7 6 5 -g right cube -usemtl green -f 4 3 7 8 -g left cube -usemtl green -f 5 6 2 1 -g top cube -usemtl green -f 5 1 4 8 -g bottom cube -usemtl green -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.mtl b/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.mtl deleted file mode 100644 index 5ebd668..0000000 --- a/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.mtl +++ /dev/null @@ -1,6 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -map_Kd tmp.png - diff --git a/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.obj b/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.obj deleted file mode 100644 index 9966dfb..0000000 --- a/externals/tinyobjloader/models/mtllib-multiple-files-issue-112.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib invalid-file-aaa.mtl invalid-file-bbb.mtl mtllib-multiple-files-issue-112.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/no_material.obj b/externals/tinyobjloader/models/no_material.obj deleted file mode 100644 index 6f3688f..0000000 --- a/externals/tinyobjloader/models/no_material.obj +++ /dev/null @@ -1,133 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -o floor -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/externals/tinyobjloader/models/norm-texopt.mtl b/externals/tinyobjloader/models/norm-texopt.mtl deleted file mode 100644 index e2d4a2c..0000000 --- a/externals/tinyobjloader/models/norm-texopt.mtl +++ /dev/null @@ -1,7 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 -norm -bm 3 normalmap.jpg - diff --git a/externals/tinyobjloader/models/norm-texopt.obj b/externals/tinyobjloader/models/norm-texopt.obj deleted file mode 100644 index babe94d..0000000 --- a/externals/tinyobjloader/models/norm-texopt.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib norm-texopt.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/pbr-mat-ext.mtl b/externals/tinyobjloader/models/pbr-mat-ext.mtl deleted file mode 100644 index bed905d..0000000 --- a/externals/tinyobjloader/models/pbr-mat-ext.mtl +++ /dev/null @@ -1,19 +0,0 @@ -# .MTL with PBR extension. -newmtl pbr -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 -Ke 0.1 0.1 0.1 -Pr 0.2 -Pm 0.3 -Ps 0.4 -Pc 0.5 -Pcr 0.6 -aniso 0.7 -anisor 0.8 -map_Pr roughness.tex -map_Pm metallic.tex -map_Ps sheen.tex -map_Ke emissive.tex -norm normalmap.tex - diff --git a/externals/tinyobjloader/models/pbr-mat-ext.obj b/externals/tinyobjloader/models/pbr-mat-ext.obj deleted file mode 100644 index bb3e371..0000000 --- a/externals/tinyobjloader/models/pbr-mat-ext.obj +++ /dev/null @@ -1,10 +0,0 @@ -mtllib pbr-mat-ext.mtl - -o floor -usemtl pbr -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -f 1 2 3 4 diff --git a/externals/tinyobjloader/models/points-prim.obj b/externals/tinyobjloader/models/points-prim.obj deleted file mode 100644 index 21e89c0..0000000 --- a/externals/tinyobjloader/models/points-prim.obj +++ /dev/null @@ -1,15 +0,0 @@ -mtllib cube.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g g0 -usemtl white -p 1 2 3 4 5 6 7 8 diff --git a/externals/tinyobjloader/models/refl.mtl b/externals/tinyobjloader/models/refl.mtl deleted file mode 100644 index 7e04f28..0000000 --- a/externals/tinyobjloader/models/refl.mtl +++ /dev/null @@ -1,25 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 -refl reflection.tga - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/refl.obj b/externals/tinyobjloader/models/refl.obj deleted file mode 100644 index e9715f5..0000000 --- a/externals/tinyobjloader/models/refl.obj +++ /dev/null @@ -1,32 +0,0 @@ -# Test for `refl` material parameter -mtllib refl.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/skin-weight.obj b/externals/tinyobjloader/models/skin-weight.obj deleted file mode 100644 index 41f182f..0000000 --- a/externals/tinyobjloader/models/skin-weight.obj +++ /dev/null @@ -1,43 +0,0 @@ -mtllib cube.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -vw 0 0 1.0 -vw 1 0 0.5 1 0.5 -vw 2 1 1.0 -vw 3 2 1.0 -vw 4 3 1.0 -vw 5 0 0.25 1 0.25 2 0.25 3 0.25 -# No weight for 6th vertex -# vw 6 0 1.0 -vw 7 0 1.0 -# max 4 joints - -g front cube -usemtl white -f 1 2 3 4 -# two white spaces between 'back' and 'cube' -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/smoothing-group-two-squares.obj b/externals/tinyobjloader/models/smoothing-group-two-squares.obj deleted file mode 100644 index 5b21615..0000000 --- a/externals/tinyobjloader/models/smoothing-group-two-squares.obj +++ /dev/null @@ -1,22 +0,0 @@ -# from tinyobjloader issue #29 - -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -v 4.000000 0.000000 -3.255298 -v 4.000000 2.000000 -3.255298 -#vn 0.000000 0.000000 1.000000 -#vn 0.000000 0.000000 1.000000 -#vn 0.276597 0.000000 0.960986 -#vn 0.276597 0.000000 0.960986 -#vn 0.531611 0.000000 0.846988 -#vn 0.531611 0.000000 0.846988 -# 6 vertices - -# 6 normals - -g all -s 1 -f 1//1 2//2 3//3 4//4 -f 4//4 3//3 5//5 diff --git a/externals/tinyobjloader/models/smoothing-normal.mtl b/externals/tinyobjloader/models/smoothing-normal.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/externals/tinyobjloader/models/smoothing-normal.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/smoothing-normal.obj b/externals/tinyobjloader/models/smoothing-normal.obj deleted file mode 100644 index 8a89dec..0000000 --- a/externals/tinyobjloader/models/smoothing-normal.obj +++ /dev/null @@ -1,35 +0,0 @@ -mtllib smoothing-normal.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -s 1 -f 1 2 3 4 -#g bottom cube -#usemtl white -s 1 -f 2 6 7 3 - -g back cube -# expects white material -s off -f 8 7 6 5 -#g right cube -#usemtl red -#f 4 3 7 8 -#g top cube -#usemtl white -#f 5 1 4 8 -#g left cube -#usemtl green -#f 5 6 2 1 -# 6 elements diff --git a/externals/tinyobjloader/models/test-nan.obj b/externals/tinyobjloader/models/test-nan.obj deleted file mode 100644 index 3c68925..0000000 --- a/externals/tinyobjloader/models/test-nan.obj +++ /dev/null @@ -1,145 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -mtllib cornell_box.mtl - -o floor -usemtl white -v nan -nan nan -v inf -inf inf -v 1.#IND -1.#IND 1.#IND -v 1.#INF -1.#INF 1.#INF - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -usemtl light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -usemtl white -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -usemtl white -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -usemtl blue -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -usemtl green -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -usemtl red -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block -usemtl white - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block -usemtl white - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -usemtl white -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/externals/tinyobjloader/models/texture-filename-with-whitespace.mtl b/externals/tinyobjloader/models/texture-filename-with-whitespace.mtl deleted file mode 100644 index 70b1a4e..0000000 --- a/externals/tinyobjloader/models/texture-filename-with-whitespace.mtl +++ /dev/null @@ -1,28 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 -# filename with white space. -map_Kd texture 01.png - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 -# texture option + filename with white space. -bump -bm 2 bump 01.png - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/texture-filename-with-whitespace.obj b/externals/tinyobjloader/models/texture-filename-with-whitespace.obj deleted file mode 100644 index 46e61e7..0000000 --- a/externals/tinyobjloader/models/texture-filename-with-whitespace.obj +++ /dev/null @@ -1,31 +0,0 @@ -mtllib texture-filename-with-whitespace.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/models/texture-options-issue-85.mtl b/externals/tinyobjloader/models/texture-options-issue-85.mtl deleted file mode 100644 index d4d62ad..0000000 --- a/externals/tinyobjloader/models/texture-options-issue-85.mtl +++ /dev/null @@ -1,36 +0,0 @@ -newmtl default -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 -map_Ka -clamp on ambient.jpg -map_Kd -o 0.1 diffuse.jpg -map_Ks -s 0.1 0.2 specular.jpg -map_Ns -t 0.1 0.2 0.3 specular_highlight.jpg -map_bump -bm 3 bumpmap.jpg - -newmtl bm2 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 -# blendu -map_Kd -blendu on diffuse.jpg -map_Ks -blendv off specular.jpg -map_Ns -mm 0.1 0.3 specular_highlight.jpg -# -bm after filename -map_bump -imfchan r bumpmap2.jpg -bm 1.5 - -newmtl bm3 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Kt 0.1 0.2 0.3 -# type -map_Kd -type sphere diffuse.jpg -map_Ks -type cube_top specular.jpg -map_Ns -type cube_bottom specular_highlight.jpg -map_Ka -type cube_left ambient.jpg -map_d -type cube_right alpha.jpg -map_bump -type cube_front bump.jpg -disp -type cube_back displacement.jpg diff --git a/externals/tinyobjloader/models/texture-options-issue-85.obj b/externals/tinyobjloader/models/texture-options-issue-85.obj deleted file mode 100644 index f7abb0c..0000000 --- a/externals/tinyobjloader/models/texture-options-issue-85.obj +++ /dev/null @@ -1,7 +0,0 @@ -mtllib texture-options-issue-85.mtl -o Test -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -usemtl default -f 1 2 3 diff --git a/externals/tinyobjloader/models/tr-and-d-issue-43.mtl b/externals/tinyobjloader/models/tr-and-d-issue-43.mtl deleted file mode 100644 index 44fd7ac..0000000 --- a/externals/tinyobjloader/models/tr-and-d-issue-43.mtl +++ /dev/null @@ -1,13 +0,0 @@ -newmtl Material.001 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -d 0.75 -Tr 0.5 - -newmtl Material.002 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 -Tr 0.5 -d 0.75 diff --git a/externals/tinyobjloader/models/tr-and-d-issue-43.obj b/externals/tinyobjloader/models/tr-and-d-issue-43.obj deleted file mode 100644 index d86c3cf..0000000 --- a/externals/tinyobjloader/models/tr-and-d-issue-43.obj +++ /dev/null @@ -1,817 +0,0 @@ -# https://github.com/syoyo/tinyobjloader/issues/68 -# Blender v2.73 (sub 0) OBJ File: 'enemy.blend' -# www.blender.org -mtllib tr-and-d-issue-43.mtl -o Cube -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -v 1.620345 1.000000 -5.815706 -v 1.864152 1.000000 -6.334323 -v 0.575869 -0.129842 5.896143 -v 5.440438 -1.462153 -5.818601 -v 4.896782 -1.462153 -2.744413 -v 1.000825 -0.677484 1.899605 -v 5.440438 -1.246362 -5.818600 -v 1.000825 0.852342 1.899608 -v 4.896782 -1.246362 -2.744412 -v 1.160660 -0.450871 -2.356325 -v 1.704316 -0.450871 -5.430513 -v 1.000825 -0.351920 -1.293797 -v 1.000825 1.000000 -1.293794 -v 1.160660 -0.877888 -2.356326 -v 1.704316 -0.877888 -5.430514 -v 1.000825 -1.219172 -1.452514 -v 1.000825 1.000000 -1.452511 -v 1.000825 -0.351920 1.759410 -v 1.000825 1.000000 1.759413 -v 9.097919 1.221145 -6.212147 -v 8.356775 1.221145 -2.021231 -v 1.864151 -0.109586 -6.334325 -v 0.575869 -0.398073 5.896141 -v 9.097919 0.943958 -6.212148 -v 8.356775 0.943958 -2.021233 -v 1.061916 0.113661 -1.797961 -v 1.000825 0.161258 1.899606 -v 1.000825 0.324040 -1.293795 -v 1.803060 0.113661 -5.988876 -v 1.000825 -0.109586 -1.452513 -v 1.061916 0.776753 -1.797960 -v 1.803061 0.776753 -5.988875 -v 1.000825 0.324040 1.759412 -v 0.000825 -1.219172 -5.532512 -v 0.000825 -0.666304 5.896139 -v 0.000826 1.000000 -6.334325 -v 0.000825 -0.129842 5.896140 -v 0.000825 0.852342 1.899606 -v 0.000825 -0.677484 1.899604 -v 0.000825 -0.351920 -1.293797 -v 0.000825 1.000000 -1.293796 -v 0.000825 1.000000 -1.452513 -v 0.000825 -1.219172 -1.452515 -v 0.000825 -0.351920 1.759409 -v 0.000825 1.000000 1.759411 -v 0.000826 -0.109586 -6.334326 -v 0.000825 -0.398073 5.896140 -v 0.152918 1.000000 -5.815708 -v 0.152917 1.000000 -1.971130 -v 0.940448 1.168419 -1.971128 -v 1.620345 1.168419 -5.815706 -v 0.152918 1.168419 -5.815708 -v 0.152917 1.168419 -1.971130 -v 0.921118 1.091883 -1.050430 -v 0.921118 1.091883 1.516050 -v 0.080533 1.091883 -1.050432 -v 0.080533 1.091883 1.516048 -v 0.613003 -0.553430 5.546911 -v 0.963691 -0.559956 2.248834 -v 0.613003 -0.396857 5.546912 -v 0.963691 -0.070362 2.248835 -v 1.499370 -0.994317 3.966028 -v 1.850058 -0.997914 0.667950 -v 1.499370 -0.908021 3.966029 -v 1.850058 -0.728071 0.667951 -v 1.601022 0.760960 -6.334324 -v 1.601021 0.129454 -6.334325 -v 0.263955 0.760960 -6.334325 -v 0.263955 0.129454 -6.334325 -v 1.334809 0.760960 -7.515329 -v 1.334809 0.129455 -7.515330 -v 0.530168 0.760960 -7.515330 -v 0.530168 0.129455 -7.515330 -v 1.192720 0.649445 -7.515329 -v 1.192720 0.240971 -7.515330 -v 0.672258 0.649445 -7.515330 -v 0.672258 0.240971 -7.515330 -v 1.192719 0.649444 -6.524630 -v 1.192719 0.240970 -6.524631 -v 0.672257 0.649444 -6.524631 -v 0.672257 0.240970 -6.524631 -v 3.851026 0.431116 -1.883326 -v 3.851026 0.946662 -1.883325 -v 4.592170 0.946662 -6.074241 -v 4.592169 0.431116 -6.074242 -v 4.995714 0.561404 -1.918362 -v 4.995714 1.016394 -1.918360 -v 5.736857 1.016394 -6.109276 -v 5.736857 0.561404 -6.109277 -v 3.975454 0.471731 -2.162156 -v 3.975454 0.919244 -2.162155 -v 4.618796 0.919244 -5.800034 -v 4.618795 0.471730 -5.800035 -v 4.969088 0.584825 -2.192568 -v 4.969088 0.979775 -2.192567 -v 5.612430 0.979775 -5.830446 -v 5.612429 0.584825 -5.830447 -v 0.864214 -0.673890 3.184381 -v 0.864213 0.489129 3.184384 -v 0.864213 -0.018552 3.184383 -v 0.000825 0.489129 3.184382 -v 0.000825 -0.673890 3.184381 -v 0.850955 -0.557858 3.309075 -v 0.850955 -0.175321 3.309076 -v 1.737321 -0.996758 1.728192 -v 1.737321 -0.785920 1.728193 -v -1.864151 -1.219172 -5.532511 -v -0.575869 -0.666304 5.896140 -v -0.940448 1.000000 -1.971128 -v -1.620345 1.000000 -5.815706 -v -1.864152 1.000000 -6.334323 -v -0.575869 -0.129842 5.896143 -v -5.440438 -1.462153 -5.818601 -v -4.896782 -1.462153 -2.744413 -v -1.000825 -0.677484 1.899605 -v -5.440438 -1.246362 -5.818600 -v -1.000825 0.852342 1.899608 -v -4.896782 -1.246362 -2.744412 -v -1.160660 -0.450871 -2.356325 -v -1.704316 -0.450871 -5.430513 -v -1.000825 -0.351920 -1.293797 -v -1.000825 1.000000 -1.293794 -v -1.160660 -0.877888 -2.356326 -v -1.704316 -0.877888 -5.430514 -v -1.000825 -1.219172 -1.452514 -v -1.000825 1.000000 -1.452511 -v -1.000825 -0.351920 1.759410 -v -1.000825 1.000000 1.759413 -v -9.097919 1.221145 -6.212147 -v -8.356775 1.221145 -2.021231 -v -1.864151 -0.109586 -6.334325 -v -0.575869 -0.398073 5.896141 -v -9.097919 0.943958 -6.212148 -v -8.356775 0.943958 -2.021233 -v -1.061916 0.113661 -1.797961 -v -1.000825 0.161258 1.899606 -v -1.000825 0.324040 -1.293795 -v -1.803060 0.113661 -5.988876 -v -1.000825 -0.109586 -1.452513 -v -1.061916 0.776753 -1.797960 -v -1.803061 0.776753 -5.988875 -v -1.000825 0.324040 1.759412 -v -0.000825 -1.219172 -5.532512 -v -0.000825 -0.666304 5.896139 -v -0.000826 1.000000 -6.334325 -v -0.000825 -0.129842 5.896140 -v -0.000825 0.852342 1.899606 -v -0.000825 -0.677484 1.899604 -v -0.000825 -0.351920 -1.293797 -v -0.000825 1.000000 -1.293796 -v -0.000825 1.000000 -1.452513 -v -0.000825 -1.219172 -1.452515 -v -0.000825 -0.351920 1.759409 -v -0.000825 1.000000 1.759411 -v -0.000826 -0.109586 -6.334326 -v -0.000825 -0.398073 5.896140 -v -0.152918 1.000000 -5.815708 -v -0.152917 1.000000 -1.971130 -v -0.940448 1.168419 -1.971128 -v -1.620345 1.168419 -5.815706 -v -0.152918 1.168419 -5.815708 -v -0.152917 1.168419 -1.971130 -v -0.921118 1.091883 -1.050430 -v -0.921118 1.091883 1.516050 -v -0.080533 1.091883 -1.050432 -v -0.080533 1.091883 1.516048 -v -0.613003 -0.553430 5.546911 -v -0.963691 -0.559956 2.248834 -v -0.613003 -0.396857 5.546912 -v -0.963691 -0.070362 2.248835 -v -1.499370 -0.994317 3.966028 -v -1.850058 -0.997914 0.667950 -v -1.499370 -0.908021 3.966029 -v -1.850058 -0.728071 0.667951 -v -1.601022 0.760960 -6.334324 -v -1.601021 0.129454 -6.334325 -v -0.263955 0.760960 -6.334325 -v -0.263955 0.129454 -6.334325 -v -1.334809 0.760960 -7.515329 -v -1.334809 0.129455 -7.515330 -v -0.530168 0.760960 -7.515330 -v -0.530168 0.129455 -7.515330 -v -1.192720 0.649445 -7.515329 -v -1.192720 0.240971 -7.515330 -v -0.672258 0.649445 -7.515330 -v -0.672258 0.240971 -7.515330 -v -1.192719 0.649444 -6.524630 -v -1.192719 0.240970 -6.524631 -v -0.672257 0.649444 -6.524631 -v -0.672257 0.240970 -6.524631 -v -3.851026 0.431116 -1.883326 -v -3.851026 0.946662 -1.883325 -v -4.592170 0.946662 -6.074241 -v -4.592169 0.431116 -6.074242 -v -4.995714 0.561404 -1.918362 -v -4.995714 1.016394 -1.918360 -v -5.736857 1.016394 -6.109276 -v -5.736857 0.561404 -6.109277 -v -3.975454 0.471731 -2.162156 -v -3.975454 0.919244 -2.162155 -v -4.618796 0.919244 -5.800034 -v -4.618795 0.471730 -5.800035 -v -4.969088 0.584825 -2.192568 -v -4.969088 0.979775 -2.192567 -v -5.612430 0.979775 -5.830446 -v -5.612429 0.584825 -5.830447 -v -0.864214 -0.673890 3.184381 -v -0.864213 0.489129 3.184384 -v -0.864213 -0.018552 3.184383 -v -0.000825 0.489129 3.184382 -v -0.000825 -0.673890 3.184381 -v -0.850955 -0.557858 3.309075 -v -0.850955 -0.175321 3.309076 -v -1.737321 -0.996758 1.728192 -v -1.737321 -0.785920 1.728193 -vt 0.135351 -0.558072 -vt 0.003035 -0.363507 -vt 0.092282 -0.976844 -vt -0.081322 0.947351 -vt 0.100058 1.958891 -vt 0.050091 1.852185 -vt -0.092752 1.055565 -vt -0.251711 1.059474 -vt 0.075587 0.041384 -vt -0.086008 0.279003 -vt -0.086212 0.249830 -vt -0.276044 1.968137 -vt -0.246101 1.859467 -vt 0.009828 1.911388 -vt -0.133014 1.114769 -vt 0.413322 1.261595 -vt 0.299103 0.624605 -vt 1.243955 0.407183 -vt 0.515404 1.111487 -vt 1.358173 1.044173 -vt -0.081553 0.914324 -vt 0.080042 0.676706 -vt 0.401185 0.474498 -vt 1.295541 0.331328 -vt 0.365315 1.568841 -vt 0.299111 1.575740 -vt 0.143401 0.707357 -vt 0.629403 1.011947 -vt 0.449192 0.167251 -vt 1.409760 0.968317 -vt 0.986264 1.738667 -vt 1.573373 1.877873 -vt 1.417663 1.009490 -vt 0.237182 -0.196235 -vt 0.721785 1.030226 -vt 0.830554 0.870285 -vt 0.877494 1.898608 -vt 1.351399 1.106930 -vt 0.183935 0.557301 -vt 1.507109 1.975312 -vt 0.241636 0.439088 -vt 0.114297 -0.045011 -vt 0.140593 1.808834 -vt -0.015118 0.940452 -vt 0.156405 -1.071134 -vt 0.164119 -0.998223 -vt 0.040336 -1.068281 -vt 0.104459 -1.162571 -vt -0.165787 1.882802 -vt -0.014821 1.660811 -vt -0.287852 0.283965 -vt -0.293374 0.366508 -vt -0.289630 0.900550 -vt 0.035337 -0.191272 -vt 0.247348 0.172213 -vt 0.253300 1.021193 -vt -0.283166 0.952313 -vt -0.283398 0.919286 -vt 0.039792 0.444050 -vt 0.314806 -0.339851 -vt 0.112962 -0.334889 -vt -0.288056 0.254793 -vt -0.023788 -0.973990 -vt -0.155922 -0.359599 -vt 0.220528 -1.165425 -vt 0.108710 -0.748730 -vt -0.286364 1.918670 -vt -0.291973 1.118678 -vt -0.119962 0.896379 -vt -0.123707 0.362337 -vt 0.162891 -0.598569 -vt 0.467532 -0.853353 -vt 0.201549 -1.053262 -vt 0.161663 -0.198915 -vt 0.267667 -0.752638 -vt 0.278705 -0.371021 -vt 0.526390 -0.542053 -vt 0.483821 -0.479457 -vt 0.488162 -0.883689 -vt 0.500110 -0.105561 -vt 0.564618 -0.200418 -vt -0.110331 2.127229 -vt 0.040636 1.905238 -vt -0.010786 1.578087 -vt 0.104092 1.876168 -vt 0.255058 1.654176 -vt -0.054992 2.087323 -vt 0.203048 1.901245 -vt 0.052081 2.123235 -vt 0.042658 1.943733 -vt -0.056437 1.881175 -vt 0.147710 1.941151 -vt 0.050060 2.084741 -vt 0.146264 1.735002 -vt 0.041212 1.737584 -vt 0.048615 1.878591 -vt 0.663065 1.872485 -vt 0.786311 1.691257 -vt 0.507355 1.004102 -vt 0.630601 0.822874 -vt 0.955144 1.689498 -vt 0.860727 1.828333 -vt 0.725565 1.074543 -vt 0.819981 0.935708 -vt 0.674594 1.805657 -vt 0.539432 1.051867 -vt 0.646413 0.894554 -vt 0.781576 1.648344 -vt 0.240127 -0.712141 -vn 0.994400 0.000000 0.105700 -vn 0.000000 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.984700 0.000000 0.174100 -vn 0.211800 0.976600 0.037500 -vn -0.103300 0.000000 -0.994600 -vn 0.103300 -0.000000 0.994600 -vn 0.911400 0.378700 0.161200 -vn -0.157300 -0.987200 -0.027800 -vn 0.113700 -0.993300 0.020100 -vn 0.030600 -0.000000 0.999500 -vn -0.061100 0.998100 -0.010800 -vn -0.030600 0.000000 -0.999500 -vn -0.000000 -0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -vn -0.755400 0.655300 0.000000 -vn 0.000000 -1.000000 0.000000 -vn -0.000000 -0.180000 0.983700 -vn 0.000000 -0.395500 -0.918500 -vn -0.000000 0.688500 0.725200 -vn 0.000000 -0.585700 -0.810500 -vn -0.000000 0.974900 0.222500 -vn -0.000000 -1.000000 0.002800 -vn -1.000000 0.000000 -0.000000 -vn -0.000000 0.935500 0.353200 -vn 0.755400 0.655300 0.000000 -vn 0.000000 0.935500 -0.353200 -vn 0.673800 0.724900 0.143400 -vn 0.872300 -0.000000 0.489100 -vn -0.872300 0.000000 -0.489100 -vn -0.518300 -0.853500 -0.054200 -vn -0.975500 0.000000 -0.219900 -vn 0.975500 0.000000 -0.219900 -vn -0.913200 0.000000 -0.407500 -vn -0.436900 0.896200 -0.077300 -vn -0.995300 -0.000000 0.096600 -vn -0.297300 -0.953400 -0.052600 -vn 0.473900 -0.876600 0.083800 -vn 0.913200 0.000000 0.407500 -vn 0.342200 0.937700 0.060500 -vn 0.995300 -0.000000 -0.096600 -vn -0.519200 -0.853000 -0.054300 -vn 0.722400 0.676400 0.143800 -vn -0.994400 0.000000 0.105700 -vn -0.984700 0.000000 0.174100 -vn -0.211800 0.976600 0.037500 -vn 0.103300 0.000000 -0.994600 -vn -0.103300 -0.000000 0.994600 -vn -0.911400 0.378700 0.161200 -vn 0.157300 -0.987200 -0.027800 -vn -0.113700 -0.993300 0.020100 -vn -0.030600 -0.000000 0.999500 -vn 0.061100 0.998100 -0.010800 -vn 0.030600 0.000000 -0.999500 -vn -0.691900 0.713200 0.112500 -vn -0.872300 -0.000000 0.489100 -vn 0.872300 0.000000 -0.489100 -vn 0.518300 -0.853500 -0.054200 -vn 0.913200 0.000000 -0.407500 -vn 0.436900 0.896200 -0.077300 -vn 0.995300 0.000000 0.096600 -vn 0.297300 -0.953300 -0.052600 -vn -0.473900 -0.876600 0.083800 -vn -0.913200 -0.000000 0.407500 -vn -0.342200 0.937700 0.060500 -vn -0.995300 -0.000000 -0.096600 -vn 0.519200 -0.853000 -0.054300 -vn -0.714800 0.690100 0.113700 -vn 0.974400 0.089700 0.206200 -vn 0.870400 0.288400 0.399100 -vn 0.691900 0.713200 0.112500 -vn -0.518000 -0.853700 -0.053400 -vn -0.519700 -0.852700 -0.053600 -vn 0.714800 0.690100 0.113700 -vn -0.974400 0.089700 0.206200 -vn -0.870400 0.288400 0.399100 -vn -0.673800 0.724900 0.143400 -vn 0.518000 -0.853700 -0.053400 -vn 0.297300 -0.953400 -0.052600 -vn 0.519700 -0.852700 -0.053600 -vn -0.722400 0.676400 0.143800 -vn -0.000000 0.962300 0.272000 -usemtl Material.001 -s off -f 103/1/1 102/2/1 6/3/1 -f 20/4/2 5/5/2 4/6/2 -f 20/4/2 3/7/2 52/8/2 -f 36/9/3 22/10/3 11/11/3 -f 39/12/2 51/13/2 4/6/2 -f 4/6/4 54/14/4 53/15/4 -f 14/16/5 13/17/5 12/18/5 -f 18/19/6 14/16/6 10/20/6 -f 20/4/3 16/21/3 31/22/3 -f 17/23/7 8/24/7 12/18/7 -f 25/25/4 32/26/4 29/27/4 -f 10/20/4 12/18/4 8/24/4 -f 1/28/8 18/19/8 17/23/8 -f 19/29/4 17/23/4 13/17/4 -f 25/25/4 14/16/4 18/19/4 -f 18/19/9 7/30/9 8/24/9 -f 92/31/10 27/32/10 28/33/10 -f 16/21/3 22/10/3 36/9/3 -f 31/22/3 36/9/3 21/34/3 -f 90/35/11 89/36/11 28/33/11 -f 91/37/12 90/35/12 24/38/12 -f 33/39/4 13/17/4 14/16/4 -f 23/40/4 24/38/4 28/33/4 -f 33/39/3 31/22/3 15/41/3 -f 21/34/3 36/9/3 30/42/3 -f 5/5/4 35/43/4 32/26/4 -f 5/5/4 20/4/4 34/44/4 -f 33/39/4 29/27/4 34/44/4 -f 91/37/13 23/40/13 27/32/13 -f 103/1/1 26/45/1 63/46/1 -f 26/45/14 50/47/14 38/48/14 -f 39/12/15 71/49/15 72/50/15 -f 48/51/16 60/52/16 59/53/16 -f 15/41/17 21/34/17 47/54/17 -f 19/29/17 46/55/17 37/56/17 -f 39/12/2 45/57/2 52/8/2 -f 20/4/2 45/57/2 44/58/2 -f 19/29/18 15/41/18 43/59/18 -f 9/60/19 42/61/19 47/54/19 -f 22/10/20 48/51/20 41/62/20 -f 25/25/21 1/28/21 37/56/21 -f 6/3/14 40/63/14 50/47/14 -f 104/64/22 40/63/22 6/3/22 -f 2/65/23 38/48/23 105/66/23 -f 55/67/2 56/68/2 53/15/2 -f 3/7/14 53/15/14 56/68/14 -f 51/13/15 55/67/15 54/14/15 -f 52/8/24 56/68/24 55/67/24 -f 57/69/2 59/53/2 60/52/2 -f 48/51/25 22/10/25 58/70/25 -f 16/21/26 57/69/26 58/70/26 -f 16/21/27 44/58/27 59/53/27 -f 107/71/28 63/46/28 67/72/28 -f 26/45/1 2/65/1 61/73/1 -f 9/60/1 30/42/1 64/74/1 -f 101/75/1 9/60/1 62/76/1 -f 108/77/1 109/78/1 67/72/1 -f 61/73/29 65/79/29 67/72/29 -f 62/76/30 64/74/30 68/80/30 -f 62/76/31 66/81/31 108/77/31 -f 71/49/32 75/82/32 76/83/32 -f 25/25/15 49/84/15 72/50/15 -f 5/5/15 69/85/15 71/49/15 -f 25/25/15 70/86/15 69/85/15 -f 76/83/15 75/82/15 79/87/15 -f 72/50/17 76/83/17 74/88/17 -f 71/49/2 69/85/2 73/89/2 -f 70/86/33 74/88/33 73/89/33 -f 80/90/3 79/87/3 83/91/3 -f 76/83/15 80/90/15 78/92/15 -f 75/82/15 73/89/15 77/93/15 -f 74/88/15 78/92/15 77/93/15 -f 82/94/15 84/95/15 83/91/15 -f 80/90/2 84/95/2 82/94/2 -f 77/93/17 81/96/17 83/91/17 -f 77/93/24 78/92/24 82/94/24 -f 35/43/13 87/97/13 88/98/13 -f 35/43/12 34/44/12 86/99/12 -f 34/44/11 29/27/11 85/100/11 -f 32/26/10 88/98/10 85/100/10 -f 92/31/34 100/101/34 99/102/34 -f 90/35/35 91/37/35 99/102/35 -f 89/36/36 90/35/36 98/103/36 -f 89/36/37 97/104/37 100/101/37 -f 95/105/13 99/102/13 100/101/13 -f 95/105/12 94/106/12 98/103/12 -f 94/106/11 93/107/11 97/104/11 -f 96/108/10 100/101/10 97/104/10 -f 88/98/38 96/108/38 93/107/38 -f 86/99/39 85/100/39 93/107/39 -f 87/97/40 86/99/40 94/106/40 -f 87/97/41 95/105/41 96/108/41 -f 106/109/42 108/77/42 65/79/42 -f 66/81/1 68/80/1 109/78/1 -f 101/75/1 106/109/1 61/73/1 -f 64/74/43 107/71/43 109/78/43 -f 101/75/23 105/66/23 42/61/23 -f 103/1/1 107/71/1 64/74/1 -f 30/42/1 11/11/1 102/2/1 -f 212/1/44 135/45/44 115/3/44 -f 129/4/2 112/7/2 113/6/2 -f 161/8/2 112/7/2 129/4/2 -f 145/9/24 139/42/24 120/11/24 -f 113/6/2 160/13/2 148/12/2 -f 162/15/45 163/14/45 113/6/45 -f 123/16/46 119/20/46 121/18/46 -f 127/19/47 116/30/47 119/20/47 -f 140/22/24 125/21/24 129/4/24 -f 121/18/48 117/24/48 126/23/48 -f 138/27/45 141/26/45 134/25/45 -f 117/24/45 121/18/45 119/20/45 -f 126/23/49 127/19/49 110/28/49 -f 122/17/45 126/23/45 128/29/45 -f 127/19/45 123/16/45 134/25/45 -f 117/24/50 116/30/50 127/19/50 -f 137/33/51 136/32/51 201/31/51 -f 145/9/24 131/10/24 125/21/24 -f 130/34/24 145/9/24 140/22/24 -f 199/35/52 133/38/52 137/33/52 -f 200/37/53 132/40/53 133/38/53 -f 123/16/45 122/17/45 142/39/45 -f 137/33/45 133/38/45 132/40/45 -f 124/41/24 140/22/24 142/39/24 -f 130/34/24 118/60/24 139/42/24 -f 141/26/45 144/43/45 114/5/45 -f 114/5/45 144/43/45 143/44/45 -f 143/44/45 138/27/45 142/39/45 -f 136/32/54 132/40/54 200/37/54 -f 212/1/44 216/71/44 172/46/44 -f 147/48/14 159/47/14 135/45/14 -f 181/50/15 180/49/15 148/12/15 -f 168/53/26 169/52/26 157/51/26 -f 124/41/17 152/59/17 156/54/17 -f 146/56/17 155/55/17 128/29/17 -f 148/12/2 160/13/2 161/8/2 -f 129/4/2 125/21/2 153/58/2 -f 155/55/18 152/59/18 124/41/18 -f 130/34/19 156/54/19 151/61/19 -f 131/10/20 120/11/20 150/62/20 -f 134/25/21 158/84/21 146/56/21 -f 159/47/14 149/63/14 115/3/14 -f 115/3/22 149/63/22 213/64/22 -f 214/66/23 147/48/23 111/65/23 -f 162/15/2 165/68/2 164/67/2 -f 165/68/14 162/15/14 112/7/14 -f 163/14/15 164/67/15 160/13/15 -f 164/67/3 165/68/3 161/8/3 -f 166/69/2 167/70/2 169/52/2 -f 157/51/25 169/52/25 167/70/25 -f 167/70/16 166/69/16 125/21/16 -f 125/21/27 166/69/27 168/53/27 -f 216/71/55 218/78/55 176/72/55 -f 135/45/44 172/46/44 170/73/44 -f 118/60/44 171/76/44 173/74/44 -f 210/75/44 215/109/44 171/76/44 -f 217/77/44 174/79/44 176/72/44 -f 176/72/56 174/79/56 170/73/56 -f 171/76/57 175/81/57 177/80/57 -f 217/77/58 175/81/58 171/76/58 -f 185/83/33 184/82/33 180/49/33 -f 134/25/15 179/86/15 181/50/15 -f 180/49/15 178/85/15 114/5/15 -f 178/85/15 179/86/15 134/25/15 -f 189/90/15 188/87/15 184/82/15 -f 183/88/17 185/83/17 181/50/17 -f 180/49/2 184/82/2 182/89/2 -f 182/89/32 183/88/32 179/86/32 -f 189/90/24 193/95/24 192/91/24 -f 187/92/15 189/90/15 185/83/15 -f 184/82/15 188/87/15 186/93/15 -f 186/93/15 187/92/15 183/88/15 -f 192/91/15 193/95/15 191/94/15 -f 191/94/2 193/95/2 189/90/2 -f 192/91/17 190/96/17 186/93/17 -f 186/93/3 190/96/3 191/94/3 -f 197/98/54 196/97/54 144/43/54 -f 144/43/53 196/97/53 195/99/53 -f 143/44/52 195/99/52 194/100/52 -f 194/100/51 197/98/51 141/26/51 -f 208/102/59 209/101/59 201/31/59 -f 199/35/60 207/103/60 208/102/60 -f 198/36/61 206/104/61 207/103/61 -f 209/101/62 206/104/62 198/36/62 -f 209/101/54 208/102/54 204/105/54 -f 204/105/53 208/102/53 207/103/53 -f 203/106/52 207/103/52 206/104/52 -f 206/104/51 209/101/51 205/108/51 -f 202/107/63 205/108/63 197/98/63 -f 195/99/64 203/106/64 202/107/64 -f 196/97/65 204/105/65 203/106/65 -f 205/108/66 204/105/66 196/97/66 -f 174/79/67 217/77/67 215/109/67 -f 175/81/44 217/77/44 218/78/44 -f 170/73/44 215/109/44 210/75/44 -f 173/74/68 177/80/68 218/78/68 -f 151/61/23 214/66/23 210/75/23 -f 173/74/44 216/71/44 212/1/44 -f 139/42/44 212/1/44 211/2/44 -f 26/45/1 103/1/1 6/3/1 -f 3/7/2 20/4/2 4/6/2 -f 45/57/2 20/4/2 52/8/2 -f 30/42/3 36/9/3 11/11/3 -f 5/5/2 39/12/2 4/6/2 -f 3/7/4 4/6/4 53/15/4 -f 10/20/5 14/16/5 12/18/5 -f 7/30/6 18/19/6 10/20/6 -f 33/39/3 20/4/3 31/22/3 -f 13/17/7 17/23/7 12/18/7 -f 33/39/4 25/25/4 29/27/4 -f 7/30/4 10/20/4 8/24/4 -f 19/29/69 1/28/69 17/23/69 -f 33/39/4 19/29/4 13/17/4 -f 1/28/70 25/25/70 18/19/70 -f 17/23/9 18/19/9 8/24/9 -f 89/36/10 92/31/10 28/33/10 -f 31/22/3 16/21/3 36/9/3 -f 15/41/3 31/22/3 21/34/3 -f 24/38/11 90/35/11 28/33/11 -f 23/40/12 91/37/12 24/38/12 -f 25/25/4 33/39/4 14/16/4 -f 27/32/4 23/40/4 28/33/4 -f 19/29/3 33/39/3 15/41/3 -f 9/60/3 21/34/3 30/42/3 -f 25/25/4 5/5/4 32/26/4 -f 35/43/4 5/5/4 34/44/4 -f 20/4/4 33/39/4 34/44/4 -f 92/31/13 91/37/13 27/32/13 -f 107/71/1 103/1/1 63/46/1 -f 2/65/14 26/45/14 38/48/14 -f 49/84/15 39/12/15 72/50/15 -f 44/58/16 48/51/16 59/53/16 -f 43/59/17 15/41/17 47/54/17 -f 1/28/17 19/29/17 37/56/17 -f 51/13/2 39/12/2 52/8/2 -f 16/21/2 20/4/2 44/58/2 -f 46/55/18 19/29/18 43/59/18 -f 21/34/19 9/60/19 47/54/19 -f 11/11/20 22/10/20 41/62/20 -f 49/84/21 25/25/21 37/56/21 -f 26/45/14 6/3/14 50/47/14 -f 102/2/22 104/64/22 6/3/22 -f 101/75/23 2/65/23 105/66/23 -f 54/14/2 55/67/2 53/15/2 -f 52/8/14 3/7/14 56/68/14 -f 4/6/15 51/13/15 54/14/15 -f 51/13/24 52/8/24 55/67/24 -f 58/70/2 57/69/2 60/52/2 -f 60/52/25 48/51/25 58/70/25 -f 22/10/26 16/21/26 58/70/26 -f 57/69/27 16/21/27 59/53/27 -f 109/78/71 107/71/71 67/72/71 -f 63/46/1 26/45/1 61/73/1 -f 62/76/1 9/60/1 64/74/1 -f 106/109/1 101/75/1 62/76/1 -f 65/79/1 108/77/1 67/72/1 -f 63/46/29 61/73/29 67/72/29 -f 66/81/30 62/76/30 68/80/30 -f 106/109/72 62/76/72 108/77/72 -f 72/50/32 71/49/32 76/83/32 -f 70/86/15 25/25/15 72/50/15 -f 39/12/15 5/5/15 71/49/15 -f 5/5/15 25/25/15 69/85/15 -f 80/90/15 76/83/15 79/87/15 -f 70/86/17 72/50/17 74/88/17 -f 75/82/2 71/49/2 73/89/2 -f 69/85/33 70/86/33 73/89/33 -f 84/95/3 80/90/3 83/91/3 -f 74/88/15 76/83/15 78/92/15 -f 79/87/15 75/82/15 77/93/15 -f 73/89/15 74/88/15 77/93/15 -f 81/96/15 82/94/15 83/91/15 -f 78/92/2 80/90/2 82/94/2 -f 79/87/17 77/93/17 83/91/17 -f 81/96/24 77/93/24 82/94/24 -f 32/26/13 35/43/13 88/98/13 -f 87/97/12 35/43/12 86/99/12 -f 86/99/11 34/44/11 85/100/11 -f 29/27/10 32/26/10 85/100/10 -f 91/37/34 92/31/34 99/102/34 -f 98/103/35 90/35/35 99/102/35 -f 97/104/36 89/36/36 98/103/36 -f 92/31/37 89/36/37 100/101/37 -f 96/108/13 95/105/13 100/101/13 -f 99/102/12 95/105/12 98/103/12 -f 98/103/11 94/106/11 97/104/11 -f 93/107/10 96/108/10 97/104/10 -f 85/100/38 88/98/38 93/107/38 -f 94/106/39 86/99/39 93/107/39 -f 95/105/40 87/97/40 94/106/40 -f 88/98/41 87/97/41 96/108/41 -f 61/73/73 106/109/73 65/79/73 -f 108/77/1 66/81/1 109/78/1 -f 2/65/1 101/75/1 61/73/1 -f 68/80/74 64/74/74 109/78/74 -f 9/60/23 101/75/23 42/61/23 -f 30/42/1 103/1/1 64/74/1 -f 103/1/1 30/42/1 102/2/1 -f 211/2/44 212/1/44 115/3/44 -f 114/5/2 129/4/2 113/6/2 -f 154/57/2 161/8/2 129/4/2 -f 131/10/24 145/9/24 120/11/24 -f 114/5/2 113/6/2 148/12/2 -f 112/7/45 162/15/45 113/6/45 -f 122/17/46 123/16/46 121/18/46 -f 123/16/47 127/19/47 119/20/47 -f 142/39/24 140/22/24 129/4/24 -f 122/17/48 121/18/48 126/23/48 -f 142/39/45 138/27/45 134/25/45 -f 116/30/45 117/24/45 119/20/45 -f 128/29/75 126/23/75 110/28/75 -f 142/39/45 122/17/45 128/29/45 -f 110/28/76 127/19/76 134/25/76 -f 126/23/50 117/24/50 127/19/50 -f 198/36/51 137/33/51 201/31/51 -f 140/22/24 145/9/24 125/21/24 -f 124/41/24 130/34/24 140/22/24 -f 198/36/52 199/35/52 137/33/52 -f 199/35/53 200/37/53 133/38/53 -f 134/25/45 123/16/45 142/39/45 -f 136/32/45 137/33/45 132/40/45 -f 128/29/24 124/41/24 142/39/24 -f 145/9/24 130/34/24 139/42/24 -f 134/25/45 141/26/45 114/5/45 -f 129/4/45 114/5/45 143/44/45 -f 129/4/45 143/44/45 142/39/45 -f 201/31/54 136/32/54 200/37/54 -f 135/45/44 212/1/44 172/46/44 -f 111/65/14 147/48/14 135/45/14 -f 158/84/15 181/50/15 148/12/15 -f 153/58/26 168/53/26 157/51/26 -f 130/34/17 124/41/17 156/54/17 -f 110/28/17 146/56/17 128/29/17 -f 154/57/2 148/12/2 161/8/2 -f 154/57/2 129/4/2 153/58/2 -f 128/29/18 155/55/18 124/41/18 -f 118/60/19 130/34/19 151/61/19 -f 157/51/20 131/10/20 150/62/20 -f 110/28/21 134/25/21 146/56/21 -f 135/45/14 159/47/14 115/3/14 -f 211/2/22 115/3/22 213/64/22 -f 210/75/23 214/66/23 111/65/23 -f 163/14/2 162/15/2 164/67/2 -f 161/8/14 165/68/14 112/7/14 -f 113/6/15 163/14/15 160/13/15 -f 160/13/3 164/67/3 161/8/3 -f 168/53/2 166/69/2 169/52/2 -f 131/10/25 157/51/25 167/70/25 -f 131/10/16 167/70/16 125/21/16 -f 153/58/27 125/21/27 168/53/27 -f 172/46/77 216/71/77 176/72/77 -f 111/65/44 135/45/44 170/73/44 -f 139/42/44 118/60/44 173/74/44 -f 118/60/44 210/75/44 171/76/44 -f 218/78/44 217/77/44 176/72/44 -f 172/46/56 176/72/56 170/73/56 -f 173/74/57 171/76/57 177/80/57 -f 215/109/78 217/77/78 171/76/78 -f 181/50/33 185/83/33 180/49/33 -f 158/84/15 134/25/15 181/50/15 -f 148/12/15 180/49/15 114/5/15 -f 114/5/15 178/85/15 134/25/15 -f 185/83/15 189/90/15 184/82/15 -f 179/86/17 183/88/17 181/50/17 -f 178/85/2 180/49/2 182/89/2 -f 178/85/32 182/89/32 179/86/32 -f 188/87/24 189/90/24 192/91/24 -f 183/88/15 187/92/15 185/83/15 -f 182/89/15 184/82/15 186/93/15 -f 182/89/15 186/93/15 183/88/15 -f 190/96/15 192/91/15 191/94/15 -f 187/92/2 191/94/2 189/90/2 -f 188/87/17 192/91/17 186/93/17 -f 187/92/3 186/93/3 191/94/3 -f 141/26/54 197/98/54 144/43/54 -f 143/44/53 144/43/53 195/99/53 -f 138/27/52 143/44/52 194/100/52 -f 138/27/51 194/100/51 141/26/51 -f 200/37/59 208/102/59 201/31/59 -f 200/37/60 199/35/60 208/102/60 -f 199/35/61 198/36/61 207/103/61 -f 201/31/79 209/101/79 198/36/79 -f 205/108/54 209/101/54 204/105/54 -f 203/106/53 204/105/53 207/103/53 -f 202/107/52 203/106/52 206/104/52 -f 202/107/51 206/104/51 205/108/51 -f 194/100/63 202/107/63 197/98/63 -f 194/100/64 195/99/64 202/107/64 -f 195/99/65 196/97/65 203/106/65 -f 197/98/66 205/108/66 196/97/66 -f 170/73/80 174/79/80 215/109/80 -f 177/80/44 175/81/44 218/78/44 -f 111/65/44 170/73/44 210/75/44 -f 216/71/81 173/74/81 218/78/81 -f 118/60/23 151/61/23 210/75/23 -f 139/42/44 173/74/44 212/1/44 -f 120/11/44 139/42/44 211/2/44 -usemtl Material.002 -f 41/62/82 104/64/82 102/2/82 -f 211/2/82 213/64/82 150/62/82 -f 11/11/82 41/62/82 102/2/82 -f 120/11/82 211/2/82 150/62/82 diff --git a/externals/tinyobjloader/models/usemtl-issue-104.obj b/externals/tinyobjloader/models/usemtl-issue-104.obj deleted file mode 100644 index 5183676..0000000 --- a/externals/tinyobjloader/models/usemtl-issue-104.obj +++ /dev/null @@ -1,30 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -mtllib cornell_box.mtl - -o floor -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -usemtl white diff --git a/externals/tinyobjloader/models/usemtl-issue-68.mtl b/externals/tinyobjloader/models/usemtl-issue-68.mtl deleted file mode 100644 index 24a791e..0000000 --- a/externals/tinyobjloader/models/usemtl-issue-68.mtl +++ /dev/null @@ -1,9 +0,0 @@ -newmtl Material.001 -Ka 0 0 0 -Kd 0 0 0 -Ks 0 0 0 - -newmtl Material.003 -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/models/usemtl-issue-68.obj b/externals/tinyobjloader/models/usemtl-issue-68.obj deleted file mode 100644 index dddc900..0000000 --- a/externals/tinyobjloader/models/usemtl-issue-68.obj +++ /dev/null @@ -1,817 +0,0 @@ -# https://github.com/syoyo/tinyobjloader/issues/68 -# Blender v2.73 (sub 0) OBJ File: 'enemy.blend' -# www.blender.org -mtllib usemtl-issue-68.mtl -o Cube -v 1.864151 -1.219172 -5.532511 -v 0.575869 -0.666304 5.896140 -v 0.940448 1.000000 -1.971128 -v 1.620345 1.000000 -5.815706 -v 1.864152 1.000000 -6.334323 -v 0.575869 -0.129842 5.896143 -v 5.440438 -1.462153 -5.818601 -v 4.896782 -1.462153 -2.744413 -v 1.000825 -0.677484 1.899605 -v 5.440438 -1.246362 -5.818600 -v 1.000825 0.852342 1.899608 -v 4.896782 -1.246362 -2.744412 -v 1.160660 -0.450871 -2.356325 -v 1.704316 -0.450871 -5.430513 -v 1.000825 -0.351920 -1.293797 -v 1.000825 1.000000 -1.293794 -v 1.160660 -0.877888 -2.356326 -v 1.704316 -0.877888 -5.430514 -v 1.000825 -1.219172 -1.452514 -v 1.000825 1.000000 -1.452511 -v 1.000825 -0.351920 1.759410 -v 1.000825 1.000000 1.759413 -v 9.097919 1.221145 -6.212147 -v 8.356775 1.221145 -2.021231 -v 1.864151 -0.109586 -6.334325 -v 0.575869 -0.398073 5.896141 -v 9.097919 0.943958 -6.212148 -v 8.356775 0.943958 -2.021233 -v 1.061916 0.113661 -1.797961 -v 1.000825 0.161258 1.899606 -v 1.000825 0.324040 -1.293795 -v 1.803060 0.113661 -5.988876 -v 1.000825 -0.109586 -1.452513 -v 1.061916 0.776753 -1.797960 -v 1.803061 0.776753 -5.988875 -v 1.000825 0.324040 1.759412 -v 0.000825 -1.219172 -5.532512 -v 0.000825 -0.666304 5.896139 -v 0.000826 1.000000 -6.334325 -v 0.000825 -0.129842 5.896140 -v 0.000825 0.852342 1.899606 -v 0.000825 -0.677484 1.899604 -v 0.000825 -0.351920 -1.293797 -v 0.000825 1.000000 -1.293796 -v 0.000825 1.000000 -1.452513 -v 0.000825 -1.219172 -1.452515 -v 0.000825 -0.351920 1.759409 -v 0.000825 1.000000 1.759411 -v 0.000826 -0.109586 -6.334326 -v 0.000825 -0.398073 5.896140 -v 0.152918 1.000000 -5.815708 -v 0.152917 1.000000 -1.971130 -v 0.940448 1.168419 -1.971128 -v 1.620345 1.168419 -5.815706 -v 0.152918 1.168419 -5.815708 -v 0.152917 1.168419 -1.971130 -v 0.921118 1.091883 -1.050430 -v 0.921118 1.091883 1.516050 -v 0.080533 1.091883 -1.050432 -v 0.080533 1.091883 1.516048 -v 0.613003 -0.553430 5.546911 -v 0.963691 -0.559956 2.248834 -v 0.613003 -0.396857 5.546912 -v 0.963691 -0.070362 2.248835 -v 1.499370 -0.994317 3.966028 -v 1.850058 -0.997914 0.667950 -v 1.499370 -0.908021 3.966029 -v 1.850058 -0.728071 0.667951 -v 1.601022 0.760960 -6.334324 -v 1.601021 0.129454 -6.334325 -v 0.263955 0.760960 -6.334325 -v 0.263955 0.129454 -6.334325 -v 1.334809 0.760960 -7.515329 -v 1.334809 0.129455 -7.515330 -v 0.530168 0.760960 -7.515330 -v 0.530168 0.129455 -7.515330 -v 1.192720 0.649445 -7.515329 -v 1.192720 0.240971 -7.515330 -v 0.672258 0.649445 -7.515330 -v 0.672258 0.240971 -7.515330 -v 1.192719 0.649444 -6.524630 -v 1.192719 0.240970 -6.524631 -v 0.672257 0.649444 -6.524631 -v 0.672257 0.240970 -6.524631 -v 3.851026 0.431116 -1.883326 -v 3.851026 0.946662 -1.883325 -v 4.592170 0.946662 -6.074241 -v 4.592169 0.431116 -6.074242 -v 4.995714 0.561404 -1.918362 -v 4.995714 1.016394 -1.918360 -v 5.736857 1.016394 -6.109276 -v 5.736857 0.561404 -6.109277 -v 3.975454 0.471731 -2.162156 -v 3.975454 0.919244 -2.162155 -v 4.618796 0.919244 -5.800034 -v 4.618795 0.471730 -5.800035 -v 4.969088 0.584825 -2.192568 -v 4.969088 0.979775 -2.192567 -v 5.612430 0.979775 -5.830446 -v 5.612429 0.584825 -5.830447 -v 0.864214 -0.673890 3.184381 -v 0.864213 0.489129 3.184384 -v 0.864213 -0.018552 3.184383 -v 0.000825 0.489129 3.184382 -v 0.000825 -0.673890 3.184381 -v 0.850955 -0.557858 3.309075 -v 0.850955 -0.175321 3.309076 -v 1.737321 -0.996758 1.728192 -v 1.737321 -0.785920 1.728193 -v -1.864151 -1.219172 -5.532511 -v -0.575869 -0.666304 5.896140 -v -0.940448 1.000000 -1.971128 -v -1.620345 1.000000 -5.815706 -v -1.864152 1.000000 -6.334323 -v -0.575869 -0.129842 5.896143 -v -5.440438 -1.462153 -5.818601 -v -4.896782 -1.462153 -2.744413 -v -1.000825 -0.677484 1.899605 -v -5.440438 -1.246362 -5.818600 -v -1.000825 0.852342 1.899608 -v -4.896782 -1.246362 -2.744412 -v -1.160660 -0.450871 -2.356325 -v -1.704316 -0.450871 -5.430513 -v -1.000825 -0.351920 -1.293797 -v -1.000825 1.000000 -1.293794 -v -1.160660 -0.877888 -2.356326 -v -1.704316 -0.877888 -5.430514 -v -1.000825 -1.219172 -1.452514 -v -1.000825 1.000000 -1.452511 -v -1.000825 -0.351920 1.759410 -v -1.000825 1.000000 1.759413 -v -9.097919 1.221145 -6.212147 -v -8.356775 1.221145 -2.021231 -v -1.864151 -0.109586 -6.334325 -v -0.575869 -0.398073 5.896141 -v -9.097919 0.943958 -6.212148 -v -8.356775 0.943958 -2.021233 -v -1.061916 0.113661 -1.797961 -v -1.000825 0.161258 1.899606 -v -1.000825 0.324040 -1.293795 -v -1.803060 0.113661 -5.988876 -v -1.000825 -0.109586 -1.452513 -v -1.061916 0.776753 -1.797960 -v -1.803061 0.776753 -5.988875 -v -1.000825 0.324040 1.759412 -v -0.000825 -1.219172 -5.532512 -v -0.000825 -0.666304 5.896139 -v -0.000826 1.000000 -6.334325 -v -0.000825 -0.129842 5.896140 -v -0.000825 0.852342 1.899606 -v -0.000825 -0.677484 1.899604 -v -0.000825 -0.351920 -1.293797 -v -0.000825 1.000000 -1.293796 -v -0.000825 1.000000 -1.452513 -v -0.000825 -1.219172 -1.452515 -v -0.000825 -0.351920 1.759409 -v -0.000825 1.000000 1.759411 -v -0.000826 -0.109586 -6.334326 -v -0.000825 -0.398073 5.896140 -v -0.152918 1.000000 -5.815708 -v -0.152917 1.000000 -1.971130 -v -0.940448 1.168419 -1.971128 -v -1.620345 1.168419 -5.815706 -v -0.152918 1.168419 -5.815708 -v -0.152917 1.168419 -1.971130 -v -0.921118 1.091883 -1.050430 -v -0.921118 1.091883 1.516050 -v -0.080533 1.091883 -1.050432 -v -0.080533 1.091883 1.516048 -v -0.613003 -0.553430 5.546911 -v -0.963691 -0.559956 2.248834 -v -0.613003 -0.396857 5.546912 -v -0.963691 -0.070362 2.248835 -v -1.499370 -0.994317 3.966028 -v -1.850058 -0.997914 0.667950 -v -1.499370 -0.908021 3.966029 -v -1.850058 -0.728071 0.667951 -v -1.601022 0.760960 -6.334324 -v -1.601021 0.129454 -6.334325 -v -0.263955 0.760960 -6.334325 -v -0.263955 0.129454 -6.334325 -v -1.334809 0.760960 -7.515329 -v -1.334809 0.129455 -7.515330 -v -0.530168 0.760960 -7.515330 -v -0.530168 0.129455 -7.515330 -v -1.192720 0.649445 -7.515329 -v -1.192720 0.240971 -7.515330 -v -0.672258 0.649445 -7.515330 -v -0.672258 0.240971 -7.515330 -v -1.192719 0.649444 -6.524630 -v -1.192719 0.240970 -6.524631 -v -0.672257 0.649444 -6.524631 -v -0.672257 0.240970 -6.524631 -v -3.851026 0.431116 -1.883326 -v -3.851026 0.946662 -1.883325 -v -4.592170 0.946662 -6.074241 -v -4.592169 0.431116 -6.074242 -v -4.995714 0.561404 -1.918362 -v -4.995714 1.016394 -1.918360 -v -5.736857 1.016394 -6.109276 -v -5.736857 0.561404 -6.109277 -v -3.975454 0.471731 -2.162156 -v -3.975454 0.919244 -2.162155 -v -4.618796 0.919244 -5.800034 -v -4.618795 0.471730 -5.800035 -v -4.969088 0.584825 -2.192568 -v -4.969088 0.979775 -2.192567 -v -5.612430 0.979775 -5.830446 -v -5.612429 0.584825 -5.830447 -v -0.864214 -0.673890 3.184381 -v -0.864213 0.489129 3.184384 -v -0.864213 -0.018552 3.184383 -v -0.000825 0.489129 3.184382 -v -0.000825 -0.673890 3.184381 -v -0.850955 -0.557858 3.309075 -v -0.850955 -0.175321 3.309076 -v -1.737321 -0.996758 1.728192 -v -1.737321 -0.785920 1.728193 -vt 0.135351 -0.558072 -vt 0.003035 -0.363507 -vt 0.092282 -0.976844 -vt -0.081322 0.947351 -vt 0.100058 1.958891 -vt 0.050091 1.852185 -vt -0.092752 1.055565 -vt -0.251711 1.059474 -vt 0.075587 0.041384 -vt -0.086008 0.279003 -vt -0.086212 0.249830 -vt -0.276044 1.968137 -vt -0.246101 1.859467 -vt 0.009828 1.911388 -vt -0.133014 1.114769 -vt 0.413322 1.261595 -vt 0.299103 0.624605 -vt 1.243955 0.407183 -vt 0.515404 1.111487 -vt 1.358173 1.044173 -vt -0.081553 0.914324 -vt 0.080042 0.676706 -vt 0.401185 0.474498 -vt 1.295541 0.331328 -vt 0.365315 1.568841 -vt 0.299111 1.575740 -vt 0.143401 0.707357 -vt 0.629403 1.011947 -vt 0.449192 0.167251 -vt 1.409760 0.968317 -vt 0.986264 1.738667 -vt 1.573373 1.877873 -vt 1.417663 1.009490 -vt 0.237182 -0.196235 -vt 0.721785 1.030226 -vt 0.830554 0.870285 -vt 0.877494 1.898608 -vt 1.351399 1.106930 -vt 0.183935 0.557301 -vt 1.507109 1.975312 -vt 0.241636 0.439088 -vt 0.114297 -0.045011 -vt 0.140593 1.808834 -vt -0.015118 0.940452 -vt 0.156405 -1.071134 -vt 0.164119 -0.998223 -vt 0.040336 -1.068281 -vt 0.104459 -1.162571 -vt -0.165787 1.882802 -vt -0.014821 1.660811 -vt -0.287852 0.283965 -vt -0.293374 0.366508 -vt -0.289630 0.900550 -vt 0.035337 -0.191272 -vt 0.247348 0.172213 -vt 0.253300 1.021193 -vt -0.283166 0.952313 -vt -0.283398 0.919286 -vt 0.039792 0.444050 -vt 0.314806 -0.339851 -vt 0.112962 -0.334889 -vt -0.288056 0.254793 -vt -0.023788 -0.973990 -vt -0.155922 -0.359599 -vt 0.220528 -1.165425 -vt 0.108710 -0.748730 -vt -0.286364 1.918670 -vt -0.291973 1.118678 -vt -0.119962 0.896379 -vt -0.123707 0.362337 -vt 0.162891 -0.598569 -vt 0.467532 -0.853353 -vt 0.201549 -1.053262 -vt 0.161663 -0.198915 -vt 0.267667 -0.752638 -vt 0.278705 -0.371021 -vt 0.526390 -0.542053 -vt 0.483821 -0.479457 -vt 0.488162 -0.883689 -vt 0.500110 -0.105561 -vt 0.564618 -0.200418 -vt -0.110331 2.127229 -vt 0.040636 1.905238 -vt -0.010786 1.578087 -vt 0.104092 1.876168 -vt 0.255058 1.654176 -vt -0.054992 2.087323 -vt 0.203048 1.901245 -vt 0.052081 2.123235 -vt 0.042658 1.943733 -vt -0.056437 1.881175 -vt 0.147710 1.941151 -vt 0.050060 2.084741 -vt 0.146264 1.735002 -vt 0.041212 1.737584 -vt 0.048615 1.878591 -vt 0.663065 1.872485 -vt 0.786311 1.691257 -vt 0.507355 1.004102 -vt 0.630601 0.822874 -vt 0.955144 1.689498 -vt 0.860727 1.828333 -vt 0.725565 1.074543 -vt 0.819981 0.935708 -vt 0.674594 1.805657 -vt 0.539432 1.051867 -vt 0.646413 0.894554 -vt 0.781576 1.648344 -vt 0.240127 -0.712141 -vn 0.994400 0.000000 0.105700 -vn 0.000000 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn 0.984700 0.000000 0.174100 -vn 0.211800 0.976600 0.037500 -vn -0.103300 0.000000 -0.994600 -vn 0.103300 -0.000000 0.994600 -vn 0.911400 0.378700 0.161200 -vn -0.157300 -0.987200 -0.027800 -vn 0.113700 -0.993300 0.020100 -vn 0.030600 -0.000000 0.999500 -vn -0.061100 0.998100 -0.010800 -vn -0.030600 0.000000 -0.999500 -vn -0.000000 -0.000000 1.000000 -vn 0.000000 0.000000 -1.000000 -vn -0.755400 0.655300 0.000000 -vn 0.000000 -1.000000 0.000000 -vn -0.000000 -0.180000 0.983700 -vn 0.000000 -0.395500 -0.918500 -vn -0.000000 0.688500 0.725200 -vn 0.000000 -0.585700 -0.810500 -vn -0.000000 0.974900 0.222500 -vn -0.000000 -1.000000 0.002800 -vn -1.000000 0.000000 -0.000000 -vn -0.000000 0.935500 0.353200 -vn 0.755400 0.655300 0.000000 -vn 0.000000 0.935500 -0.353200 -vn 0.673800 0.724900 0.143400 -vn 0.872300 -0.000000 0.489100 -vn -0.872300 0.000000 -0.489100 -vn -0.518300 -0.853500 -0.054200 -vn -0.975500 0.000000 -0.219900 -vn 0.975500 0.000000 -0.219900 -vn -0.913200 0.000000 -0.407500 -vn -0.436900 0.896200 -0.077300 -vn -0.995300 -0.000000 0.096600 -vn -0.297300 -0.953400 -0.052600 -vn 0.473900 -0.876600 0.083800 -vn 0.913200 0.000000 0.407500 -vn 0.342200 0.937700 0.060500 -vn 0.995300 -0.000000 -0.096600 -vn -0.519200 -0.853000 -0.054300 -vn 0.722400 0.676400 0.143800 -vn -0.994400 0.000000 0.105700 -vn -0.984700 0.000000 0.174100 -vn -0.211800 0.976600 0.037500 -vn 0.103300 0.000000 -0.994600 -vn -0.103300 -0.000000 0.994600 -vn -0.911400 0.378700 0.161200 -vn 0.157300 -0.987200 -0.027800 -vn -0.113700 -0.993300 0.020100 -vn -0.030600 -0.000000 0.999500 -vn 0.061100 0.998100 -0.010800 -vn 0.030600 0.000000 -0.999500 -vn -0.691900 0.713200 0.112500 -vn -0.872300 -0.000000 0.489100 -vn 0.872300 0.000000 -0.489100 -vn 0.518300 -0.853500 -0.054200 -vn 0.913200 0.000000 -0.407500 -vn 0.436900 0.896200 -0.077300 -vn 0.995300 0.000000 0.096600 -vn 0.297300 -0.953300 -0.052600 -vn -0.473900 -0.876600 0.083800 -vn -0.913200 -0.000000 0.407500 -vn -0.342200 0.937700 0.060500 -vn -0.995300 -0.000000 -0.096600 -vn 0.519200 -0.853000 -0.054300 -vn -0.714800 0.690100 0.113700 -vn 0.974400 0.089700 0.206200 -vn 0.870400 0.288400 0.399100 -vn 0.691900 0.713200 0.112500 -vn -0.518000 -0.853700 -0.053400 -vn -0.519700 -0.852700 -0.053600 -vn 0.714800 0.690100 0.113700 -vn -0.974400 0.089700 0.206200 -vn -0.870400 0.288400 0.399100 -vn -0.673800 0.724900 0.143400 -vn 0.518000 -0.853700 -0.053400 -vn 0.297300 -0.953400 -0.052600 -vn 0.519700 -0.852700 -0.053600 -vn -0.722400 0.676400 0.143800 -vn -0.000000 0.962300 0.272000 -usemtl Material.001 -s off -f 103/1/1 102/2/1 6/3/1 -f 20/4/2 5/5/2 4/6/2 -f 20/4/2 3/7/2 52/8/2 -f 36/9/3 22/10/3 11/11/3 -f 39/12/2 51/13/2 4/6/2 -f 4/6/4 54/14/4 53/15/4 -f 14/16/5 13/17/5 12/18/5 -f 18/19/6 14/16/6 10/20/6 -f 20/4/3 16/21/3 31/22/3 -f 17/23/7 8/24/7 12/18/7 -f 25/25/4 32/26/4 29/27/4 -f 10/20/4 12/18/4 8/24/4 -f 1/28/8 18/19/8 17/23/8 -f 19/29/4 17/23/4 13/17/4 -f 25/25/4 14/16/4 18/19/4 -f 18/19/9 7/30/9 8/24/9 -f 92/31/10 27/32/10 28/33/10 -f 16/21/3 22/10/3 36/9/3 -f 31/22/3 36/9/3 21/34/3 -f 90/35/11 89/36/11 28/33/11 -f 91/37/12 90/35/12 24/38/12 -f 33/39/4 13/17/4 14/16/4 -f 23/40/4 24/38/4 28/33/4 -f 33/39/3 31/22/3 15/41/3 -f 21/34/3 36/9/3 30/42/3 -f 5/5/4 35/43/4 32/26/4 -f 5/5/4 20/4/4 34/44/4 -f 33/39/4 29/27/4 34/44/4 -f 91/37/13 23/40/13 27/32/13 -f 103/1/1 26/45/1 63/46/1 -f 26/45/14 50/47/14 38/48/14 -f 39/12/15 71/49/15 72/50/15 -f 48/51/16 60/52/16 59/53/16 -f 15/41/17 21/34/17 47/54/17 -f 19/29/17 46/55/17 37/56/17 -f 39/12/2 45/57/2 52/8/2 -f 20/4/2 45/57/2 44/58/2 -f 19/29/18 15/41/18 43/59/18 -f 9/60/19 42/61/19 47/54/19 -f 22/10/20 48/51/20 41/62/20 -f 25/25/21 1/28/21 37/56/21 -f 6/3/14 40/63/14 50/47/14 -f 104/64/22 40/63/22 6/3/22 -f 2/65/23 38/48/23 105/66/23 -f 55/67/2 56/68/2 53/15/2 -f 3/7/14 53/15/14 56/68/14 -f 51/13/15 55/67/15 54/14/15 -f 52/8/24 56/68/24 55/67/24 -f 57/69/2 59/53/2 60/52/2 -f 48/51/25 22/10/25 58/70/25 -f 16/21/26 57/69/26 58/70/26 -f 16/21/27 44/58/27 59/53/27 -f 107/71/28 63/46/28 67/72/28 -f 26/45/1 2/65/1 61/73/1 -f 9/60/1 30/42/1 64/74/1 -f 101/75/1 9/60/1 62/76/1 -f 108/77/1 109/78/1 67/72/1 -f 61/73/29 65/79/29 67/72/29 -f 62/76/30 64/74/30 68/80/30 -f 62/76/31 66/81/31 108/77/31 -f 71/49/32 75/82/32 76/83/32 -f 25/25/15 49/84/15 72/50/15 -f 5/5/15 69/85/15 71/49/15 -f 25/25/15 70/86/15 69/85/15 -f 76/83/15 75/82/15 79/87/15 -f 72/50/17 76/83/17 74/88/17 -f 71/49/2 69/85/2 73/89/2 -f 70/86/33 74/88/33 73/89/33 -f 80/90/3 79/87/3 83/91/3 -f 76/83/15 80/90/15 78/92/15 -f 75/82/15 73/89/15 77/93/15 -f 74/88/15 78/92/15 77/93/15 -f 82/94/15 84/95/15 83/91/15 -f 80/90/2 84/95/2 82/94/2 -f 77/93/17 81/96/17 83/91/17 -f 77/93/24 78/92/24 82/94/24 -f 35/43/13 87/97/13 88/98/13 -f 35/43/12 34/44/12 86/99/12 -f 34/44/11 29/27/11 85/100/11 -f 32/26/10 88/98/10 85/100/10 -f 92/31/34 100/101/34 99/102/34 -f 90/35/35 91/37/35 99/102/35 -f 89/36/36 90/35/36 98/103/36 -f 89/36/37 97/104/37 100/101/37 -f 95/105/13 99/102/13 100/101/13 -f 95/105/12 94/106/12 98/103/12 -f 94/106/11 93/107/11 97/104/11 -f 96/108/10 100/101/10 97/104/10 -f 88/98/38 96/108/38 93/107/38 -f 86/99/39 85/100/39 93/107/39 -f 87/97/40 86/99/40 94/106/40 -f 87/97/41 95/105/41 96/108/41 -f 106/109/42 108/77/42 65/79/42 -f 66/81/1 68/80/1 109/78/1 -f 101/75/1 106/109/1 61/73/1 -f 64/74/43 107/71/43 109/78/43 -f 101/75/23 105/66/23 42/61/23 -f 103/1/1 107/71/1 64/74/1 -f 30/42/1 11/11/1 102/2/1 -f 212/1/44 135/45/44 115/3/44 -f 129/4/2 112/7/2 113/6/2 -f 161/8/2 112/7/2 129/4/2 -f 145/9/24 139/42/24 120/11/24 -f 113/6/2 160/13/2 148/12/2 -f 162/15/45 163/14/45 113/6/45 -f 123/16/46 119/20/46 121/18/46 -f 127/19/47 116/30/47 119/20/47 -f 140/22/24 125/21/24 129/4/24 -f 121/18/48 117/24/48 126/23/48 -f 138/27/45 141/26/45 134/25/45 -f 117/24/45 121/18/45 119/20/45 -f 126/23/49 127/19/49 110/28/49 -f 122/17/45 126/23/45 128/29/45 -f 127/19/45 123/16/45 134/25/45 -f 117/24/50 116/30/50 127/19/50 -f 137/33/51 136/32/51 201/31/51 -f 145/9/24 131/10/24 125/21/24 -f 130/34/24 145/9/24 140/22/24 -f 199/35/52 133/38/52 137/33/52 -f 200/37/53 132/40/53 133/38/53 -f 123/16/45 122/17/45 142/39/45 -f 137/33/45 133/38/45 132/40/45 -f 124/41/24 140/22/24 142/39/24 -f 130/34/24 118/60/24 139/42/24 -f 141/26/45 144/43/45 114/5/45 -f 114/5/45 144/43/45 143/44/45 -f 143/44/45 138/27/45 142/39/45 -f 136/32/54 132/40/54 200/37/54 -f 212/1/44 216/71/44 172/46/44 -f 147/48/14 159/47/14 135/45/14 -f 181/50/15 180/49/15 148/12/15 -f 168/53/26 169/52/26 157/51/26 -f 124/41/17 152/59/17 156/54/17 -f 146/56/17 155/55/17 128/29/17 -f 148/12/2 160/13/2 161/8/2 -f 129/4/2 125/21/2 153/58/2 -f 155/55/18 152/59/18 124/41/18 -f 130/34/19 156/54/19 151/61/19 -f 131/10/20 120/11/20 150/62/20 -f 134/25/21 158/84/21 146/56/21 -f 159/47/14 149/63/14 115/3/14 -f 115/3/22 149/63/22 213/64/22 -f 214/66/23 147/48/23 111/65/23 -f 162/15/2 165/68/2 164/67/2 -f 165/68/14 162/15/14 112/7/14 -f 163/14/15 164/67/15 160/13/15 -f 164/67/3 165/68/3 161/8/3 -f 166/69/2 167/70/2 169/52/2 -f 157/51/25 169/52/25 167/70/25 -f 167/70/16 166/69/16 125/21/16 -f 125/21/27 166/69/27 168/53/27 -f 216/71/55 218/78/55 176/72/55 -f 135/45/44 172/46/44 170/73/44 -f 118/60/44 171/76/44 173/74/44 -f 210/75/44 215/109/44 171/76/44 -f 217/77/44 174/79/44 176/72/44 -f 176/72/56 174/79/56 170/73/56 -f 171/76/57 175/81/57 177/80/57 -f 217/77/58 175/81/58 171/76/58 -f 185/83/33 184/82/33 180/49/33 -f 134/25/15 179/86/15 181/50/15 -f 180/49/15 178/85/15 114/5/15 -f 178/85/15 179/86/15 134/25/15 -f 189/90/15 188/87/15 184/82/15 -f 183/88/17 185/83/17 181/50/17 -f 180/49/2 184/82/2 182/89/2 -f 182/89/32 183/88/32 179/86/32 -f 189/90/24 193/95/24 192/91/24 -f 187/92/15 189/90/15 185/83/15 -f 184/82/15 188/87/15 186/93/15 -f 186/93/15 187/92/15 183/88/15 -f 192/91/15 193/95/15 191/94/15 -f 191/94/2 193/95/2 189/90/2 -f 192/91/17 190/96/17 186/93/17 -f 186/93/3 190/96/3 191/94/3 -f 197/98/54 196/97/54 144/43/54 -f 144/43/53 196/97/53 195/99/53 -f 143/44/52 195/99/52 194/100/52 -f 194/100/51 197/98/51 141/26/51 -f 208/102/59 209/101/59 201/31/59 -f 199/35/60 207/103/60 208/102/60 -f 198/36/61 206/104/61 207/103/61 -f 209/101/62 206/104/62 198/36/62 -f 209/101/54 208/102/54 204/105/54 -f 204/105/53 208/102/53 207/103/53 -f 203/106/52 207/103/52 206/104/52 -f 206/104/51 209/101/51 205/108/51 -f 202/107/63 205/108/63 197/98/63 -f 195/99/64 203/106/64 202/107/64 -f 196/97/65 204/105/65 203/106/65 -f 205/108/66 204/105/66 196/97/66 -f 174/79/67 217/77/67 215/109/67 -f 175/81/44 217/77/44 218/78/44 -f 170/73/44 215/109/44 210/75/44 -f 173/74/68 177/80/68 218/78/68 -f 151/61/23 214/66/23 210/75/23 -f 173/74/44 216/71/44 212/1/44 -f 139/42/44 212/1/44 211/2/44 -f 26/45/1 103/1/1 6/3/1 -f 3/7/2 20/4/2 4/6/2 -f 45/57/2 20/4/2 52/8/2 -f 30/42/3 36/9/3 11/11/3 -f 5/5/2 39/12/2 4/6/2 -f 3/7/4 4/6/4 53/15/4 -f 10/20/5 14/16/5 12/18/5 -f 7/30/6 18/19/6 10/20/6 -f 33/39/3 20/4/3 31/22/3 -f 13/17/7 17/23/7 12/18/7 -f 33/39/4 25/25/4 29/27/4 -f 7/30/4 10/20/4 8/24/4 -f 19/29/69 1/28/69 17/23/69 -f 33/39/4 19/29/4 13/17/4 -f 1/28/70 25/25/70 18/19/70 -f 17/23/9 18/19/9 8/24/9 -f 89/36/10 92/31/10 28/33/10 -f 31/22/3 16/21/3 36/9/3 -f 15/41/3 31/22/3 21/34/3 -f 24/38/11 90/35/11 28/33/11 -f 23/40/12 91/37/12 24/38/12 -f 25/25/4 33/39/4 14/16/4 -f 27/32/4 23/40/4 28/33/4 -f 19/29/3 33/39/3 15/41/3 -f 9/60/3 21/34/3 30/42/3 -f 25/25/4 5/5/4 32/26/4 -f 35/43/4 5/5/4 34/44/4 -f 20/4/4 33/39/4 34/44/4 -f 92/31/13 91/37/13 27/32/13 -f 107/71/1 103/1/1 63/46/1 -f 2/65/14 26/45/14 38/48/14 -f 49/84/15 39/12/15 72/50/15 -f 44/58/16 48/51/16 59/53/16 -f 43/59/17 15/41/17 47/54/17 -f 1/28/17 19/29/17 37/56/17 -f 51/13/2 39/12/2 52/8/2 -f 16/21/2 20/4/2 44/58/2 -f 46/55/18 19/29/18 43/59/18 -f 21/34/19 9/60/19 47/54/19 -f 11/11/20 22/10/20 41/62/20 -f 49/84/21 25/25/21 37/56/21 -f 26/45/14 6/3/14 50/47/14 -f 102/2/22 104/64/22 6/3/22 -f 101/75/23 2/65/23 105/66/23 -f 54/14/2 55/67/2 53/15/2 -f 52/8/14 3/7/14 56/68/14 -f 4/6/15 51/13/15 54/14/15 -f 51/13/24 52/8/24 55/67/24 -f 58/70/2 57/69/2 60/52/2 -f 60/52/25 48/51/25 58/70/25 -f 22/10/26 16/21/26 58/70/26 -f 57/69/27 16/21/27 59/53/27 -f 109/78/71 107/71/71 67/72/71 -f 63/46/1 26/45/1 61/73/1 -f 62/76/1 9/60/1 64/74/1 -f 106/109/1 101/75/1 62/76/1 -f 65/79/1 108/77/1 67/72/1 -f 63/46/29 61/73/29 67/72/29 -f 66/81/30 62/76/30 68/80/30 -f 106/109/72 62/76/72 108/77/72 -f 72/50/32 71/49/32 76/83/32 -f 70/86/15 25/25/15 72/50/15 -f 39/12/15 5/5/15 71/49/15 -f 5/5/15 25/25/15 69/85/15 -f 80/90/15 76/83/15 79/87/15 -f 70/86/17 72/50/17 74/88/17 -f 75/82/2 71/49/2 73/89/2 -f 69/85/33 70/86/33 73/89/33 -f 84/95/3 80/90/3 83/91/3 -f 74/88/15 76/83/15 78/92/15 -f 79/87/15 75/82/15 77/93/15 -f 73/89/15 74/88/15 77/93/15 -f 81/96/15 82/94/15 83/91/15 -f 78/92/2 80/90/2 82/94/2 -f 79/87/17 77/93/17 83/91/17 -f 81/96/24 77/93/24 82/94/24 -f 32/26/13 35/43/13 88/98/13 -f 87/97/12 35/43/12 86/99/12 -f 86/99/11 34/44/11 85/100/11 -f 29/27/10 32/26/10 85/100/10 -f 91/37/34 92/31/34 99/102/34 -f 98/103/35 90/35/35 99/102/35 -f 97/104/36 89/36/36 98/103/36 -f 92/31/37 89/36/37 100/101/37 -f 96/108/13 95/105/13 100/101/13 -f 99/102/12 95/105/12 98/103/12 -f 98/103/11 94/106/11 97/104/11 -f 93/107/10 96/108/10 97/104/10 -f 85/100/38 88/98/38 93/107/38 -f 94/106/39 86/99/39 93/107/39 -f 95/105/40 87/97/40 94/106/40 -f 88/98/41 87/97/41 96/108/41 -f 61/73/73 106/109/73 65/79/73 -f 108/77/1 66/81/1 109/78/1 -f 2/65/1 101/75/1 61/73/1 -f 68/80/74 64/74/74 109/78/74 -f 9/60/23 101/75/23 42/61/23 -f 30/42/1 103/1/1 64/74/1 -f 103/1/1 30/42/1 102/2/1 -f 211/2/44 212/1/44 115/3/44 -f 114/5/2 129/4/2 113/6/2 -f 154/57/2 161/8/2 129/4/2 -f 131/10/24 145/9/24 120/11/24 -f 114/5/2 113/6/2 148/12/2 -f 112/7/45 162/15/45 113/6/45 -f 122/17/46 123/16/46 121/18/46 -f 123/16/47 127/19/47 119/20/47 -f 142/39/24 140/22/24 129/4/24 -f 122/17/48 121/18/48 126/23/48 -f 142/39/45 138/27/45 134/25/45 -f 116/30/45 117/24/45 119/20/45 -f 128/29/75 126/23/75 110/28/75 -f 142/39/45 122/17/45 128/29/45 -f 110/28/76 127/19/76 134/25/76 -f 126/23/50 117/24/50 127/19/50 -f 198/36/51 137/33/51 201/31/51 -f 140/22/24 145/9/24 125/21/24 -f 124/41/24 130/34/24 140/22/24 -f 198/36/52 199/35/52 137/33/52 -f 199/35/53 200/37/53 133/38/53 -f 134/25/45 123/16/45 142/39/45 -f 136/32/45 137/33/45 132/40/45 -f 128/29/24 124/41/24 142/39/24 -f 145/9/24 130/34/24 139/42/24 -f 134/25/45 141/26/45 114/5/45 -f 129/4/45 114/5/45 143/44/45 -f 129/4/45 143/44/45 142/39/45 -f 201/31/54 136/32/54 200/37/54 -f 135/45/44 212/1/44 172/46/44 -f 111/65/14 147/48/14 135/45/14 -f 158/84/15 181/50/15 148/12/15 -f 153/58/26 168/53/26 157/51/26 -f 130/34/17 124/41/17 156/54/17 -f 110/28/17 146/56/17 128/29/17 -f 154/57/2 148/12/2 161/8/2 -f 154/57/2 129/4/2 153/58/2 -f 128/29/18 155/55/18 124/41/18 -f 118/60/19 130/34/19 151/61/19 -f 157/51/20 131/10/20 150/62/20 -f 110/28/21 134/25/21 146/56/21 -f 135/45/14 159/47/14 115/3/14 -f 211/2/22 115/3/22 213/64/22 -f 210/75/23 214/66/23 111/65/23 -f 163/14/2 162/15/2 164/67/2 -f 161/8/14 165/68/14 112/7/14 -f 113/6/15 163/14/15 160/13/15 -f 160/13/3 164/67/3 161/8/3 -f 168/53/2 166/69/2 169/52/2 -f 131/10/25 157/51/25 167/70/25 -f 131/10/16 167/70/16 125/21/16 -f 153/58/27 125/21/27 168/53/27 -f 172/46/77 216/71/77 176/72/77 -f 111/65/44 135/45/44 170/73/44 -f 139/42/44 118/60/44 173/74/44 -f 118/60/44 210/75/44 171/76/44 -f 218/78/44 217/77/44 176/72/44 -f 172/46/56 176/72/56 170/73/56 -f 173/74/57 171/76/57 177/80/57 -f 215/109/78 217/77/78 171/76/78 -f 181/50/33 185/83/33 180/49/33 -f 158/84/15 134/25/15 181/50/15 -f 148/12/15 180/49/15 114/5/15 -f 114/5/15 178/85/15 134/25/15 -f 185/83/15 189/90/15 184/82/15 -f 179/86/17 183/88/17 181/50/17 -f 178/85/2 180/49/2 182/89/2 -f 178/85/32 182/89/32 179/86/32 -f 188/87/24 189/90/24 192/91/24 -f 183/88/15 187/92/15 185/83/15 -f 182/89/15 184/82/15 186/93/15 -f 182/89/15 186/93/15 183/88/15 -f 190/96/15 192/91/15 191/94/15 -f 187/92/2 191/94/2 189/90/2 -f 188/87/17 192/91/17 186/93/17 -f 187/92/3 186/93/3 191/94/3 -f 141/26/54 197/98/54 144/43/54 -f 143/44/53 144/43/53 195/99/53 -f 138/27/52 143/44/52 194/100/52 -f 138/27/51 194/100/51 141/26/51 -f 200/37/59 208/102/59 201/31/59 -f 200/37/60 199/35/60 208/102/60 -f 199/35/61 198/36/61 207/103/61 -f 201/31/79 209/101/79 198/36/79 -f 205/108/54 209/101/54 204/105/54 -f 203/106/53 204/105/53 207/103/53 -f 202/107/52 203/106/52 206/104/52 -f 202/107/51 206/104/51 205/108/51 -f 194/100/63 202/107/63 197/98/63 -f 194/100/64 195/99/64 202/107/64 -f 195/99/65 196/97/65 203/106/65 -f 197/98/66 205/108/66 196/97/66 -f 170/73/80 174/79/80 215/109/80 -f 177/80/44 175/81/44 218/78/44 -f 111/65/44 170/73/44 210/75/44 -f 216/71/81 173/74/81 218/78/81 -f 118/60/23 151/61/23 210/75/23 -f 139/42/44 173/74/44 212/1/44 -f 120/11/44 139/42/44 211/2/44 -usemtl Material.003 -f 41/62/82 104/64/82 102/2/82 -f 211/2/82 213/64/82 150/62/82 -f 11/11/82 41/62/82 102/2/82 -f 120/11/82 211/2/82 150/62/82 diff --git a/externals/tinyobjloader/premake4.lua b/externals/tinyobjloader/premake4.lua deleted file mode 100644 index cd5b295..0000000 --- a/externals/tinyobjloader/premake4.lua +++ /dev/null @@ -1,29 +0,0 @@ -sources = { - "loader_example.cc", - } - --- premake4.lua -solution "TinyObjLoaderSolution" - configurations { "Release", "Debug" } - - if (os.is("windows")) then - platforms { "x32", "x64" } - else - platforms { "native", "x32", "x64" } - end - - -- A project defines one build target - project "tinyobjloader" - kind "ConsoleApp" - language "C++" - files { sources } - - configuration "Debug" - defines { "DEBUG" } -- -DDEBUG - flags { "Symbols" } - targetname "loader_example_debug" - - configuration "Release" - -- defines { "NDEBUG" } -- -NDEBUG - flags { "Symbols", "Optimize" } - targetname "loader_example" diff --git a/externals/tinyobjloader/python/LICENSE b/externals/tinyobjloader/python/LICENSE deleted file mode 100644 index 3af18ab..0000000 --- a/externals/tinyobjloader/python/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2019 Syoyo Fujita and many contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/externals/tinyobjloader/python/MANIFEST.in b/externals/tinyobjloader/python/MANIFEST.in deleted file mode 100644 index 90ef93d..0000000 --- a/externals/tinyobjloader/python/MANIFEST.in +++ /dev/null @@ -1,6 +0,0 @@ -# Copy the header file into the python/ folder. -include ../tiny_obj_loader.h -# Include it in the source distribution. -include tiny_obj_loader.h - -include pyproject.toml diff --git a/externals/tinyobjloader/python/Makefile b/externals/tinyobjloader/python/Makefile deleted file mode 100644 index 06352ed..0000000 --- a/externals/tinyobjloader/python/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -all: - python setup.py build - -t: - python sample.py - -.PHONY: t diff --git a/externals/tinyobjloader/python/README.md b/externals/tinyobjloader/python/README.md deleted file mode 100644 index 913668f..0000000 --- a/externals/tinyobjloader/python/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# tinyobjloader, Wavefront .obj loader - -`tinyobjloader` is a python wrapper for C++ wavefront .obj loader. -`tinyobjloader` is rather fast and feature rich than other pure python version of .obj loader. - -## Requirements - -* python 3.x(3.6+ recommended) - * python 2.7 may work, but not officially supported. - -## Install - -You can install `tinyobjloader` with pip. - -``` -$ pip install tinyobjloader -``` - -## Quick tutorial - -```py -import sys -import tinyobjloader - -# Create reader. -reader = tinyobjloader.ObjReader() - -filename = "cornellbox.obj" - -# Load .obj(and .mtl) using default configuration -ret = reader.ParseFromFile(filename) - -if ret == False: - print("Warn:", reader.Warning()) - pint("Err:", reader.Error()) - print("Failed to load : ", filename) - - sys.exit(-1) - -if reader.Warning(): - print("Warn:", reader.Warning()) - -attrib = reader.GetAttrib() -print("attrib.vertices = ", len(attrib.vertices)) -print("attrib.normals = ", len(attrib.normals)) -print("attrib.texcoords = ", len(attrib.texcoords)) - -materials = reader.GetMaterials() -print("Num materials: ", len(materials)) -for m in materials: - print(m.name) - print(m.diffuse) - -shapes = reader.GetShapes() -print("Num shapes: ", len(shapes)) -for shape in shapes: - print(shape.name) - print("num_indices = {}".format(len(shape.mesh.indices))) - -``` - -## More detailed usage - -Please take a look at `python/sample.py` file in tinyobjloader git repo. - -https://github.com/syoyo/tinyobjloader/blob/master/python/sample.py - -## How to build - -Using `cibuildwheel` is an recommended way to build a python module. -See $tinyobjloader/azure-pipelines.yml for details. - -### Developer build - -Edit `setup.py` and uncomment `Developer option` lines - -Assume pip is installed. - -``` -$ pip install pybind11 -$ python setup.py build -``` - -## License - -MIT(tinyobjloader) and ISC(mapbox earcut) license. - -## TODO - * [ ] Writer saver - diff --git a/externals/tinyobjloader/python/bindings.cc b/externals/tinyobjloader/python/bindings.cc deleted file mode 100644 index 08592d7..0000000 --- a/externals/tinyobjloader/python/bindings.cc +++ /dev/null @@ -1,163 +0,0 @@ -#include -#include -#include -#include - -// Use double precision for better python integration. -#define TINYOBJLOADER_USE_DOUBLE - -// define some helper functions for pybind11 -#define TINY_OBJ_LOADER_PYTHON_BINDING -#include "tiny_obj_loader.h" - -namespace py = pybind11; - -using namespace tinyobj; - -PYBIND11_MODULE(tinyobjloader, tobj_module) -{ - tobj_module.doc() = "Python bindings for TinyObjLoader."; - - // register struct - py::class_(tobj_module, "ObjReaderConfig") - .def(py::init<>()) - .def_readwrite("triangulate", &ObjReaderConfig::triangulate); - - // py::init<>() for default constructor - py::class_(tobj_module, "ObjReader") - .def(py::init<>()) - .def("ParseFromFile", &ObjReader::ParseFromFile, py::arg("filename"), py::arg("option") = ObjReaderConfig()) - .def("ParseFromString", &ObjReader::ParseFromString, py::arg("obj_text"), py::arg("mtl_text"), py::arg("option") = ObjReaderConfig()) - .def("Valid", &ObjReader::Valid) - .def("GetAttrib", &ObjReader::GetAttrib) - .def("GetShapes", &ObjReader::GetShapes) - .def("GetMaterials", &ObjReader::GetMaterials) - .def("Warning", &ObjReader::Warning) - .def("Error", &ObjReader::Error); - - py::class_(tobj_module, "attrib_t") - .def(py::init<>()) - .def_readonly("vertices", &attrib_t::vertices) - .def("numpy_vertices", [] (attrib_t &instance) { - auto ret = py::array_t(instance.vertices.size()); - py::buffer_info buf = ret.request(); - memcpy(buf.ptr, instance.vertices.data(), instance.vertices.size() * sizeof(real_t)); - return ret; - }) - .def_readonly("normals", &attrib_t::normals) - .def_readonly("texcoords", &attrib_t::texcoords) - .def_readonly("colors", &attrib_t::colors) - ; - - py::class_(tobj_module, "shape_t") - .def(py::init<>()) - .def_readwrite("name", &shape_t::name) - .def_readwrite("mesh", &shape_t::mesh) - .def_readwrite("lines", &shape_t::lines) - .def_readwrite("points", &shape_t::points); - - py::class_(tobj_module, "index_t") - .def(py::init<>()) - .def_readwrite("vertex_index", &index_t::vertex_index) - .def_readwrite("normal_index", &index_t::normal_index) - .def_readwrite("texcoord_index", &index_t::texcoord_index) - ; - - // NOTE(syoyo): It looks it is rather difficult to expose assignment by array index to - // python world for array variable. - // For example following python scripting does not work well. - // - // print(mat.diffuse) - // >>> [0.1, 0.2, 0.3] - // mat.diffuse[1] = 1.0 - // print(mat.diffuse) - // >>> [0.1, 0.2, 0.3] # No modification - // - // https://github.com/pybind/pybind11/issues/1134 - // - // so, we need to update array variable like this: - // - // diffuse = mat.diffuse - // diffuse[1] = 1.0 - // mat.diffuse = diffuse - // - py::class_(tobj_module, "material_t") - .def(py::init<>()) - .def_readwrite("name", &material_t::name) - .def_property("ambient", &material_t::GetAmbient, &material_t::SetAmbient) - .def_property("diffuse", &material_t::GetDiffuse, &material_t::SetDiffuse) - .def_property("specular", &material_t::GetSpecular, &material_t::SetSpecular) - .def_property("transmittance", &material_t::GetTransmittance, &material_t::SetTransmittance) - .def_readwrite("shininess", &material_t::shininess) - .def_readwrite("ior", &material_t::ior) - .def_readwrite("dissolve", &material_t::dissolve) - .def_readwrite("illum", &material_t::illum) - .def_readwrite("ambient_texname", &material_t::ambient_texname) - .def_readwrite("diffuse_texname", &material_t::diffuse_texname) - .def_readwrite("specular_texname", &material_t::specular_texname) - .def_readwrite("specular_highlight_texname", &material_t::specular_highlight_texname) - .def_readwrite("bump_texname", &material_t::bump_texname) - .def_readwrite("displacement_texname", &material_t::displacement_texname) - .def_readwrite("alpha_texname", &material_t::alpha_texname) - .def_readwrite("reflection_texname", &material_t::reflection_texname) - // TODO(syoyo): Expose texture parameter - // PBR - .def_readwrite("roughness", &material_t::roughness) - .def_readwrite("metallic", &material_t::metallic) - .def_readwrite("sheen", &material_t::sheen) - .def_readwrite("clearcoat_thickness", &material_t::clearcoat_thickness) - .def_readwrite("clearcoat_roughness", &material_t::clearcoat_roughness) - .def_readwrite("anisotropy", &material_t::anisotropy) - .def_readwrite("anisotropy_rotation", &material_t::anisotropy_rotation) - - .def_readwrite("roughness_texname", &material_t::roughness_texname) - .def_readwrite("metallic_texname", &material_t::metallic_texname) - .def_readwrite("sheen_texname", &material_t::sheen_texname) - .def_readwrite("emissive_texname", &material_t::emissive_texname) - .def_readwrite("normal_texname", &material_t::normal_texname) - - .def("GetCustomParameter", &material_t::GetCustomParameter) - ; - - py::class_(tobj_module, "mesh_t") - .def(py::init<>()) - .def_readonly("num_face_vertices", &mesh_t::num_face_vertices) - .def("numpy_num_face_vertices", [] (mesh_t &instance) { - auto ret = py::array_t(instance.num_face_vertices.size()); - py::buffer_info buf = ret.request(); - memcpy(buf.ptr, instance.num_face_vertices.data(), instance.num_face_vertices.size() * sizeof(unsigned char)); - return ret; - }) - .def_readonly("indices", &mesh_t::indices) - .def("numpy_indices", [] (mesh_t &instance) { - // Flatten indexes. index_t is composed of 3 ints(vertex_index, normal_index, texcoord_index). - // numpy_indices = [0, -1, -1, 1, -1, -1, ...] - // C++11 or later should pack POD struct tightly and does not reorder variables, - // so we can memcpy to copy data. - // Still, we check the size of struct and byte offsets of each variable just for sure. - static_assert(sizeof(index_t) == 12, "sizeof(index_t) must be 12"); - static_assert(offsetof(index_t, vertex_index) == 0, "offsetof(index_t, vertex_index) must be 0"); - static_assert(offsetof(index_t, normal_index) == 4, "offsetof(index_t, normal_index) must be 4"); - static_assert(offsetof(index_t, texcoord_index) == 8, "offsetof(index_t, texcoord_index) must be 8"); - - auto ret = py::array_t(instance.indices.size() * 3); - py::buffer_info buf = ret.request(); - memcpy(buf.ptr, instance.indices.data(), instance.indices.size() * 3 * sizeof(int)); - return ret; - }) - .def_readonly("material_ids", &mesh_t::material_ids) - .def("numpy_material_ids", [] (mesh_t &instance) { - auto ret = py::array_t(instance.material_ids.size()); - py::buffer_info buf = ret.request(); - memcpy(buf.ptr, instance.material_ids.data(), instance.material_ids.size() * sizeof(int)); - return ret; - }); - - py::class_(tobj_module, "lines_t") - .def(py::init<>()); - - py::class_(tobj_module, "points_t") - .def(py::init<>()); - -} - diff --git a/externals/tinyobjloader/python/pyproject.toml b/externals/tinyobjloader/python/pyproject.toml deleted file mode 100644 index 51e27c4..0000000 --- a/externals/tinyobjloader/python/pyproject.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build-system] -requires = ["setuptools", "wheel", "pybind11>=2.3"] diff --git a/externals/tinyobjloader/python/sample.py b/externals/tinyobjloader/python/sample.py deleted file mode 100644 index 2f30c00..0000000 --- a/externals/tinyobjloader/python/sample.py +++ /dev/null @@ -1,78 +0,0 @@ -import sys -import tinyobjloader - -filename = "../models/cornell_box.obj" - - -reader = tinyobjloader.ObjReader() - -# Load .obj(and .mtl) using default configuration -ret = reader.ParseFromFile(filename) - -# Optionally you can set custom `config` -# config = tinyobj.ObjReaderConfig() -# config.triangulate = False -# ret = reader.ParseFromFile(filename, config) - -if ret == False: - print("Failed to load : ", filename) - print("Warn:", reader.Warning()) - print("Err:", reader.Error()) - sys.exit(-1) - -if reader.Warning(): - print("Warn:", reader.Warning()) - -attrib = reader.GetAttrib() -print("attrib.vertices = ", len(attrib.vertices)) -print("attrib.normals = ", len(attrib.normals)) -print("attrib.texcoords = ", len(attrib.texcoords)) - -# vertex data must be `xyzxyzxyz...` -assert len(attrib.vertices) % 3 == 0 - -# normal data must be `xyzxyzxyz...` -assert len(attrib.normals) % 3 == 0 - -# texcoords data must be `uvuvuv...` -assert len(attrib.texcoords) % 2 == 0 - -for (i, v) in enumerate(attrib.vertices): - print("v[{}] = {}".format(i, v)) - -for (i, v) in enumerate(attrib.normals): - print("vn[{}] = {}".format(i, v)) - -for (i, v) in enumerate(attrib.texcoords): - print("vt[{}] = {}".format(i, t)) - -print("numpy_vertices = {}".format(attrib.numpy_vertices())) - -materials = reader.GetMaterials() -print("Num materials: ", len(materials)) -for m in materials: - print(m.name) - print(m.diffuse) - print(m.diffuse_texname) - # Partial update(array indexing) does not work - # m.diffuse[1] = 1.0 - - # Update with full object assignment works - m.diffuse = [1, 2, 3] - print(m.diffuse) - - # print(m.shininess) - # print(m.illum) - -shapes = reader.GetShapes() -print("Num shapes: ", len(shapes)) -for shape in shapes: - print(shape.name) - print("len(num_indices) = {}".format(len(shape.mesh.indices))) - for (i, idx) in enumerate(shape.mesh.indices): - print("[{}] v_idx {}".format(i, idx.vertex_index)) - print("[{}] vn_idx {}".format(i, idx.normal_index)) - print("[{}] vt_idx {}".format(i, idx.texcoord_index)) - print("numpy_indices = {}".format(shape.mesh.numpy_indices())) - print("numpy_num_face_vertices = {}".format(shape.mesh.numpy_num_face_vertices())) - print("numpy_material_ids = {}".format(shape.mesh.numpy_material_ids())) diff --git a/externals/tinyobjloader/python/setup.py b/externals/tinyobjloader/python/setup.py deleted file mode 100644 index 061b27e..0000000 --- a/externals/tinyobjloader/python/setup.py +++ /dev/null @@ -1,130 +0,0 @@ -import setuptools - -from distutils.command.build_ext import build_ext - -with open("README.md", "r") as fh: - long_description = fh.read() - -# Adapted from https://github.com/pybind/python_example/blob/master/setup.py -class get_pybind_include(object): - """Helper class to determine the pybind11 include path - The purpose of this class is to postpone importing pybind11 - until it is actually installed, so that the ``get_include()`` - method can be invoked. """ - - def __init__(self, user=False, pep517=False): - self.user = user - self.pep517 = pep517 - - def __str__(self): - import os - import pybind11 - - interpreter_include_path = pybind11.get_include(self.user) - - if self.pep517: - # When pybind11 is installed permanently in site packages, the headers - # will be in the interpreter include path above. PEP 517 provides an - # experimental feature for build system dependencies. When installing - # a package from a source distribvution, first its build dependencies - # are installed in a temporary location. pybind11 does not return the - # correct path for this condition, so we glom together a second path, - # and ultimately specify them _both_ in the include search path. - # https://github.com/pybind/pybind11/issues/1067 - return os.path.abspath( - os.path.join( - os.path.dirname(pybind11.__file__), - "..", - "..", - "..", - "..", - "include", - os.path.basename(interpreter_include_path), - ) - ) - else: - return interpreter_include_path - - -# unix = default compiler name? -copt = {"unix": ["-std=c++11"], "gcc": ["-std=c++11"], "clang": ["std=c++11"]} -# TODO: set C++ version for msvc? {'msvc': ["/std:c++14"] } - -# ext_compile_args = ["-std=c++11"] -# ext_link_args = [] - -# https://stackoverflow.com/questions/724664/python-distutils-how-to-get-a-compiler-that-is-going-to-be-used -class build_ext_subclass(build_ext): - def build_extensions(self): - c = self.compiler.compiler_type - if c in copt: - for e in self.extensions: - e.extra_compile_args = copt[c] - - # if lopt.has_key(c): - # for e in self.extensions: - # e.extra_link_args = lopt[ c ] - build_ext.build_extensions(self) - - -# Developer option -# -# if platform.system() == "Darwin": -# # XCode10 or later does not support libstdc++, so we need to use libc++. -# # macosx-version 10.6 does not support libc++, so we require min macosx version 10.9. -# ext_compile_args.append("-stdlib=libc++") -# ext_compile_args.append("-mmacosx-version-min=10.9") -# ext_link_args.append("-stdlib=libc++") -# ext_link_args.append("-mmacosx-version-min=10.9") - -# `tiny_obj_loader.cc` contains implementation of tiny_obj_loader. -m = setuptools.Extension( - "tinyobjloader", - # extra_compile_args=ext_compile_args, - # extra_link_args=ext_link_args, - sources=["bindings.cc", "tiny_obj_loader.cc"], - include_dirs=[ - # Support `build_ext` finding tinyobjloader (without first running - # `sdist`). - "..", - # Support `build_ext` finding pybind 11 (provided it's permanently - # installed). - get_pybind_include(), - get_pybind_include(user=True), - # Support building from a source distribution finding pybind11 from - # a PEP 517 temporary install. - get_pybind_include(pep517=True), - ], - language="c++", -) - - -setuptools.setup( - name="tinyobjloader", - version="2.0.0rc9", - description="Tiny but powerful Wavefront OBJ loader", - long_description=long_description, - long_description_content_type="text/markdown", - author="Syoyo Fujita", - author_email="syoyo@lighttransport.com", - url="https://github.com/tinyobjloader/tinyobjloader", - project_urls={ - "Issue Tracker": "https://github.com/tinyobjloader/tinyobjloader/issues", - }, - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Intended Audience :: Science/Research", - "Intended Audience :: Manufacturing", - "Topic :: Artistic Software", - "Topic :: Multimedia :: Graphics :: 3D Modeling", - "Topic :: Scientific/Engineering :: Visualization", - "License :: OSI Approved :: MIT License", - "License :: OSI Approved :: ISC License (ISCL)", - "Operating System :: OS Independent", - "Programming Language :: Python :: 3", - ], - packages=setuptools.find_packages(), - ext_modules=[m], - cmdclass={"build_ext": build_ext_subclass}, -) diff --git a/externals/tinyobjloader/python/tiny_obj_loader.cc b/externals/tinyobjloader/python/tiny_obj_loader.cc deleted file mode 100644 index a0b8bc6..0000000 --- a/externals/tinyobjloader/python/tiny_obj_loader.cc +++ /dev/null @@ -1,9 +0,0 @@ -// Use double precision for better python integration. -// Need also define this in `binding.cc`(and all compilation units) -#define TINYOBJLOADER_USE_DOUBLE - -// Use robust triangulation by using Mapbox earcut. -#define TINYOBJLOADER_USE_MAPBOX_EARCUT - -#define TINYOBJLOADER_IMPLEMENTATION -#include "tiny_obj_loader.h" diff --git a/externals/tinyobjloader/tests/LICENSE.acutest.txt b/externals/tinyobjloader/tests/LICENSE.acutest.txt deleted file mode 100644 index 9730920..0000000 --- a/externals/tinyobjloader/tests/LICENSE.acutest.txt +++ /dev/null @@ -1,22 +0,0 @@ - -# The MIT License (MIT) - -Copyright © 2013-2017 Martin 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, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/externals/tinyobjloader/tests/Makefile b/externals/tinyobjloader/tests/Makefile deleted file mode 100644 index 83d297d..0000000 --- a/externals/tinyobjloader/tests/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -.PHONY: clean - -CXX ?= clang++ -CXXFLAGS ?= -g -O1 -EXTRA_CXXFLAGS ?= -std=c++03 -fsanitize=address - -tester: tester.cc ../tiny_obj_loader.h - $(CXX) $(CXXFLAGS) $(EXTRA_CXXFLAGS) -o tester tester.cc - -all: tester - -check: tester - ./tester - -clean: - rm -rf tester - diff --git a/externals/tinyobjloader/tests/README.md b/externals/tinyobjloader/tests/README.md deleted file mode 100644 index 1b0b43d..0000000 --- a/externals/tinyobjloader/tests/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Build&Test - -## Use makefile - - $ make check - -## Use ninja + kuroga - -Assume - -* ninja 1.4+ -* python 2.6+ - -Are installed. - -### Linux/MacOSX - - $ python kuroga.py config-posix.py - $ ninja - -### Windows - -Visual Studio 2013 is required to build tester. - -On Windows console. - - > python kuroga.py config-msvc.py - > vcbuild.bat - - -Or on msys2 bash, - - $ python kuroga.py config-msvc.py - $ cmd //c vcbuild.bat - - - diff --git a/externals/tinyobjloader/tests/acutest.h b/externals/tinyobjloader/tests/acutest.h deleted file mode 100644 index 29a51c3..0000000 --- a/externals/tinyobjloader/tests/acutest.h +++ /dev/null @@ -1,1514 +0,0 @@ -/* - * Acutest -- Another C/C++ Unit Test facility - * - * - * Copyright (c) 2013-2019 Martin Mitas - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef ACUTEST_H__ -#define ACUTEST_H__ - - -/************************ - *** Public interface *** - ************************/ - -/* By default, "acutest.h" provides the main program entry point (function - * main()). However, if the test suite is composed of multiple source files - * which include "acutest.h", then this causes a problem of multiple main() - * definitions. To avoid this problem, #define macro TEST_NO_MAIN in all - * compilation units but one. - */ - -/* Macro to specify list of unit tests in the suite. - * The unit test implementation MUST provide list of unit tests it implements - * with this macro: - * - * TEST_LIST = { - * { "test1_name", test1_func_ptr }, - * { "test2_name", test2_func_ptr }, - * ... - * { 0 } - * }; - * - * The list specifies names of each test (must be unique) and pointer to - * a function implementing it. The function does not take any arguments - * and has no return values, i.e. every test function has to be compatible - * with this prototype: - * - * void test_func(void); - */ -#define TEST_LIST const struct test__ test_list__[] - - -/* Macros for testing whether an unit test succeeds or fails. These macros - * can be used arbitrarily in functions implementing the unit tests. - * - * If any condition fails throughout execution of a test, the test fails. - * - * TEST_CHECK takes only one argument (the condition), TEST_CHECK_ allows - * also to specify an error message to print out if the condition fails. - * (It expects printf-like format string and its parameters). The macros - * return non-zero (condition passes) or 0 (condition fails). - * - * That can be useful when more conditions should be checked only if some - * preceding condition passes, as illustrated in this code snippet: - * - * SomeStruct* ptr = allocate_some_struct(); - * if(TEST_CHECK(ptr != NULL)) { - * TEST_CHECK(ptr->member1 < 100); - * TEST_CHECK(ptr->member2 > 200); - * } - */ -#define TEST_CHECK_(cond,...) test_check__((cond), __FILE__, __LINE__, __VA_ARGS__) -#define TEST_CHECK(cond) test_check__((cond), __FILE__, __LINE__, "%s", #cond) - -#ifdef __cplusplus -/* Macros to verify that the code (the 1st argument) throws exception of given - * type (the 2nd argument). (Note these macros are only available in C++.) - * - * TEST_EXCEPTION_ is like TEST_EXCEPTION but accepts custom printf-like - * message. - * - * For example: - * - * TEST_EXCEPTION(function_that_throw(), ExpectedExceptionType); - * - * If the function_that_throw() throws ExpectedExceptionType, the check passes. - * If the function throws anything incompatible with ExpectedExceptionType - * (or if it does not thrown an exception at all), the check fails. - */ -#define TEST_EXCEPTION(code, exctype) \ - do { \ - bool exc_ok__ = false; \ - const char *msg__ = NULL; \ - try { \ - code; \ - msg__ = "No exception thrown."; \ - } catch(exctype const&) { \ - exc_ok__= true; \ - } catch(...) { \ - msg__ = "Unexpected exception thrown."; \ - } \ - test_check__(exc_ok__, __FILE__, __LINE__, #code " throws " #exctype); \ - if(msg__ != NULL) \ - test_message__("%s", msg__); \ - } while(0) -#define TEST_EXCEPTION_(code, exctype, ...) \ - do { \ - bool exc_ok__ = false; \ - const char *msg__ = NULL; \ - try { \ - code; \ - msg__ = "No exception thrown."; \ - } catch(exctype const&) { \ - exc_ok__= true; \ - } catch(...) { \ - msg__ = "Unexpected exception thrown."; \ - } \ - test_check__(exc_ok__, __FILE__, __LINE__, __VA_ARGS__); \ - if(msg__ != NULL) \ - test_message__("%s", msg__); \ - } while(0) -#endif /* #ifdef __cplusplus */ - - -/* Sometimes it is useful to split execution of more complex unit tests to some - * smaller parts and associate those parts with some names. - * - * This is especially handy if the given unit test is implemented as a loop - * over some vector of multiple testing inputs. Using these macros allow to use - * sort of subtitle for each iteration of the loop (e.g. outputting the input - * itself or a name associated to it), so that if any TEST_CHECK condition - * fails in the loop, it can be easily seen which iteration triggers the - * failure, without the need to manually output the iteration-specific data in - * every single TEST_CHECK inside the loop body. - * - * TEST_CASE allows to specify only single string as the name of the case, - * TEST_CASE_ provides all the power of printf-like string formatting. - * - * Note that the test cases cannot be nested. Starting a new test case ends - * implicitly the previous one. To end the test case explicitly (e.g. to end - * the last test case after exiting the loop), you may use TEST_CASE(NULL). - */ -#define TEST_CASE_(...) test_case__(__VA_ARGS__) -#define TEST_CASE(name) test_case__("%s", name); - - -/* printf-like macro for outputting an extra information about a failure. - * - * Intended use is to output some computed output versus the expected value, - * e.g. like this: - * - * if(!TEST_CHECK(produced == expected)) { - * TEST_MSG("Expected: %d", expected); - * TEST_MSG("Produced: %d", produced); - * } - * - * Note the message is only written down if the most recent use of any checking - * macro (like e.g. TEST_CHECK or TEST_EXCEPTION) in the current test failed. - * This means the above is equivalent to just this: - * - * TEST_CHECK(produced == expected); - * TEST_MSG("Expected: %d", expected); - * TEST_MSG("Produced: %d", produced); - * - * The macro can deal with multi-line output fairly well. It also automatically - * adds a final new-line if there is none present. - */ -#define TEST_MSG(...) test_message__(__VA_ARGS__) - - -/* Maximal output per TEST_MSG call. Longer messages are cut. - * You may define another limit prior including "acutest.h" - */ -#ifndef TEST_MSG_MAXSIZE - #define TEST_MSG_MAXSIZE 1024 -#endif - - -/* Macro for dumping a block of memory. - * - * Its inteded use is very similar to what TEST_MSG is for, but instead of - * generating any printf-like message, this is for dumping raw block of a - * memory in a hexadecimal form: - * - * TEST_CHECK(size_produced == size_expected && memcmp(addr_produced, addr_expected, size_produced) == 0); - * TEST_DUMP("Expected:", addr_expected, size_expected); - * TEST_DUMP("Produced:", addr_produced, size_produced); - */ -#define TEST_DUMP(title, addr, size) test_dump__(title, addr, size) - -/* Maximal output per TEST_DUMP call (in bytes to dump). Longer blocks are cut. - * You may define another limit prior including "acutest.h" - */ -#ifndef TEST_DUMP_MAXSIZE - #define TEST_DUMP_MAXSIZE 1024 -#endif - - -/********************** - *** Implementation *** - **********************/ - -/* The unit test files should not rely on anything below. */ - -#include -#include -#include -#include -#include - -#if defined(unix) || defined(__unix__) || defined(__unix) || defined(__APPLE__) - #define ACUTEST_UNIX__ 1 - #include - #include - #include - #include - #include - #include - - #if defined CLOCK_PROCESS_CPUTIME_ID && defined CLOCK_MONOTONIC - #define ACUTEST_HAS_POSIX_TIMER__ 1 - #endif -#endif - -#if defined(__gnu_linux__) - #define ACUTEST_LINUX__ 1 - #include - #include -#endif - -#if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__) - #define ACUTEST_WIN__ 1 - #include - #include -#endif - -#ifdef __cplusplus - #include -#endif - - -/* Note our global private identifiers end with '__' to mitigate risk of clash - * with the unit tests implementation. */ - - -#ifdef __cplusplus - extern "C" { -#endif - - -struct test__ { - const char* name; - void (*func)(void); -}; - -extern const struct test__ test_list__[]; - -int test_check__(int cond, const char* file, int line, const char* fmt, ...); -void test_case__(const char* fmt, ...); -void test_message__(const char* fmt, ...); -void test_dump__(const char* title, const void* addr, size_t size); - - -#ifndef TEST_NO_MAIN - -static char* test_argv0__ = NULL; -static size_t test_list_size__ = 0; -static const struct test__** tests__ = NULL; -static char* test_flags__ = NULL; -static size_t test_count__ = 0; -static int test_no_exec__ = -1; -static int test_no_summary__ = 0; -static int test_tap__ = 0; -static int test_skip_mode__ = 0; -static int test_worker__ = 0; -static int test_worker_index__ = 0; -static int test_cond_failed__ = 0; - -static int test_stat_failed_units__ = 0; -static int test_stat_run_units__ = 0; - -static const struct test__* test_current_unit__ = NULL; -static int test_current_index__ = 0; -static char test_case_name__[64] = ""; -static int test_current_already_logged__ = 0; -static int test_case_current_already_logged__ = 0; -static int test_verbose_level__ = 2; -static int test_current_failures__ = 0; -static int test_colorize__ = 0; -static int test_timer__ = 0; - -#if defined ACUTEST_WIN__ - static LARGE_INTEGER test_timer_freq__; - static LARGE_INTEGER test_timer_start__; - static LARGE_INTEGER test_timer_end__; - - static void - test_timer_init__(void) - { - QueryPerformanceFrequency(&test_timer_freq__); - } - - static void - test_timer_get_time__(LARGE_INTEGER* ts) - { - QueryPerformanceCounter(ts); - } - - static void - test_timer_print_diff__(void) - { - double duration = test_timer_end__.QuadPart - test_timer_start__.QuadPart; - duration /= test_timer_freq__.QuadPart; - printf("%.6lf secs", duration); - } -#elif defined ACUTEST_HAS_POSIX_TIMER__ - static clockid_t test_timer_id__; - struct timespec test_timer_start__; - struct timespec test_timer_end__; - - static void - test_timer_init__(void) - { - if(test_timer__ == 1) - #ifdef CLOCK_MONOTONIC_RAW - /* linux specific; not subject of NTP adjustements or adjtime() */ - test_timer_id__ = CLOCK_MONOTONIC_RAW; - #else - test_timer_id__ = CLOCK_MONOTONIC; - #endif - else if(test_timer__ == 2) - test_timer_id__ = CLOCK_PROCESS_CPUTIME_ID; - } - - static void - test_timer_get_time__(struct timespec* ts) - { - clock_gettime(test_timer_id__, ts); - } - - static void - test_timer_print_diff__(void) - { - double duration = ((double) test_timer_end__.tv_sec + - (double) test_timer_end__.tv_nsec * 10e-9) - - - ((double) test_timer_start__.tv_sec + - (double) test_timer_start__.tv_nsec * 10e-9); - printf("%.6lf secs", duration); - } -#else - static int test_timer_start__; - static int test_timer_end__; - - void - test_timer_init__(void) - {} - - static void - test_timer_get_time__(int* ts) - { - (void) ts; - } - - static void - test_timer_print_diff__(void) - {} -#endif - -#define TEST_COLOR_DEFAULT__ 0 -#define TEST_COLOR_GREEN__ 1 -#define TEST_COLOR_RED__ 2 -#define TEST_COLOR_DEFAULT_INTENSIVE__ 3 -#define TEST_COLOR_GREEN_INTENSIVE__ 4 -#define TEST_COLOR_RED_INTENSIVE__ 5 - -static int -test_print_in_color__(int color, const char* fmt, ...) -{ - va_list args; - char buffer[256]; - int n; - - va_start(args, fmt); - vsnprintf(buffer, sizeof(buffer), fmt, args); - va_end(args); - buffer[sizeof(buffer)-1] = '\0'; - - if(!test_colorize__) { - return printf("%s", buffer); - } - -#if defined ACUTEST_UNIX__ - { - const char* col_str; - switch(color) { - case TEST_COLOR_GREEN__: col_str = "\033[0;32m"; break; - case TEST_COLOR_RED__: col_str = "\033[0;31m"; break; - case TEST_COLOR_GREEN_INTENSIVE__: col_str = "\033[1;32m"; break; - case TEST_COLOR_RED_INTENSIVE__: col_str = "\033[1;31m"; break; - case TEST_COLOR_DEFAULT_INTENSIVE__: col_str = "\033[1m"; break; - default: col_str = "\033[0m"; break; - } - printf("%s", col_str); - n = printf("%s", buffer); - printf("\033[0m"); - return n; - } -#elif defined ACUTEST_WIN__ - { - HANDLE h; - CONSOLE_SCREEN_BUFFER_INFO info; - WORD attr; - - h = GetStdHandle(STD_OUTPUT_HANDLE); - GetConsoleScreenBufferInfo(h, &info); - - switch(color) { - case TEST_COLOR_GREEN__: attr = FOREGROUND_GREEN; break; - case TEST_COLOR_RED__: attr = FOREGROUND_RED; break; - case TEST_COLOR_GREEN_INTENSIVE__: attr = FOREGROUND_GREEN | FOREGROUND_INTENSITY; break; - case TEST_COLOR_RED_INTENSIVE__: attr = FOREGROUND_RED | FOREGROUND_INTENSITY; break; - case TEST_COLOR_DEFAULT_INTENSIVE__: attr = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; break; - default: attr = 0; break; - } - if(attr != 0) - SetConsoleTextAttribute(h, attr); - n = printf("%s", buffer); - SetConsoleTextAttribute(h, info.wAttributes); - return n; - } -#else - n = printf("%s", buffer); - return n; -#endif -} - -static void -test_begin_test_line__(const struct test__* test) -{ - if(!test_tap__) { - if(test_verbose_level__ >= 3) { - test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Test %s:\n", test->name); - test_current_already_logged__++; - } else if(test_verbose_level__ >= 1) { - int n; - char spaces[48]; - - n = test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Test %s... ", test->name); - memset(spaces, ' ', sizeof(spaces)); - if(n < (int) sizeof(spaces)) - printf("%.*s", (int) sizeof(spaces) - n, spaces); - } else { - test_current_already_logged__ = 1; - } - } -} - -static void -test_finish_test_line__(int result) -{ - if(test_tap__) { - const char* str = (result == 0) ? "ok" : "not ok"; - - printf("%s %u - %s\n", str, test_current_index__ + 1, test_current_unit__->name); - - if(result == 0 && test_timer__) { - printf("# Duration: "); - test_timer_print_diff__(); - printf("\n"); - } - } else { - int color = (result == 0) ? TEST_COLOR_GREEN_INTENSIVE__ : TEST_COLOR_RED_INTENSIVE__; - const char* str = (result == 0) ? "OK" : "FAILED"; - printf("[ "); - test_print_in_color__(color, str); - printf(" ]"); - - if(result == 0 && test_timer__) { - printf(" "); - test_timer_print_diff__(); - } - - printf("\n"); - } -} - -static void -test_line_indent__(int level) -{ - static const char spaces[] = " "; - int n = level * 2; - - if(test_tap__ && n > 0) { - n--; - printf("#"); - } - - while(n > 16) { - printf("%s", spaces); - n -= 16; - } - printf("%.*s", n, spaces); -} - -int -test_check__(int cond, const char* file, int line, const char* fmt, ...) -{ - const char *result_str; - int result_color; - int verbose_level; - - if(cond) { - result_str = "ok"; - result_color = TEST_COLOR_GREEN__; - verbose_level = 3; - } else { - if(!test_current_already_logged__ && test_current_unit__ != NULL) - test_finish_test_line__(-1); - - result_str = "failed"; - result_color = TEST_COLOR_RED__; - verbose_level = 2; - test_current_failures__++; - test_current_already_logged__++; - } - - if(test_verbose_level__ >= verbose_level) { - va_list args; - - if(!test_case_current_already_logged__ && test_case_name__[0]) { - test_line_indent__(1); - test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Case %s:\n", test_case_name__); - test_current_already_logged__++; - test_case_current_already_logged__++; - } - - test_line_indent__(test_case_name__[0] ? 2 : 1); - if(file != NULL) { - if(test_verbose_level__ < 3) { -#ifdef ACUTEST_WIN__ - const char* lastsep1 = strrchr(file, '\\'); - const char* lastsep2 = strrchr(file, '/'); - if(lastsep1 == NULL) - lastsep1 = file-1; - if(lastsep2 == NULL) - lastsep2 = file-1; - file = (lastsep1 > lastsep2 ? lastsep1 : lastsep2) + 1; -#else - const char* lastsep = strrchr(file, '/'); - if(lastsep != NULL) - file = lastsep+1; -#endif - } - printf("%s:%d: Check ", file, line); - } - - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - - printf("... "); - test_print_in_color__(result_color, result_str); - printf("\n"); - test_current_already_logged__++; - } - - test_cond_failed__ = (cond == 0); - return !test_cond_failed__; -} - -void -test_case__(const char* fmt, ...) -{ - va_list args; - - if(test_verbose_level__ < 2) - return; - - if(test_case_name__[0]) { - test_case_current_already_logged__ = 0; - test_case_name__[0] = '\0'; - } - - if(fmt == NULL) - return; - - va_start(args, fmt); - vsnprintf(test_case_name__, sizeof(test_case_name__) - 1, fmt, args); - va_end(args); - test_case_name__[sizeof(test_case_name__) - 1] = '\0'; - - if(test_verbose_level__ >= 3) { - test_line_indent__(1); - test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Case %s:\n", test_case_name__); - test_current_already_logged__++; - test_case_current_already_logged__++; - } -} - -void -test_message__(const char* fmt, ...) -{ - char buffer[TEST_MSG_MAXSIZE]; - char* line_beg; - char* line_end; - va_list args; - - if(test_verbose_level__ < 2) - return; - - /* We allow extra message only when something is already wrong in the - * current test. */ - if(test_current_unit__ == NULL || !test_cond_failed__) - return; - - va_start(args, fmt); - vsnprintf(buffer, TEST_MSG_MAXSIZE, fmt, args); - va_end(args); - buffer[TEST_MSG_MAXSIZE-1] = '\0'; - - line_beg = buffer; - while(1) { - line_end = strchr(line_beg, '\n'); - if(line_end == NULL) - break; - test_line_indent__(test_case_name__[0] ? 3 : 2); - printf("%.*s\n", (int)(line_end - line_beg), line_beg); - line_beg = line_end + 1; - } - if(line_beg[0] != '\0') { - test_line_indent__(test_case_name__[0] ? 3 : 2); - printf("%s\n", line_beg); - } -} - -void -test_dump__(const char* title, const void* addr, size_t size) -{ - static const size_t BYTES_PER_LINE = 16; - size_t line_beg; - size_t truncate = 0; - - if(test_verbose_level__ < 2) - return; - - /* We allow extra message only when something is already wrong in the - * current test. */ - if(test_current_unit__ == NULL || !test_cond_failed__) - return; - - if(size > TEST_DUMP_MAXSIZE) { - truncate = size - TEST_DUMP_MAXSIZE; - size = TEST_DUMP_MAXSIZE; - } - - test_line_indent__(test_case_name__[0] ? 3 : 2); - printf((title[strlen(title)-1] == ':') ? "%s\n" : "%s:\n", title); - - for(line_beg = 0; line_beg < size; line_beg += BYTES_PER_LINE) { - size_t line_end = line_beg + BYTES_PER_LINE; - size_t off; - - test_line_indent__(test_case_name__[0] ? 4 : 3); - printf("%08x: ", line_beg); - for(off = line_beg; off < line_end; off++) { - if(off < size) - printf(" %02x", ((unsigned char*)addr)[off]); - else - printf(" "); - } - - printf(" "); - for(off = line_beg; off < line_end; off++) { - unsigned char byte = ((unsigned char*)addr)[off]; - if(off < size) - printf("%c", (iscntrl(byte) ? '.' : byte)); - else - break; - } - - printf("\n"); - } - - if(truncate > 0) { - test_line_indent__(test_case_name__[0] ? 4 : 3); - printf(" ... (and more %u bytes)\n", (unsigned) truncate); - } -} - -static void -test_list_names__(void) -{ - const struct test__* test; - - printf("Unit tests:\n"); - for(test = &test_list__[0]; test->func != NULL; test++) - printf(" %s\n", test->name); -} - -static void -test_remember__(int i) -{ - if(test_flags__[i]) - return; - else - test_flags__[i] = 1; - - tests__[test_count__] = &test_list__[i]; - test_count__++; -} - -static int -test_name_contains_word__(const char* name, const char* pattern) -{ - static const char word_delim[] = " \t-_."; - const char* substr; - size_t pattern_len; - int starts_on_word_boundary; - int ends_on_word_boundary; - - pattern_len = strlen(pattern); - - substr = strstr(name, pattern); - while(substr != NULL) { - starts_on_word_boundary = (substr == name || strchr(word_delim, substr[-1]) != NULL); - ends_on_word_boundary = (substr[pattern_len] == '\0' || strchr(word_delim, substr[pattern_len]) != NULL); - - if(starts_on_word_boundary && ends_on_word_boundary) - return 1; - - substr = strstr(substr+1, pattern); - } - - return 0; -} - -static int -test_lookup__(const char* pattern) -{ - int i; - int n = 0; - - /* Try exact match. */ - for(i = 0; i < (int) test_list_size__; i++) { - if(strcmp(test_list__[i].name, pattern) == 0) { - test_remember__(i); - n++; - break; - } - } - if(n > 0) - return n; - - /* Try word match. */ - for(i = 0; i < (int) test_list_size__; i++) { - if(test_name_contains_word__(test_list__[i].name, pattern)) { - test_remember__(i); - n++; - } - } - if(n > 0) - return n; - - /* Try relaxed match. */ - for(i = 0; i < (int) test_list_size__; i++) { - if(strstr(test_list__[i].name, pattern) != NULL) { - test_remember__(i); - n++; - } - } - - return n; -} - - -/* Called if anything goes bad in Acutest, or if the unit test ends in other - * way then by normal returning from its function (e.g. exception or some - * abnormal child process termination). */ -static void -test_error__(const char* fmt, ...) -{ - va_list args; - - if(test_verbose_level__ == 0) - return; - - if(test_verbose_level__ <= 2 && !test_current_already_logged__ && test_current_unit__ != NULL) { - if(test_tap__) { - test_finish_test_line__(-1); - } else { - printf("[ "); - test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED"); - printf(" ]\n"); - } - } - - if(test_verbose_level__ >= 2) { - test_line_indent__(1); - if(test_verbose_level__ >= 3) - test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "ERROR: "); - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - printf("\n"); - } - - if(test_verbose_level__ >= 3) { - printf("\n"); - } -} - -/* Call directly the given test unit function. */ -static int -test_do_run__(const struct test__* test, int index) -{ - test_current_unit__ = test; - test_current_index__ = index; - test_current_failures__ = 0; - test_current_already_logged__ = 0; - test_cond_failed__ = 0; - - test_timer_init__(); - - test_begin_test_line__(test); - -#ifdef __cplusplus - try { -#endif - - /* This is good to do for case the test unit e.g. crashes. */ - fflush(stdout); - fflush(stderr); - - test_timer_get_time__(&test_timer_start__); - test->func(); - test_timer_get_time__(&test_timer_end__); - - if(test_verbose_level__ >= 3) { - test_line_indent__(1); - if(test_current_failures__ == 0) { - test_print_in_color__(TEST_COLOR_GREEN_INTENSIVE__, "SUCCESS: "); - printf("All conditions have passed.\n"); - - if(test_timer__) { - test_line_indent__(1); - printf("Duration: "); - test_timer_print_diff__(); - printf("\n"); - } - } else { - test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED: "); - printf("%d condition%s %s failed.\n", - test_current_failures__, - (test_current_failures__ == 1) ? "" : "s", - (test_current_failures__ == 1) ? "has" : "have"); - } - printf("\n"); - } else if(test_verbose_level__ >= 1 && test_current_failures__ == 0) { - test_finish_test_line__(0); - } - - test_case__(NULL); - test_current_unit__ = NULL; - return (test_current_failures__ == 0) ? 0 : -1; - -#ifdef __cplusplus - } catch(std::exception& e) { - const char* what = e.what(); - if(what != NULL) - test_error__("Threw std::exception: %s", what); - else - test_error__("Threw std::exception"); - return -1; - } catch(...) { - test_error__("Threw an exception"); - return -1; - } -#endif -} - -/* Trigger the unit test. If possible (and not suppressed) it starts a child - * process who calls test_do_run__(), otherwise it calls test_do_run__() - * directly. */ -static void -test_run__(const struct test__* test, int index) -{ - int failed = 1; - - test_current_unit__ = test; - test_current_already_logged__ = 0; - - if(!test_no_exec__) { - -#if defined(ACUTEST_UNIX__) - - pid_t pid; - int exit_code; - - /* Make sure the child starts with empty I/O buffers. */ - fflush(stdout); - fflush(stderr); - - pid = fork(); - if(pid == (pid_t)-1) { - test_error__("Cannot fork. %s [%d]", strerror(errno), errno); - failed = 1; - } else if(pid == 0) { - /* Child: Do the test. */ - failed = (test_do_run__(test, index) != 0); - exit(failed ? 1 : 0); - } else { - /* Parent: Wait until child terminates and analyze its exit code. */ - waitpid(pid, &exit_code, 0); - if(WIFEXITED(exit_code)) { - switch(WEXITSTATUS(exit_code)) { - case 0: failed = 0; break; /* test has passed. */ - case 1: /* noop */ break; /* "normal" failure. */ - default: test_error__("Unexpected exit code [%d]", WEXITSTATUS(exit_code)); - } - } else if(WIFSIGNALED(exit_code)) { - char tmp[32]; - const char* signame; - switch(WTERMSIG(exit_code)) { - case SIGINT: signame = "SIGINT"; break; - case SIGHUP: signame = "SIGHUP"; break; - case SIGQUIT: signame = "SIGQUIT"; break; - case SIGABRT: signame = "SIGABRT"; break; - case SIGKILL: signame = "SIGKILL"; break; - case SIGSEGV: signame = "SIGSEGV"; break; - case SIGILL: signame = "SIGILL"; break; - case SIGTERM: signame = "SIGTERM"; break; - default: sprintf(tmp, "signal %d", WTERMSIG(exit_code)); signame = tmp; break; - } - test_error__("Test interrupted by %s", signame); - } else { - test_error__("Test ended in an unexpected way [%d]", exit_code); - } - } - -#elif defined(ACUTEST_WIN__) - - char buffer[512] = {0}; - STARTUPINFOA startupInfo; - PROCESS_INFORMATION processInfo; - DWORD exitCode; - - /* Windows has no fork(). So we propagate all info into the child - * through a command line arguments. */ - _snprintf(buffer, sizeof(buffer)-1, - "%s --worker=%d %s --no-exec --no-summary %s --verbose=%d --color=%s -- \"%s\"", - test_argv0__, index, test_timer__ ? "--timer" : "", - test_tap__ ? "--tap" : "", test_verbose_level__, - test_colorize__ ? "always" : "never", - test->name); - memset(&startupInfo, 0, sizeof(startupInfo)); - startupInfo.cb = sizeof(STARTUPINFO); - if(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo)) { - WaitForSingleObject(processInfo.hProcess, INFINITE); - GetExitCodeProcess(processInfo.hProcess, &exitCode); - CloseHandle(processInfo.hThread); - CloseHandle(processInfo.hProcess); - failed = (exitCode != 0); - } else { - test_error__("Cannot create unit test subprocess [%ld].", GetLastError()); - failed = 1; - } - -#else - - /* A platform where we don't know how to run child process. */ - failed = (test_do_run__(test, index) != 0); - -#endif - - } else { - /* Child processes suppressed through --no-exec. */ - failed = (test_do_run__(test, index) != 0); - } - - test_current_unit__ = NULL; - - test_stat_run_units__++; - if(failed) - test_stat_failed_units__++; -} - -#if defined(ACUTEST_WIN__) -/* Callback for SEH events. */ -static LONG CALLBACK -test_exception_filter__(EXCEPTION_POINTERS *ptrs) -{ - test_error__("Unhandled SEH exception %08lx at %p.", - ptrs->ExceptionRecord->ExceptionCode, - ptrs->ExceptionRecord->ExceptionAddress); - fflush(stdout); - fflush(stderr); - return EXCEPTION_EXECUTE_HANDLER; -} -#endif - - -#define TEST_CMDLINE_OPTFLAG_OPTIONALARG__ 0x0001 -#define TEST_CMDLINE_OPTFLAG_REQUIREDARG__ 0x0002 - -#define TEST_CMDLINE_OPTID_NONE__ 0 -#define TEST_CMDLINE_OPTID_UNKNOWN__ (-0x7fffffff + 0) -#define TEST_CMDLINE_OPTID_MISSINGARG__ (-0x7fffffff + 1) -#define TEST_CMDLINE_OPTID_BOGUSARG__ (-0x7fffffff + 2) - -typedef struct TEST_CMDLINE_OPTION__ { - char shortname; - const char* longname; - int id; - unsigned flags; -} TEST_CMDLINE_OPTION__; - -static int -test_cmdline_handle_short_opt_group__(const TEST_CMDLINE_OPTION__* options, - const char* arggroup, - int (*callback)(int /*optval*/, const char* /*arg*/)) -{ - const TEST_CMDLINE_OPTION__* opt; - int i; - int ret = 0; - - for(i = 0; arggroup[i] != '\0'; i++) { - for(opt = options; opt->id != 0; opt++) { - if(arggroup[i] == opt->shortname) - break; - } - - if(opt->id != 0 && !(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) { - ret = callback(opt->id, NULL); - } else { - /* Unknown option. */ - char badoptname[3]; - badoptname[0] = '-'; - badoptname[1] = arggroup[i]; - badoptname[2] = '\0'; - ret = callback((opt->id != 0 ? TEST_CMDLINE_OPTID_MISSINGARG__ : TEST_CMDLINE_OPTID_UNKNOWN__), - badoptname); - } - - if(ret != 0) - break; - } - - return ret; -} - -#define TEST_CMDLINE_AUXBUF_SIZE__ 32 - -static int -test_cmdline_read__(const TEST_CMDLINE_OPTION__* options, int argc, char** argv, - int (*callback)(int /*optval*/, const char* /*arg*/)) -{ - - const TEST_CMDLINE_OPTION__* opt; - char auxbuf[TEST_CMDLINE_AUXBUF_SIZE__+1]; - int after_doubledash = 0; - int i = 1; - int ret = 0; - - auxbuf[TEST_CMDLINE_AUXBUF_SIZE__] = '\0'; - - while(i < argc) { - if(after_doubledash || strcmp(argv[i], "-") == 0) { - /* Non-option argument. */ - ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); - } else if(strcmp(argv[i], "--") == 0) { - /* End of options. All the remaining members are non-option arguments. */ - after_doubledash = 1; - } else if(argv[i][0] != '-') { - /* Non-option argument. */ - ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); - } else { - for(opt = options; opt->id != 0; opt++) { - if(opt->longname != NULL && strncmp(argv[i], "--", 2) == 0) { - size_t len = strlen(opt->longname); - if(strncmp(argv[i]+2, opt->longname, len) == 0) { - /* Regular long option. */ - if(argv[i][2+len] == '\0') { - /* with no argument provided. */ - if(!(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) - ret = callback(opt->id, NULL); - else - ret = callback(TEST_CMDLINE_OPTID_MISSINGARG__, argv[i]); - break; - } else if(argv[i][2+len] == '=') { - /* with an argument provided. */ - if(opt->flags & (TEST_CMDLINE_OPTFLAG_OPTIONALARG__ | TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) { - ret = callback(opt->id, argv[i]+2+len+1); - } else { - sprintf(auxbuf, "--%s", opt->longname); - ret = callback(TEST_CMDLINE_OPTID_BOGUSARG__, auxbuf); - } - break; - } else { - continue; - } - } - } else if(opt->shortname != '\0' && argv[i][0] == '-') { - if(argv[i][1] == opt->shortname) { - /* Regular short option. */ - if(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__) { - if(argv[i][2] != '\0') - ret = callback(opt->id, argv[i]+2); - else if(i+1 < argc) - ret = callback(opt->id, argv[++i]); - else - ret = callback(TEST_CMDLINE_OPTID_MISSINGARG__, argv[i]); - break; - } else { - ret = callback(opt->id, NULL); - - /* There might be more (argument-less) short options - * grouped together. */ - if(ret == 0 && argv[i][2] != '\0') - ret = test_cmdline_handle_short_opt_group__(options, argv[i]+2, callback); - break; - } - } - } - } - - if(opt->id == 0) { /* still not handled? */ - if(argv[i][0] != '-') { - /* Non-option argument. */ - ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); - } else { - /* Unknown option. */ - char* badoptname = argv[i]; - - if(strncmp(badoptname, "--", 2) == 0) { - /* Strip any argument from the long option. */ - char* assignement = strchr(badoptname, '='); - if(assignement != NULL) { - size_t len = assignement - badoptname; - if(len > TEST_CMDLINE_AUXBUF_SIZE__) - len = TEST_CMDLINE_AUXBUF_SIZE__; - strncpy(auxbuf, badoptname, len); - auxbuf[len] = '\0'; - badoptname = auxbuf; - } - } - - ret = callback(TEST_CMDLINE_OPTID_UNKNOWN__, badoptname); - } - } - } - - if(ret != 0) - return ret; - i++; - } - - return ret; -} - -static void -test_help__(void) -{ - printf("Usage: %s [options] [test...]\n", test_argv0__); - printf("\n"); - printf("Run the specified unit tests; or if the option '--skip' is used, run all\n"); - printf("tests in the suite but those listed. By default, if no tests are specified\n"); - printf("on the command line, all unit tests in the suite are run.\n"); - printf("\n"); - printf("Options:\n"); - printf(" -s, --skip Execute all unit tests but the listed ones\n"); - printf(" --exec[=WHEN] If supported, execute unit tests as child processes\n"); - printf(" (WHEN is one of 'auto', 'always', 'never')\n"); -#if defined ACUTEST_WIN__ - printf(" -t, --timer Measure test duration\n"); -#elif defined ACUTEST_HAS_POSIX_TIMER__ - printf(" -t, --timer Measure test duration (real time)\n"); - printf(" --timer=TIMER Measure test duration, using given timer\n"); - printf(" (TIMER is one of 'real', 'cpu')\n"); -#endif - printf(" -E, --no-exec Same as --exec=never\n"); - printf(" --no-summary Suppress printing of test results summary\n"); - printf(" --tap Produce TAP-compliant output\n"); - printf(" (See https://testanything.org/)\n"); - printf(" -l, --list List unit tests in the suite and exit\n"); - printf(" -v, --verbose Make output more verbose\n"); - printf(" --verbose=LEVEL Set verbose level to LEVEL:\n"); - printf(" 0 ... Be silent\n"); - printf(" 1 ... Output one line per test (and summary)\n"); - printf(" 2 ... As 1 and failed conditions (this is default)\n"); - printf(" 3 ... As 1 and all conditions (and extended summary)\n"); - printf(" --color[=WHEN] Enable colorized output\n"); - printf(" (WHEN is one of 'auto', 'always', 'never')\n"); - printf(" --no-color Same as --color=never\n"); - printf(" -h, --help Display this help and exit\n"); - - if(test_list_size__ < 16) { - printf("\n"); - test_list_names__(); - } -} - -static const TEST_CMDLINE_OPTION__ test_cmdline_options__[] = { - { 's', "skip", 's', 0 }, - { 0, "exec", 'e', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, - { 'E', "no-exec", 'E', 0 }, -#if defined ACUTEST_WIN__ - { 't', "timer", 't', 0 }, -#elif defined ACUTEST_HAS_POSIX_TIMER__ - { 't', "timer", 't', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, -#endif - { 0, "no-summary", 'S', 0 }, - { 0, "tap", 'T', 0 }, - { 'l', "list", 'l', 0 }, - { 'v', "verbose", 'v', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, - { 0, "color", 'c', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, - { 0, "no-color", 'C', 0 }, - { 'h', "help", 'h', 0 }, - { 0, "worker", 'w', TEST_CMDLINE_OPTFLAG_REQUIREDARG__ }, /* internal */ - { 0, NULL, 0, 0 } -}; - -static int -test_cmdline_callback__(int id, const char* arg) -{ - switch(id) { - case 's': - test_skip_mode__ = 1; - break; - - case 'e': - if(arg == NULL || strcmp(arg, "always") == 0) { - test_no_exec__ = 0; - } else if(strcmp(arg, "never") == 0) { - test_no_exec__ = 1; - } else if(strcmp(arg, "auto") == 0) { - /*noop*/ - } else { - fprintf(stderr, "%s: Unrecognized argument '%s' for option --exec.\n", test_argv0__, arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - } - break; - - case 'E': - test_no_exec__ = 1; - break; - - case 't': -#if defined ACUTEST_WIN__ || defined ACUTEST_HAS_POSIX_TIMER__ - if(arg == NULL || strcmp(arg, "real") == 0) { - test_timer__ = 1; - #ifndef ACUTEST_WIN__ - } else if(strcmp(arg, "cpu") == 0) { - test_timer__ = 2; - #endif - } else { - fprintf(stderr, "%s: Unrecognized argument '%s' for option --timer.\n", test_argv0__, arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - } -#endif - break; - - case 'S': - test_no_summary__ = 1; - break; - - case 'T': - test_tap__ = 1; - break; - - case 'l': - test_list_names__(); - exit(0); - - case 'v': - test_verbose_level__ = (arg != NULL ? atoi(arg) : test_verbose_level__+1); - break; - - case 'c': - if(arg == NULL || strcmp(arg, "always") == 0) { - test_colorize__ = 1; - } else if(strcmp(arg, "never") == 0) { - test_colorize__ = 0; - } else if(strcmp(arg, "auto") == 0) { - /*noop*/ - } else { - fprintf(stderr, "%s: Unrecognized argument '%s' for option --color.\n", test_argv0__, arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - } - break; - - case 'C': - test_colorize__ = 0; - break; - - case 'h': - test_help__(); - exit(0); - - case 'w': - test_worker__ = 1; - test_worker_index__ = atoi(arg); - break; - - case 0: - if(test_lookup__(arg) == 0) { - fprintf(stderr, "%s: Unrecognized unit test '%s'\n", test_argv0__, arg); - fprintf(stderr, "Try '%s --list' for list of unit tests.\n", test_argv0__); - exit(2); - } - break; - - case TEST_CMDLINE_OPTID_UNKNOWN__: - fprintf(stderr, "Unrecognized command line option '%s'.\n", arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - - case TEST_CMDLINE_OPTID_MISSINGARG__: - fprintf(stderr, "The command line option '%s' requires an argument.\n", arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - - case TEST_CMDLINE_OPTID_BOGUSARG__: - fprintf(stderr, "The command line option '%s' does not expect an argument.\n", arg); - fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); - exit(2); - } - - return 0; -} - - -#ifdef ACUTEST_LINUX__ -static int -test_is_tracer_present__(void) -{ - char buf[256+32+1]; - int tracer_present = 0; - int fd; - ssize_t n_read; - - fd = open("/proc/self/status", O_RDONLY); - if(fd == -1) - return 0; - - n_read = read(fd, buf, sizeof(buf)-1); - while(n_read > 0) { - static const char pattern[] = "TracerPid:"; - const char* field; - - buf[n_read] = '\0'; - field = strstr(buf, pattern); - if(field != NULL && field < buf + sizeof(buf) - 32) { - pid_t tracer_pid = (pid_t) atoi(field + sizeof(pattern) - 1); - tracer_present = (tracer_pid != 0); - break; - } - - if(n_read == sizeof(buf)-1) { - memmove(buf, buf + sizeof(buf)-1 - 32, 32); - n_read = read(fd, buf+32, sizeof(buf)-1-32); - if(n_read > 0) - n_read += 32; - } - } - - close(fd); - return tracer_present; -} -#endif - -int -main(int argc, char** argv) -{ - int i; - test_argv0__ = argv[0]; - -#if defined ACUTEST_UNIX__ - test_colorize__ = isatty(STDOUT_FILENO); -#elif defined ACUTEST_WIN__ - #if defined __BORLANDC__ - test_colorize__ = isatty(_fileno(stdout)); - #else - test_colorize__ = _isatty(_fileno(stdout)); - #endif -#else - test_colorize__ = 0; -#endif - - /* Count all test units */ - test_list_size__ = 0; - for(i = 0; test_list__[i].func != NULL; i++) - test_list_size__++; - - tests__ = (const struct test__**) malloc(sizeof(const struct test__*) * test_list_size__); - test_flags__ = (char*) malloc(sizeof(char) * test_list_size__); - if(tests__ == NULL || test_flags__ == NULL) { - fprintf(stderr, "Out of memory.\n"); - exit(2); - } - memset((void*) test_flags__, 0, sizeof(char) * test_list_size__); - - /* Parse options */ - test_cmdline_read__(test_cmdline_options__, argc, argv, test_cmdline_callback__); - -#if defined(ACUTEST_WIN__) - SetUnhandledExceptionFilter(test_exception_filter__); -#endif - - /* By default, we want to run all tests. */ - if(test_count__ == 0) { - for(i = 0; test_list__[i].func != NULL; i++) - tests__[i] = &test_list__[i]; - test_count__ = test_list_size__; - } - - /* Guess whether we want to run unit tests as child processes. */ - if(test_no_exec__ < 0) { - test_no_exec__ = 0; - - if(test_count__ <= 1) { - test_no_exec__ = 1; - } else { -#ifdef ACUTEST_WIN__ - if(IsDebuggerPresent()) - test_no_exec__ = 1; -#endif -#ifdef ACUTEST_LINUX__ - if(test_is_tracer_present__()) - test_no_exec__ = 1; -#endif - } - } - - if(test_tap__) { - /* TAP requires we know test result ("ok", "not ok") before we output - * anything about the test, and this gets problematic for larger verbose - * levels. */ - if(test_verbose_level__ > 2) - test_verbose_level__ = 2; - - /* TAP harness should provide some summary. */ - test_no_summary__ = 1; - - if(!test_worker__) - printf("1..%d\n", (int) test_count__); - } - - /* Run the tests */ - if(!test_skip_mode__) { - /* Run the listed tests. */ - for(i = 0; i < (int) test_count__; i++) - test_run__(tests__[i], test_worker_index__ + i); - } else { - /* Run all tests except those listed. */ - int index = test_worker_index__; - for(i = 0; test_list__[i].func != NULL; i++) { - if(!test_flags__[i]) - test_run__(&test_list__[i], index++); - } - } - - /* Write a summary */ - if(!test_no_summary__ && test_verbose_level__ >= 1) { - if(test_verbose_level__ >= 3) { - test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Summary:\n"); - - printf(" Count of all unit tests: %4d\n", (int) test_list_size__); - printf(" Count of run unit tests: %4d\n", test_stat_run_units__); - printf(" Count of failed unit tests: %4d\n", test_stat_failed_units__); - printf(" Count of skipped unit tests: %4d\n", (int) test_list_size__ - test_stat_run_units__); - } - - if(test_stat_failed_units__ == 0) { - test_print_in_color__(TEST_COLOR_GREEN_INTENSIVE__, "SUCCESS:"); - printf(" All unit tests have passed.\n"); - } else { - test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED:"); - printf(" %d of %d unit tests %s failed.\n", - test_stat_failed_units__, test_stat_run_units__, - (test_stat_failed_units__ == 1) ? "has" : "have"); - } - - if(test_verbose_level__ >= 3) - printf("\n"); - } - - free((void*) tests__); - free((void*) test_flags__); - - return (test_stat_failed_units__ == 0) ? 0 : 1; -} - - -#endif /* #ifndef TEST_NO_MAIN */ - -#ifdef __cplusplus - } /* extern "C" */ -#endif - - -#endif /* #ifndef ACUTEST_H__ */ diff --git a/externals/tinyobjloader/tests/assets/issue-244.mtl b/externals/tinyobjloader/tests/assets/issue-244.mtl deleted file mode 100644 index 63c46a4..0000000 --- a/externals/tinyobjloader/tests/assets/issue-244.mtl +++ /dev/null @@ -1,11 +0,0 @@ -newmtl None -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl None1 -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - - diff --git a/externals/tinyobjloader/tests/config-msvc.py b/externals/tinyobjloader/tests/config-msvc.py deleted file mode 100644 index a7771de..0000000 --- a/externals/tinyobjloader/tests/config-msvc.py +++ /dev/null @@ -1,52 +0,0 @@ -exe = "tester.exe" - -toolchain = "msvc" - -# optional -link_pool_depth = 1 - -# optional -builddir = { - "gnu" : "build" - , "msvc" : "build" - , "clang" : "build" - } - -includes = { - "gnu" : [ "-I." ] - , "msvc" : [ "/I." ] - , "clang" : [ "-I." ] - } - -defines = { - "gnu" : [ "-DEXAMPLE=1" ] - , "msvc" : [ "/DEXAMPLE=1" ] - , "clang" : [ "-DEXAMPLE=1" ] - } - -cflags = { - "gnu" : [ "-O2", "-g" ] - , "msvc" : [ "/O2" ] - , "clang" : [ "-O2", "-g" ] - } - -cxxflags = { - "gnu" : [ "-O2", "-g" ] - , "msvc" : [ "/O2", "/W4", "/EHsc"] - , "clang" : [ "-O2", "-g", "-fsanitize=address" ] - } - -ldflags = { - "gnu" : [ ] - , "msvc" : [ ] - , "clang" : [ "-fsanitize=address" ] - } - -# optionsl -cxx_files = [ "tester.cc" ] -c_files = [ ] - -# You can register your own toolchain through register_toolchain function -def register_toolchain(ninja): - pass - diff --git a/externals/tinyobjloader/tests/config-posix.py b/externals/tinyobjloader/tests/config-posix.py deleted file mode 100644 index 29cc4d5..0000000 --- a/externals/tinyobjloader/tests/config-posix.py +++ /dev/null @@ -1,53 +0,0 @@ -exe = "tester" - -# "gnu" or "clang" -toolchain = "gnu" - -# optional -link_pool_depth = 1 - -# optional -builddir = { - "gnu" : "build" - , "msvc" : "build" - , "clang" : "build" - } - -includes = { - "gnu" : [ "-I." ] - , "msvc" : [ "/I." ] - , "clang" : [ "-I." ] - } - -defines = { - "gnu" : [ ] - , "msvc" : [ ] - , "clang" : [ ] - } - -cflags = { - "gnu" : [ "-O2", "-g" ] - , "msvc" : [ "/O2" ] - , "clang" : [ "-O2", "-g" ] - } - -# Warn as much as possible: http://qiita.com/MitsutakaTakeda/items/6b9966f890cc9b944d75 -cxxflags = { - "gnu" : [ "-O2", "-g", "-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused", "-fsanitize=address" ] - , "msvc" : [ "/O2", "/W4" ] - , "clang" : [ "-O2", "-g", "-Werror -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic", "-fsanitize=address" ] - } - -ldflags = { - "gnu" : [ "-fsanitize=address" ] - , "msvc" : [ ] - , "clang" : [ "-fsanitize=address" ] - } - -cxx_files = [ "tester.cc" ] -c_files = [ ] - -# You can register your own toolchain through register_toolchain function -def register_toolchain(ninja): - pass - diff --git a/externals/tinyobjloader/tests/issue-177.mtl b/externals/tinyobjloader/tests/issue-177.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/externals/tinyobjloader/tests/issue-177.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/externals/tinyobjloader/tests/issue-177.obj b/externals/tinyobjloader/tests/issue-177.obj deleted file mode 100644 index 0d0ac68..0000000 --- a/externals/tinyobjloader/tests/issue-177.obj +++ /dev/null @@ -1,31 +0,0 @@ -mtllib issue-177.mtl - -v 0.000000 2.000000 2.000000 -v 0.000000 0.000000 2.000000 -v 2.000000 0.000000 2.000000 -v 2.000000 2.000000 2.000000 -v 0.000000 2.000000 0.000000 -v 0.000000 0.000000 0.000000 -v 2.000000 0.000000 0.000000 -v 2.000000 2.000000 0.000000 -# 8 vertices - -g front cube -usemtl white -f 1 2 3 4 -g back cube -# expects white material -f 8 7 6 5 -g right cube -usemtl red -f 4 3 7 8 -g top cube -usemtl white -f 5 1 4 8 -g left cube -usemtl green -f 5 6 2 1 -g bottom cube -usemtl white -f 2 6 7 3 -# 6 elements diff --git a/externals/tinyobjloader/tests/kuroga.py b/externals/tinyobjloader/tests/kuroga.py deleted file mode 100755 index 32a318f..0000000 --- a/externals/tinyobjloader/tests/kuroga.py +++ /dev/null @@ -1,311 +0,0 @@ -#!/usr/bin/env python - -# -# Kuroga, single python file meta-build system for ninja -# https://github.com/lighttransport/kuroga -# -# Requirements: python 2.6 or 2.7 -# -# Usage: $ python kuroga.py input.py -# - -import imp -import os -import sys -import textwrap - - -# gcc preset -def add_gnu_rule(ninja): - ninja.rule('gnucxx', description='CXX $out', - command='$gnucxx -MMD -MF $out.d $gnudefines $gnuincludes $gnucxxflags -c $in -o $out', - depfile='$out.d', deps='gcc') - ninja.rule('gnucc', description='CC $out', - command='$gnucc -MMD -MF $out.d $gnudefines $gnuincludes $gnucflags -c $in -o $out', - depfile='$out.d', deps='gcc') - ninja.rule('gnulink', description='LINK $out', pool='link_pool', - command='$gnuld -o $out $in $libs $gnuldflags') - ninja.rule('gnuar', description='AR $out', pool='link_pool', - command='$gnuar rsc $out $in') - ninja.rule('gnustamp', description='STAMP $out', command='touch $out') - ninja.newline() - - ninja.variable('gnucxx', 'g++') - ninja.variable('gnucc', 'gcc') - ninja.variable('gnuld', '$gnucxx') - ninja.variable('gnuar', 'ar') - ninja.newline() - -# clang preset -def add_clang_rule(ninja): - ninja.rule('clangcxx', description='CXX $out', - command='$clangcxx -MMD -MF $out.d $clangdefines $clangincludes $clangcxxflags -c $in -o $out', - depfile='$out.d', deps='gcc') - ninja.rule('clangcc', description='CC $out', - command='$clangcc -MMD -MF $out.d $clangdefines $clangincludes $clangcflags -c $in -o $out', - depfile='$out.d', deps='gcc') - ninja.rule('clanglink', description='LINK $out', pool='link_pool', - command='$clangld -o $out $in $libs $clangldflags') - ninja.rule('clangar', description='AR $out', pool='link_pool', - command='$clangar rsc $out $in') - ninja.rule('clangstamp', description='STAMP $out', command='touch $out') - ninja.newline() - - ninja.variable('clangcxx', 'clang++') - ninja.variable('clangcc', 'clang') - ninja.variable('clangld', '$clangcxx') - ninja.variable('clangar', 'ar') - ninja.newline() - -# msvc preset -def add_msvc_rule(ninja): - ninja.rule('msvccxx', description='CXX $out', - command='$msvccxx /TP /showIncludes $msvcdefines $msvcincludes $msvccxxflags -c $in /Fo$out', - depfile='$out.d', deps='msvc') - ninja.rule('msvccc', description='CC $out', - command='$msvccc /TC /showIncludes $msvcdefines $msvcincludes $msvccflags -c $in /Fo$out', - depfile='$out.d', deps='msvc') - ninja.rule('msvclink', description='LINK $out', pool='link_pool', - command='$msvcld $msvcldflags $in $libs /OUT:$out') - ninja.rule('msvcar', description='AR $out', pool='link_pool', - command='$msvcar $in /OUT:$out') - #ninja.rule('msvcstamp', description='STAMP $out', command='touch $out') - ninja.newline() - - ninja.variable('msvccxx', 'cl.exe') - ninja.variable('msvccc', 'cl.exe') - ninja.variable('msvcld', 'link.exe') - ninja.variable('msvcar', 'lib.exe') - ninja.newline() - -# -- from ninja_syntax.py -- -def escape_path(word): - return word.replace('$ ', '$$ ').replace(' ', '$ ').replace(':', '$:') - -class Writer(object): - def __init__(self, output, width=78): - self.output = output - self.width = width - - def newline(self): - self.output.write('\n') - - def comment(self, text, has_path=False): - for line in textwrap.wrap(text, self.width - 2, break_long_words=False, - break_on_hyphens=False): - self.output.write('# ' + line + '\n') - - def variable(self, key, value, indent=0): - if value is None: - return - if isinstance(value, list): - value = ' '.join(filter(None, value)) # Filter out empty strings. - self._line('%s = %s' % (key, value), indent) - - def pool(self, name, depth): - self._line('pool %s' % name) - self.variable('depth', depth, indent=1) - - def rule(self, name, command, description=None, depfile=None, - generator=False, pool=None, restat=False, rspfile=None, - rspfile_content=None, deps=None): - self._line('rule %s' % name) - self.variable('command', command, indent=1) - if description: - self.variable('description', description, indent=1) - if depfile: - self.variable('depfile', depfile, indent=1) - if generator: - self.variable('generator', '1', indent=1) - if pool: - self.variable('pool', pool, indent=1) - if restat: - self.variable('restat', '1', indent=1) - if rspfile: - self.variable('rspfile', rspfile, indent=1) - if rspfile_content: - self.variable('rspfile_content', rspfile_content, indent=1) - if deps: - self.variable('deps', deps, indent=1) - - def build(self, outputs, rule, inputs=None, implicit=None, order_only=None, - variables=None): - outputs = as_list(outputs) - out_outputs = [escape_path(x) for x in outputs] - all_inputs = [escape_path(x) for x in as_list(inputs)] - - if implicit: - implicit = [escape_path(x) for x in as_list(implicit)] - all_inputs.append('|') - all_inputs.extend(implicit) - if order_only: - order_only = [escape_path(x) for x in as_list(order_only)] - all_inputs.append('||') - all_inputs.extend(order_only) - - self._line('build %s: %s' % (' '.join(out_outputs), - ' '.join([rule] + all_inputs))) - - if variables: - if isinstance(variables, dict): - iterator = iter(variables.items()) - else: - iterator = iter(variables) - - for key, val in iterator: - self.variable(key, val, indent=1) - - return outputs - - def include(self, path): - self._line('include %s' % path) - - def subninja(self, path): - self._line('subninja %s' % path) - - def default(self, paths): - self._line('default %s' % ' '.join(as_list(paths))) - - def _count_dollars_before_index(self, s, i): - """Returns the number of '$' characters right in front of s[i].""" - dollar_count = 0 - dollar_index = i - 1 - while dollar_index > 0 and s[dollar_index] == '$': - dollar_count += 1 - dollar_index -= 1 - return dollar_count - - def _line(self, text, indent=0): - """Write 'text' word-wrapped at self.width characters.""" - leading_space = ' ' * indent - while len(leading_space) + len(text) > self.width: - # The text is too wide; wrap if possible. - - # Find the rightmost space that would obey our width constraint and - # that's not an escaped space. - available_space = self.width - len(leading_space) - len(' $') - space = available_space - while True: - space = text.rfind(' ', 0, space) - if (space < 0 or - self._count_dollars_before_index(text, space) % 2 == 0): - break - - if space < 0: - # No such space; just use the first unescaped space we can find. - space = available_space - 1 - while True: - space = text.find(' ', space + 1) - if (space < 0 or - self._count_dollars_before_index(text, space) % 2 == 0): - break - if space < 0: - # Give up on breaking. - break - - self.output.write(leading_space + text[0:space] + ' $\n') - text = text[space+1:] - - # Subsequent lines are continuations, so indent them. - leading_space = ' ' * (indent+2) - - self.output.write(leading_space + text + '\n') - - def close(self): - self.output.close() - - -def as_list(input): - if input is None: - return [] - if isinstance(input, list): - return input - return [input] - -# -- end from ninja_syntax.py -- - -def gen(ninja, toolchain, config): - - ninja.variable('ninja_required_version', '1.4') - ninja.newline() - - if hasattr(config, "builddir"): - builddir = config.builddir[toolchain] - ninja.variable(toolchain + 'builddir', builddir) - else: - builddir = '' - - ninja.variable(toolchain + 'defines', config.defines[toolchain] or []) - ninja.variable(toolchain + 'includes', config.includes[toolchain] or []) - ninja.variable(toolchain + 'cflags', config.cflags[toolchain] or []) - ninja.variable(toolchain + 'cxxflags', config.cxxflags[toolchain] or []) - ninja.variable(toolchain + 'ldflags', config.ldflags[toolchain] or []) - ninja.newline() - - if hasattr(config, "link_pool_depth"): - ninja.pool('link_pool', depth=config.link_pool_depth) - else: - ninja.pool('link_pool', depth=4) - ninja.newline() - - # Add default toolchain(gnu, clang and msvc) - add_gnu_rule(ninja) - add_clang_rule(ninja) - add_msvc_rule(ninja) - - obj_files = [] - - cc = toolchain + 'cc' - cxx = toolchain + 'cxx' - link = toolchain + 'link' - ar = toolchain + 'ar' - - if hasattr(config, "cxx_files"): - for src in config.cxx_files: - srcfile = src - obj = os.path.splitext(srcfile)[0] + '.o' - obj = os.path.join(builddir, obj); - obj_files.append(obj) - ninja.build(obj, cxx, srcfile) - ninja.newline() - - if hasattr(config, "c_files"): - for src in config.c_files: - srcfile = src - obj = os.path.splitext(srcfile)[0] + '.o' - obj = os.path.join(builddir, obj); - obj_files.append(obj) - ninja.build(obj, cc, srcfile) - ninja.newline() - - targetlist = [] - if hasattr(config, "exe"): - ninja.build(config.exe, link, obj_files) - targetlist.append(config.exe) - - if hasattr(config, "staticlib"): - ninja.build(config.staticlib, ar, obj_files) - targetlist.append(config.staticlib) - - ninja.build('all', 'phony', targetlist) - ninja.newline() - - ninja.default('all') - -def main(): - if len(sys.argv) < 2: - print("Usage: python kuroga.py config.py") - sys.exit(1) - - config = imp.load_source("config", sys.argv[1]) - - f = open('build.ninja', 'w') - ninja = Writer(f) - - if hasattr(config, "register_toolchain"): - config.register_toolchain(ninja) - - gen(ninja, config.toolchain, config) - f.close() - -main() diff --git a/externals/tinyobjloader/tests/tester.cc b/externals/tinyobjloader/tests/tester.cc deleted file mode 100644 index ebb5290..0000000 --- a/externals/tinyobjloader/tests/tester.cc +++ /dev/null @@ -1,1470 +0,0 @@ -#define TINYOBJLOADER_IMPLEMENTATION -#include "../tiny_obj_loader.h" - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Weverything" -#elif defined(__GNUC__) -#pragma GCC diagnostic ignored "-Wmissing-declarations" -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-qual" -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wformat" -#pragma GCC diagnostic ignored "-Wswitch-default" -#endif - - -#include "acutest.h" - -#if defined(__clang__) -#pragma clang diagnostic pop -#elif defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#include -#include -#include -#include -#include -#include - -template -static bool FloatEquals(const T& a, const T& b) { - // Edit eps value as you wish. - const T eps = std::numeric_limits::epsilon() * static_cast(100); - - const T abs_diff = std::abs(a - b); - - if (abs_diff < eps) { - return true; - } else { - return false; - } -} - -static void PrintInfo(const tinyobj::attrib_t& attrib, - const std::vector& shapes, - const std::vector& materials, - bool triangulate = true) { - std::cout << "# of vertices : " << (attrib.vertices.size() / 3) << std::endl; - std::cout << "# of normals : " << (attrib.normals.size() / 3) << std::endl; - std::cout << "# of texcoords : " << (attrib.texcoords.size() / 2) - << std::endl; - - std::cout << "# of shapes : " << shapes.size() << std::endl; - std::cout << "# of materials : " << materials.size() << std::endl; - - for (size_t v = 0; v < attrib.vertices.size() / 3; v++) { - printf(" v[%ld] = (%f, %f, %f)\n", v, - static_cast(attrib.vertices[3 * v + 0]), - static_cast(attrib.vertices[3 * v + 1]), - static_cast(attrib.vertices[3 * v + 2])); - } - - for (size_t v = 0; v < attrib.normals.size() / 3; v++) { - printf(" n[%ld] = (%f, %f, %f)\n", v, - static_cast(attrib.normals[3 * v + 0]), - static_cast(attrib.normals[3 * v + 1]), - static_cast(attrib.normals[3 * v + 2])); - } - - for (size_t v = 0; v < attrib.texcoords.size() / 2; v++) { - printf(" uv[%ld] = (%f, %f)\n", v, - static_cast(attrib.texcoords[2 * v + 0]), - static_cast(attrib.texcoords[2 * v + 1])); - } - - for (size_t i = 0; i < shapes.size(); i++) { - printf("shape[%ld].name = %s\n", i, shapes[i].name.c_str()); - printf("Size of shape[%ld].indices: %ld\n", i, - shapes[i].mesh.indices.size()); - - if (triangulate) { - printf("Size of shape[%ld].material_ids: %ld\n", i, - shapes[i].mesh.material_ids.size()); - assert((shapes[i].mesh.indices.size() % 3) == 0); - for (size_t f = 0; f < shapes[i].mesh.indices.size() / 3; f++) { - tinyobj::index_t i0 = shapes[i].mesh.indices[3 * f + 0]; - tinyobj::index_t i1 = shapes[i].mesh.indices[3 * f + 1]; - tinyobj::index_t i2 = shapes[i].mesh.indices[3 * f + 2]; - printf(" idx[%ld] = %d/%d/%d, %d/%d/%d, %d/%d/%d. mat_id = %d\n", f, - i0.vertex_index, i0.normal_index, i0.texcoord_index, - i1.vertex_index, i1.normal_index, i1.texcoord_index, - i2.vertex_index, i2.normal_index, i2.texcoord_index, - shapes[i].mesh.material_ids[f]); - } - } else { - for (size_t f = 0; f < shapes[i].mesh.indices.size(); f++) { - tinyobj::index_t idx = shapes[i].mesh.indices[f]; - printf(" idx[%ld] = %d/%d/%d\n", f, idx.vertex_index, idx.normal_index, - idx.texcoord_index); - } - - printf("Size of shape[%ld].material_ids: %ld\n", i, - shapes[i].mesh.material_ids.size()); - assert(shapes[i].mesh.material_ids.size() == - shapes[i].mesh.num_face_vertices.size()); - for (size_t m = 0; m < shapes[i].mesh.material_ids.size(); m++) { - printf(" material_id[%ld] = %d\n", m, shapes[i].mesh.material_ids[m]); - } - } - - printf("shape[%ld].num_faces: %ld\n", i, - shapes[i].mesh.num_face_vertices.size()); - for (size_t v = 0; v < shapes[i].mesh.num_face_vertices.size(); v++) { - printf(" num_vertices[%ld] = %ld\n", v, - static_cast(shapes[i].mesh.num_face_vertices[v])); - } - - // printf("shape[%ld].vertices: %ld\n", i, shapes[i].mesh.positions.size()); - // assert((shapes[i].mesh.positions.size() % 3) == 0); - // for (size_t v = 0; v < shapes[i].mesh.positions.size() / 3; v++) { - // printf(" v[%ld] = (%f, %f, %f)\n", v, - // static_cast(shapes[i].mesh.positions[3*v+0]), - // static_cast(shapes[i].mesh.positions[3*v+1]), - // static_cast(shapes[i].mesh.positions[3*v+2])); - //} - - printf("shape[%ld].num_tags: %ld\n", i, shapes[i].mesh.tags.size()); - for (size_t t = 0; t < shapes[i].mesh.tags.size(); t++) { - printf(" tag[%ld] = %s ", t, shapes[i].mesh.tags[t].name.c_str()); - printf(" ints: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].intValues.size(); ++j) { - printf("%ld", static_cast(shapes[i].mesh.tags[t].intValues[j])); - if (j < (shapes[i].mesh.tags[t].intValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - - printf(" floats: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].floatValues.size(); ++j) { - printf("%f", static_cast( - shapes[i].mesh.tags[t].floatValues[j])); - if (j < (shapes[i].mesh.tags[t].floatValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - - printf(" strings: ["); - for (size_t j = 0; j < shapes[i].mesh.tags[t].stringValues.size(); ++j) { - printf("%s", shapes[i].mesh.tags[t].stringValues[j].c_str()); - if (j < (shapes[i].mesh.tags[t].stringValues.size() - 1)) { - printf(", "); - } - } - printf("]"); - printf("\n"); - } - } - - for (size_t i = 0; i < materials.size(); i++) { - printf("material[%ld].name = %s\n", i, materials[i].name.c_str()); - printf(" material.Ka = (%f, %f ,%f)\n", - static_cast(materials[i].ambient[0]), - static_cast(materials[i].ambient[1]), - static_cast(materials[i].ambient[2])); - printf(" material.Kd = (%f, %f ,%f)\n", - static_cast(materials[i].diffuse[0]), - static_cast(materials[i].diffuse[1]), - static_cast(materials[i].diffuse[2])); - printf(" material.Ks = (%f, %f ,%f)\n", - static_cast(materials[i].specular[0]), - static_cast(materials[i].specular[1]), - static_cast(materials[i].specular[2])); - printf(" material.Tr = (%f, %f ,%f)\n", - static_cast(materials[i].transmittance[0]), - static_cast(materials[i].transmittance[1]), - static_cast(materials[i].transmittance[2])); - printf(" material.Ke = (%f, %f ,%f)\n", - static_cast(materials[i].emission[0]), - static_cast(materials[i].emission[1]), - static_cast(materials[i].emission[2])); - printf(" material.Ns = %f\n", - static_cast(materials[i].shininess)); - printf(" material.Ni = %f\n", static_cast(materials[i].ior)); - printf(" material.dissolve = %f\n", - static_cast(materials[i].dissolve)); - printf(" material.illum = %d\n", materials[i].illum); - printf(" material.map_Ka = %s\n", materials[i].ambient_texname.c_str()); - printf(" material.map_Kd = %s\n", materials[i].diffuse_texname.c_str()); - printf(" material.map_Ks = %s\n", materials[i].specular_texname.c_str()); - printf(" material.map_Ns = %s\n", - materials[i].specular_highlight_texname.c_str()); - printf(" material.map_bump = %s\n", materials[i].bump_texname.c_str()); - printf(" material.map_d = %s\n", materials[i].alpha_texname.c_str()); - printf(" material.disp = %s\n", materials[i].displacement_texname.c_str()); - printf(" material.refl = %s\n", materials[i].reflection_texname.c_str()); - std::map::const_iterator it( - materials[i].unknown_parameter.begin()); - std::map::const_iterator itEnd( - materials[i].unknown_parameter.end()); - - for (; it != itEnd; it++) { - printf(" material.%s = %s\n", it->first.c_str(), it->second.c_str()); - } - printf("\n"); - } -} - -static bool TestLoadObj(const char* filename, const char* basepath = NULL, - bool triangulate = true) { - std::cout << "Loading " << filename << std::endl; - - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - filename, basepath, triangulate); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - if (!ret) { - printf("Failed to load/parse .obj.\n"); - return false; - } - - PrintInfo(attrib, shapes, materials, triangulate); - - return true; -} - -static bool TestLoadObjFromPreopenedFile(const char* filename, - const char* basepath = NULL, - bool readMaterials = true, - bool triangulate = true) { - std::string fullFilename = std::string(basepath) + filename; - std::cout << "Loading " << fullFilename << std::endl; - - std::ifstream fileStream(fullFilename.c_str()); - - if (!fileStream) { - std::cerr << "Could not find specified file: " << fullFilename << std::endl; - return false; - } - - tinyobj::MaterialStreamReader materialStreamReader(fileStream); - tinyobj::MaterialStreamReader* materialReader = - readMaterials ? &materialStreamReader : NULL; - - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - &fileStream, materialReader); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - if (!ret) { - printf("Failed to load/parse .obj.\n"); - return false; - } - - std::cout << "Loaded material count: " << materials.size() << "\n"; - - return true; -} - -static bool TestStreamLoadObj() { - std::cout << "Stream Loading " << std::endl; - - std::stringstream objStream; - objStream << "mtllib cube.mtl\n" - "\n" - "v 0.000000 2.000000 2.000000\n" - "v 0.000000 0.000000 2.000000\n" - "v 2.000000 0.000000 2.000000\n" - "v 2.000000 2.000000 2.000000\n" - "v 0.000000 2.000000 0.000000\n" - "v 0.000000 0.000000 0.000000\n" - "v 2.000000 0.000000 0.000000\n" - "v 2.000000 2.000000 0.000000\n" - "# 8 vertices\n" - "\n" - "g front cube\n" - "usemtl white\n" - "f 1 2 3 4\n" - "g back cube\n" - "# expects white material\n" - "f 8 7 6 5\n" - "g right cube\n" - "usemtl red\n" - "f 4 3 7 8\n" - "g top cube\n" - "usemtl white\n" - "f 5 1 4 8\n" - "g left cube\n" - "usemtl green\n" - "f 5 6 2 1\n" - "g bottom cube\n" - "usemtl white\n" - "f 2 6 7 3\n" - "# 6 elements"; - - std::string matStream( - "newmtl white\n" - "Ka 0 0 0\n" - "Kd 1 1 1\n" - "Ks 0 0 0\n" - "\n" - "newmtl red\n" - "Ka 0 0 0\n" - "Kd 1 0 0\n" - "Ks 0 0 0\n" - "\n" - "newmtl green\n" - "Ka 0 0 0\n" - "Kd 0 1 0\n" - "Ks 0 0 0\n" - "\n" - "newmtl blue\n" - "Ka 0 0 0\n" - "Kd 0 0 1\n" - "Ks 0 0 0\n" - "\n" - "newmtl light\n" - "Ka 20 20 20\n" - "Kd 1 1 1\n" - "Ks 0 0 0"); - - using namespace tinyobj; - class MaterialStringStreamReader : public MaterialReader { - public: - MaterialStringStreamReader(const std::string& matSStream) - : m_matSStream(matSStream) {} - virtual ~MaterialStringStreamReader() {} - virtual bool operator()(const std::string& matId, - std::vector* materials, - std::map* matMap, - std::string* warn, std::string* err) { - (void)matId; - (void)warn; - (void)err; - std::string warning; - std::string error_msg; - LoadMtl(matMap, materials, &m_matSStream, &warning, &error_msg); - return true; - } - - private: - std::stringstream m_matSStream; - }; - - MaterialStringStreamReader matSSReader(matStream); - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - &objStream, &matSSReader); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - if (!ret) { - return false; - } - - PrintInfo(attrib, shapes, materials); - - return true; -} - -const char* gMtlBasePath = "../models/"; - -void test_cornell_box() { - TEST_CHECK(true == TestLoadObj("../models/cornell_box.obj", gMtlBasePath)); -} - -void test_catmark_torus_creases0() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/catmark_torus_creases0.obj", - gMtlBasePath, /*triangulate*/ false); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(8 == shapes[0].mesh.tags.size()); -} - -void test_pbr() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/pbr-mat-ext.obj", gMtlBasePath, - /*triangulate*/ false); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.2f, materials[0].roughness)); - TEST_CHECK(FloatEquals(0.3f, materials[0].metallic)); - TEST_CHECK(FloatEquals(0.4f, materials[0].sheen)); - TEST_CHECK(FloatEquals(0.5f, materials[0].clearcoat_thickness)); - TEST_CHECK(FloatEquals(0.6f, materials[0].clearcoat_roughness)); - TEST_CHECK(FloatEquals(0.7f, materials[0].anisotropy)); - TEST_CHECK(FloatEquals(0.8f, materials[0].anisotropy_rotation)); - TEST_CHECK(0 == materials[0].roughness_texname.compare("roughness.tex")); - TEST_CHECK(0 == materials[0].metallic_texname.compare("metallic.tex")); - TEST_CHECK(0 == materials[0].sheen_texname.compare("sheen.tex")); - TEST_CHECK(0 == materials[0].emissive_texname.compare("emissive.tex")); - TEST_CHECK(0 == materials[0].normal_texname.compare("normalmap.tex")); -} - -void test_stream_load() { TEST_CHECK(true == TestStreamLoadObj()); } - -void test_stream_load_from_file_skipping_materials() { - TEST_CHECK(true == TestLoadObjFromPreopenedFile( - "../models/pbr-mat-ext.obj", gMtlBasePath, - /*readMaterials*/ false, /*triangulate*/ false)); -} - -void test_stream_load_from_file_with_materials() { - TEST_CHECK(true == TestLoadObjFromPreopenedFile( - "../models/pbr-mat-ext.obj", gMtlBasePath, - /*readMaterials*/ true, /*triangulate*/ false)); -} - -void test_trailing_whitespace_in_mtl_issue92() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-92.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(0 == materials[0].diffuse_texname.compare("tmp.png")); -} - -void test_transmittance_filter_issue95() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-95.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.1f, materials[0].transmittance[0])); - TEST_CHECK(FloatEquals(0.2f, materials[0].transmittance[1])); - TEST_CHECK(FloatEquals(0.3f, materials[0].transmittance[2])); -} - -void test_transmittance_filter_Tf_issue95() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-95-2.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.1f, materials[0].transmittance[0])); - TEST_CHECK(FloatEquals(0.2f, materials[0].transmittance[1])); - TEST_CHECK(FloatEquals(0.3f, materials[0].transmittance[2])); -} - -void test_transmittance_filter_Kt_issue95() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-95.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.1f, materials[0].transmittance[0])); - TEST_CHECK(FloatEquals(0.2f, materials[0].transmittance[1])); - TEST_CHECK(FloatEquals(0.3f, materials[0].transmittance[2])); -} - -void test_usemtl_at_last_line_issue104() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/usemtl-issue-104.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); -} - -void test_texture_opts_issue85() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/texture-options-issue-85.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(3 == materials.size()); - TEST_CHECK(0 == materials[0].name.compare("default")); - TEST_CHECK(0 == materials[1].name.compare("bm2")); - TEST_CHECK(0 == materials[2].name.compare("bm3")); - TEST_CHECK(true == materials[0].ambient_texopt.clamp); - TEST_CHECK(FloatEquals(0.1f, materials[0].diffuse_texopt.origin_offset[0])); - TEST_CHECK(FloatEquals(0.0f, materials[0].diffuse_texopt.origin_offset[1])); - TEST_CHECK(FloatEquals(0.0f, materials[0].diffuse_texopt.origin_offset[2])); - TEST_CHECK(FloatEquals(0.1f, materials[0].specular_texopt.scale[0])); - TEST_CHECK(FloatEquals(0.2f, materials[0].specular_texopt.scale[1])); - TEST_CHECK(FloatEquals(1.0f, materials[0].specular_texopt.scale[2])); - TEST_CHECK( - FloatEquals(0.1f, materials[0].specular_highlight_texopt.turbulence[0])); - TEST_CHECK( - FloatEquals(0.2f, materials[0].specular_highlight_texopt.turbulence[1])); - TEST_CHECK( - FloatEquals(0.3f, materials[0].specular_highlight_texopt.turbulence[2])); - TEST_CHECK(FloatEquals(3.0f, materials[0].bump_texopt.bump_multiplier)); - - TEST_CHECK( - FloatEquals(0.1f, materials[1].specular_highlight_texopt.brightness)); - TEST_CHECK( - FloatEquals(0.3f, materials[1].specular_highlight_texopt.contrast)); - TEST_CHECK('r' == materials[1].bump_texopt.imfchan); - - TEST_CHECK(tinyobj::TEXTURE_TYPE_SPHERE == materials[2].diffuse_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_TOP == - materials[2].specular_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_BOTTOM == - materials[2].specular_highlight_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_LEFT == - materials[2].ambient_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_RIGHT == - materials[2].alpha_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_FRONT == materials[2].bump_texopt.type); - TEST_CHECK(tinyobj::TEXTURE_TYPE_CUBE_BACK == - materials[2].displacement_texopt.type); -} - -void test_mtllib_multiple_filenames_issue112() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/mtllib-multiple-files-issue-112.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); -} - -void test_tr_and_d_issue43() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/tr-and-d-issue-43.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(2 == materials.size()); - - TEST_CHECK(FloatEquals(0.75f, materials[0].dissolve)); - TEST_CHECK(FloatEquals(0.75f, materials[1].dissolve)); -} - -void test_refl() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/refl.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - PrintInfo(attrib, shapes, materials); - - TEST_CHECK(true == ret); - TEST_CHECK(5 == materials.size()); - - TEST_CHECK(materials[0].reflection_texname.compare("reflection.tga") == 0); -} - -void test_map_Bump() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/map-bump.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - PrintInfo(attrib, shapes, materials); - - TEST_CHECK(true == ret); - TEST_CHECK(2 == materials.size()); - - TEST_CHECK(materials[0].bump_texname.compare("bump.jpg") == 0); -} - -void test_g_ignored_issue138() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-138.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - PrintInfo(attrib, shapes, materials); - - TEST_CHECK(true == ret); - TEST_CHECK(2 == shapes.size()); - TEST_CHECK(2 == materials.size()); -} - -void test_vertex_col_ext_issue144() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/cube-vertexcol.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - // PrintInfo(attrib, shapes, materials); - - TEST_CHECK(true == ret); - TEST_CHECK((8 * 3) == attrib.colors.size()); - - TEST_CHECK(FloatEquals(0.0f, attrib.colors[3 * 0 + 0])); - TEST_CHECK(FloatEquals(0.0f, attrib.colors[3 * 0 + 1])); - TEST_CHECK(FloatEquals(0.0f, attrib.colors[3 * 0 + 2])); - - TEST_CHECK(FloatEquals(0.0f, attrib.colors[3 * 1 + 0])); - TEST_CHECK(FloatEquals(0.0f, attrib.colors[3 * 1 + 1])); - TEST_CHECK(FloatEquals(1.0f, attrib.colors[3 * 1 + 2])); - - TEST_CHECK(FloatEquals(1.0f, attrib.colors[3 * 4 + 0])); - - TEST_CHECK(FloatEquals(1.0f, attrib.colors[3 * 7 + 0])); - TEST_CHECK(FloatEquals(1.0f, attrib.colors[3 * 7 + 1])); - TEST_CHECK(FloatEquals(1.0f, attrib.colors[3 * 7 + 2])); -} - -void test_norm_texopts() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/norm-texopt.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(3.0f, materials[0].normal_texopt.bump_multiplier)); -} - -void test_zero_face_idx_value_issue140() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-140-zero-face-idx.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(false == ret); - TEST_CHECK(!err.empty()); -} - -void test_texture_name_whitespace_issue145() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/texture-filename-with-whitespace.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(err.empty()); - TEST_CHECK(2 < materials.size()); - - TEST_CHECK(0 == materials[0].diffuse_texname.compare("texture 01.png")); - TEST_CHECK(0 == materials[1].bump_texname.compare("bump 01.png")); - TEST_CHECK(FloatEquals(2.0f, materials[1].bump_texopt.bump_multiplier)); -} - -void test_smoothing_group_issue162() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/issue-162-smoothing-group.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(2 == shapes.size()); - - TEST_CHECK(2 == shapes[0].mesh.smoothing_group_ids.size()); - TEST_CHECK(1 == shapes[0].mesh.smoothing_group_ids[0]); - TEST_CHECK(1 == shapes[0].mesh.smoothing_group_ids[1]); - - TEST_CHECK(10 == shapes[1].mesh.smoothing_group_ids.size()); - TEST_CHECK(0 == shapes[1].mesh.smoothing_group_ids[0]); - TEST_CHECK(0 == shapes[1].mesh.smoothing_group_ids[1]); - TEST_CHECK(3 == shapes[1].mesh.smoothing_group_ids[2]); - TEST_CHECK(3 == shapes[1].mesh.smoothing_group_ids[3]); - TEST_CHECK(4 == shapes[1].mesh.smoothing_group_ids[4]); - TEST_CHECK(4 == shapes[1].mesh.smoothing_group_ids[5]); - TEST_CHECK(0 == shapes[1].mesh.smoothing_group_ids[6]); - TEST_CHECK(0 == shapes[1].mesh.smoothing_group_ids[7]); - TEST_CHECK(6 == shapes[1].mesh.smoothing_group_ids[8]); - TEST_CHECK(6 == shapes[1].mesh.smoothing_group_ids[9]); -} - -void test_invalid_face_definition() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/invalid-face-definition.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(0 == shapes[0].mesh.indices.size()); -} - -void test_Empty_mtl_basedir_issue177() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - - // A case where the user explicitly provides an empty string - // Win32 specific? - const char* userBaseDir = ""; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "issue-177.obj", userBaseDir); - - // if mtl loading fails, we get an warning message here - ret &= warn.empty(); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); -} - -void test_line_primitive() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/line-prim.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(8 == shapes[0].lines.indices.size()); - TEST_CHECK(2 == shapes[0].lines.num_line_vertices.size()); -} - -void test_points_primitive() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/points-prim.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(8 == shapes[0].points.indices.size()); -} - -void test_multiple_group_names() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/cube.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(6 == shapes.size()); - TEST_CHECK(0 == shapes[0].name.compare("front cube")); - TEST_CHECK(0 == shapes[1].name.compare("back cube")); // multiple whitespaces - // are aggregated as - // single white space. -} - -void test_initialize_all_texopts() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/cornell_box.obj", gMtlBasePath, false); - - TEST_CHECK(ret == true); - TEST_CHECK(0 < materials.size()); - -#define TEST_CHECK_DEFAULT_TEXOPT(texopt) \ - TEST_CHECK(tinyobj::TEXTURE_TYPE_NONE == texopt.type); \ - TEST_CHECK(0.0 == texopt.brightness); \ - TEST_CHECK(1.0 == texopt.contrast); \ - TEST_CHECK(false == texopt.clamp); \ - TEST_CHECK(true == texopt.blendu); \ - TEST_CHECK(true == texopt.blendv); \ - TEST_CHECK(1.0 == texopt.bump_multiplier); \ - for (int j = 0; j < 3; j++) { \ - TEST_CHECK(0.0 == texopt.origin_offset[j]); \ - TEST_CHECK(1.0 == texopt.scale[j]); \ - TEST_CHECK(0.0 == texopt.turbulence[j]); \ - } - for (size_t i = 0; i < materials.size(); i++) { - TEST_CHECK_DEFAULT_TEXOPT(materials[i].ambient_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].diffuse_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].specular_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].specular_highlight_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].bump_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].displacement_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].alpha_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].reflection_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].roughness_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].metallic_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].sheen_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].emissive_texopt); - TEST_CHECK_DEFAULT_TEXOPT(materials[i].normal_texopt); - } -#undef TEST_CHECK_DEFAULT_TEXOPT -} - -void test_colorspace_issue184() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/colorspace-issue-184.obj", gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(0 == materials[0].diffuse_texopt.colorspace.compare("sRGB")); - TEST_CHECK(0 == materials[0].specular_texopt.colorspace.size()); - TEST_CHECK(0 == materials[0].bump_texopt.colorspace.compare("linear")); -} - -void test_leading_decimal_dots_issue201() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/leading-decimal-dot-issue-201.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.8e-1f, attrib.vertices[0])); - TEST_CHECK(FloatEquals(-.7e+2f, attrib.vertices[1])); - TEST_CHECK(FloatEquals(.575869f, attrib.vertices[3])); - TEST_CHECK(FloatEquals(-.666304f, attrib.vertices[4])); - TEST_CHECK(FloatEquals(.940448f, attrib.vertices[6])); -} - -void test_mtl_default_search_path_v2_API_issue208() { - tinyobj::ObjReader reader; - - bool ret = reader.ParseFromFile("../models/cornell_box.obj"); - - std::cout << "WARN: " << reader.Warning() << "\n"; - - TEST_CHECK(ret == true); - TEST_CHECK(reader.Warning().empty()); -} - -void test_leading_zero_in_exponent_notation_issue210() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/leading-zero-in-exponent-notation-issue-210.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(FloatEquals(0.8e-001f, attrib.vertices[0])); - TEST_CHECK(FloatEquals(-.7e+02f, attrib.vertices[1])); - - std::cout << "exp " << 0.8e-01 << std::endl; - std::cout << "bora " << attrib.vertices[0] << std::endl; -} - -void test_usemtl_then_o_issue235() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/issue-235-usemtl-then-o.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(2 == shapes.size()); - TEST_CHECK(2 == materials.size()); - TEST_CHECK(4 == shapes[1].mesh.indices[0].vertex_index); -} - -void test_mtl_searchpaths_issue244() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - // .mtl is located at ./assets/issue-244.mtl -#if _WIN32 - std::string search_paths("../;../models;./assets"); -#else - std::string search_paths("../:../models:./assets"); -#endif - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/issue-244-mtl-searchpaths.obj", - search_paths.c_str()); - - TEST_CHECK(warn.empty()); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(2 == shapes.size()); - TEST_CHECK(2 == materials.size()); - TEST_CHECK(4 == shapes[1].mesh.indices[0].vertex_index); -} - -void test_usemtl_whitespace_issue246() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/issue-246-usemtl-whitespace.obj", - gMtlBasePath); - - TEST_CHECK(warn.empty()); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - TEST_CHECK(1 == materials.size()); - TEST_CHECK(0 == shapes[0].mesh.material_ids[0]); -} - -void test_texres_texopt_issue248() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/issue-248-texres-texopt.obj", - gMtlBasePath); - - TEST_CHECK(warn.empty()); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 < materials.size()); - TEST_CHECK(512 == materials[0].diffuse_texopt.texture_resolution); - TEST_CHECK("input.jpg" == materials[0].diffuse_texname); -} - -void test_mtl_filename_with_whitespace_issue46() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = - tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, - "../models/mtl filename with whitespace issue46.obj", - gMtlBasePath); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - TEST_CHECK(true == ret); - TEST_CHECK(1 == materials.size()); - TEST_CHECK("green" == materials[0].name); -} - -void test_face_missing_issue295() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string warn; - std::string err; - bool ret = tinyobj::LoadObj( - &attrib, &shapes, &materials, &warn, &err, - "../models/issue-295-trianguation-failure.obj", - gMtlBasePath, /* triangualte */true); - - TEST_CHECK(warn.empty()); - - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cerr << "ERR: " << err << std::endl; - } - - TEST_CHECK(true == ret); - TEST_CHECK(1 == shapes.size()); - - // 14 quad faces are triangulated into 28 triangles. - TEST_CHECK(28 == shapes[0].mesh.num_face_vertices.size()); - TEST_CHECK(28 == shapes[0].mesh.smoothing_group_ids.size()); - TEST_CHECK(28 == shapes[0].mesh.material_ids.size()); - TEST_CHECK((3 * 28) == shapes[0].mesh.indices.size()); // 28 triangle faces x 3 -} - -// Fuzzer test. -// Just check if it does not crash. -// Disable by default since Windows filesystem can't create filename of afl -// testdata -#if 0 - -void test_afl000000", "[AFL]() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, "./afl/id:000000,sig:11,src:000000,op:havoc,rep:128", gMtlBasePath); - - TEST_CHECK(true == ret); -} - -void test_afl000001", "[AFL]() { - tinyobj::attrib_t attrib; - std::vector shapes; - std::vector materials; - - std::string err; - bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, "./afl/id:000001,sig:11,src:000000,op:havoc,rep:64", gMtlBasePath); - - TEST_CHECK(true == ret); -} -#endif - -#if 0 -int -main( - int argc, - char **argv) -{ - if (argc > 1) { - const char* basepath = NULL; - if (argc > 2) { - basepath = argv[2]; - } - assert(true == TestLoadObj(argv[1], basepath)); - } else { - //assert(true == TestLoadObj("cornell_box.obj")); - //assert(true == TestLoadObj("cube.obj")); - assert(true == TestStreamLoadObj()); - assert(true == TestLoadObj("catmark_torus_creases0.obj", NULL, false)); - } - - return 0; -} -#endif - -TEST_LIST = { - {"cornell_box", test_cornell_box}, - {"catmark_torus_creases0", test_catmark_torus_creases0}, - {"pbr", test_pbr}, - {"stream_load", test_stream_load}, - {"stream_load_from_file_skipping_materials", - test_stream_load_from_file_skipping_materials}, - {"stream_load_from_file_with_materials", - test_stream_load_from_file_with_materials}, - {"trailing_whitespace_in_mtl_issue92", - test_trailing_whitespace_in_mtl_issue92}, - {"transmittance_filter_issue95", test_transmittance_filter_issue95}, - {"transmittance_filter_Tf_issue95", test_transmittance_filter_Tf_issue95}, - {"transmittance_filter_Kt_issue95", test_transmittance_filter_Kt_issue95}, - {"usemtl_at_last_line_issue104", test_usemtl_at_last_line_issue104}, - {"texture_opts_issue85", test_texture_opts_issue85}, - {"mtllib_multiple_filenames_issue112", - test_mtllib_multiple_filenames_issue112}, - {"tr_and_d_issue43", test_tr_and_d_issue43}, - {"refl", test_refl}, - {"map_bump", test_map_Bump}, - {"g_ignored_issue138", test_g_ignored_issue138}, - {"vertex_col_ext_issue144", test_vertex_col_ext_issue144}, - {"norm_texopts", test_norm_texopts}, - {"zero_face_idx_value_issue140", test_zero_face_idx_value_issue140}, - {"texture_name_whitespace_issue145", test_texture_name_whitespace_issue145}, - {"smoothing_group_issue162", test_smoothing_group_issue162}, - {"invalid_face_definition", test_invalid_face_definition}, - {"Empty_mtl_basedir_issue177", test_Empty_mtl_basedir_issue177}, - {"line_primitive", test_line_primitive}, - {"points_primitive", test_points_primitive}, - {"multiple_group_names", test_multiple_group_names}, - {"initialize_all_texopts", test_initialize_all_texopts}, - {"colorspace_issue184", test_colorspace_issue184}, - {"leading_decimal_dots_issue201", test_leading_decimal_dots_issue201}, - {"mtl_default_search_path_v2_API_issue208", - test_mtl_default_search_path_v2_API_issue208}, - {"leading_zero_in_exponent_notation_issue210", - test_leading_zero_in_exponent_notation_issue210}, - {"usemtl_then_o_issue235", - test_usemtl_then_o_issue235}, - {"mtl_searchpaths_issue244", - test_mtl_searchpaths_issue244}, - {"usemtl_whitespece_issue246", - test_usemtl_whitespace_issue246}, - {"texres_texopt_issue248", - test_texres_texopt_issue248}, - {"test_mtl_filename_with_whitespace_issue46", - test_mtl_filename_with_whitespace_issue46}, - {"test_face_missing_issue295", - test_face_missing_issue295}, - {NULL, NULL}}; diff --git a/externals/tinyobjloader/tests/vcbuild.bat b/externals/tinyobjloader/tests/vcbuild.bat deleted file mode 100644 index e864673..0000000 --- a/externals/tinyobjloader/tests/vcbuild.bat +++ /dev/null @@ -1,4 +0,0 @@ -chcp 437 -python kuroga.py config-msvc.py -call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64 -ninja diff --git a/externals/tinyobjloader/tiny_obj_loader.cc b/externals/tinyobjloader/tiny_obj_loader.cc deleted file mode 100644 index e57d044..0000000 --- a/externals/tinyobjloader/tiny_obj_loader.cc +++ /dev/null @@ -1,2 +0,0 @@ -#define TINYOBJLOADER_IMPLEMENTATION -#include "tiny_obj_loader.h" diff --git a/externals/tinyobjloader/tiny_obj_loader.h b/externals/tinyobjloader/tiny_obj_loader.h deleted file mode 100644 index c4bb454..0000000 --- a/externals/tinyobjloader/tiny_obj_loader.h +++ /dev/null @@ -1,3319 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2012-Present, Syoyo Fujita and many contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -// -// version 2.0.0 : Add new object oriented API. 1.x API is still provided. -// * Support line primitive. -// * Support points primitive. -// * Support multiple search path for .mtl(v1 API). -// * Support vertex weight `vw`(as an tinyobj extension) -// * Support escaped whitespece in mtllib -// * Add robust triangulation using Mapbox earcut(TINYOBJLOADER_USE_MAPBOX_EARCUT). -// version 1.4.0 : Modifed ParseTextureNameAndOption API -// version 1.3.1 : Make ParseTextureNameAndOption API public -// version 1.3.0 : Separate warning and error message(breaking API of LoadObj) -// version 1.2.3 : Added color space extension('-colorspace') to tex opts. -// version 1.2.2 : Parse multiple group names. -// version 1.2.1 : Added initial support for line('l') primitive(PR #178) -// version 1.2.0 : Hardened implementation(#175) -// version 1.1.1 : Support smoothing groups(#162) -// version 1.1.0 : Support parsing vertex color(#144) -// version 1.0.8 : Fix parsing `g` tag just after `usemtl`(#138) -// version 1.0.7 : Support multiple tex options(#126) -// version 1.0.6 : Add TINYOBJLOADER_USE_DOUBLE option(#124) -// version 1.0.5 : Ignore `Tr` when `d` exists in MTL(#43) -// version 1.0.4 : Support multiple filenames for 'mtllib'(#112) -// version 1.0.3 : Support parsing texture options(#85) -// version 1.0.2 : Improve parsing speed by about a factor of 2 for large -// files(#105) -// version 1.0.1 : Fixes a shape is lost if obj ends with a 'usemtl'(#104) -// version 1.0.0 : Change data structure. Change license from BSD to MIT. -// - -// -// Use this in *one* .cc -// #define TINYOBJLOADER_IMPLEMENTATION -// #include "tiny_obj_loader.h" -// - -#ifndef TINY_OBJ_LOADER_H_ -#define TINY_OBJ_LOADER_H_ - -#include -#include -#include - -namespace tinyobj { - -// TODO(syoyo): Better C++11 detection for older compiler -#if __cplusplus > 199711L -#define TINYOBJ_OVERRIDE override -#else -#define TINYOBJ_OVERRIDE -#endif - -#ifdef __clang__ -#pragma clang diagnostic push -#if __has_warning("-Wzero-as-null-pointer-constant") -#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" -#endif - -#pragma clang diagnostic ignored "-Wpadded" - -#endif - -// https://en.wikipedia.org/wiki/Wavefront_.obj_file says ... -// -// -blendu on | off # set horizontal texture blending -// (default on) -// -blendv on | off # set vertical texture blending -// (default on) -// -boost real_value # boost mip-map sharpness -// -mm base_value gain_value # modify texture map values (default -// 0 1) -// # base_value = brightness, -// gain_value = contrast -// -o u [v [w]] # Origin offset (default -// 0 0 0) -// -s u [v [w]] # Scale (default -// 1 1 1) -// -t u [v [w]] # Turbulence (default -// 0 0 0) -// -texres resolution # texture resolution to create -// -clamp on | off # only render texels in the clamped -// 0-1 range (default off) -// # When unclamped, textures are -// repeated across a surface, -// # when clamped, only texels which -// fall within the 0-1 -// # range are rendered. -// -bm mult_value # bump multiplier (for bump maps -// only) -// -// -imfchan r | g | b | m | l | z # specifies which channel of the file -// is used to -// # create a scalar or bump texture. -// r:red, g:green, -// # b:blue, m:matte, l:luminance, -// z:z-depth.. -// # (the default for bump is 'l' and -// for decal is 'm') -// bump -imfchan r bumpmap.tga # says to use the red channel of -// bumpmap.tga as the bumpmap -// -// For reflection maps... -// -// -type sphere # specifies a sphere for a "refl" -// reflection map -// -type cube_top | cube_bottom | # when using a cube map, the texture -// file for each -// cube_front | cube_back | # side of the cube is specified -// separately -// cube_left | cube_right -// -// TinyObjLoader extension. -// -// -colorspace SPACE # Color space of the texture. e.g. -// 'sRGB` or 'linear' -// - -#ifdef TINYOBJLOADER_USE_DOUBLE -//#pragma message "using double" -typedef double real_t; -#else -//#pragma message "using float" -typedef float real_t; -#endif - -typedef enum { - TEXTURE_TYPE_NONE, // default - TEXTURE_TYPE_SPHERE, - TEXTURE_TYPE_CUBE_TOP, - TEXTURE_TYPE_CUBE_BOTTOM, - TEXTURE_TYPE_CUBE_FRONT, - TEXTURE_TYPE_CUBE_BACK, - TEXTURE_TYPE_CUBE_LEFT, - TEXTURE_TYPE_CUBE_RIGHT -} texture_type_t; - -struct texture_option_t { - texture_type_t type; // -type (default TEXTURE_TYPE_NONE) - real_t sharpness; // -boost (default 1.0?) - real_t brightness; // base_value in -mm option (default 0) - real_t contrast; // gain_value in -mm option (default 1) - real_t origin_offset[3]; // -o u [v [w]] (default 0 0 0) - real_t scale[3]; // -s u [v [w]] (default 1 1 1) - real_t turbulence[3]; // -t u [v [w]] (default 0 0 0) - int texture_resolution; // -texres resolution (No default value in the spec. - // We'll use -1) - bool clamp; // -clamp (default false) - char imfchan; // -imfchan (the default for bump is 'l' and for decal is 'm') - bool blendu; // -blendu (default on) - bool blendv; // -blendv (default on) - real_t bump_multiplier; // -bm (for bump maps only, default 1.0) - - // extension - std::string colorspace; // Explicitly specify color space of stored texel - // value. Usually `sRGB` or `linear` (default empty). -}; - -struct material_t { - std::string name; - - real_t ambient[3]; - real_t diffuse[3]; - real_t specular[3]; - real_t transmittance[3]; - real_t emission[3]; - real_t shininess; - real_t ior; // index of refraction - real_t dissolve; // 1 == opaque; 0 == fully transparent - // illumination model (see http://www.fileformat.info/format/material/) - int illum; - - int dummy; // Suppress padding warning. - - std::string ambient_texname; // map_Ka - std::string diffuse_texname; // map_Kd - std::string specular_texname; // map_Ks - std::string specular_highlight_texname; // map_Ns - std::string bump_texname; // map_bump, map_Bump, bump - std::string displacement_texname; // disp - std::string alpha_texname; // map_d - std::string reflection_texname; // refl - - texture_option_t ambient_texopt; - texture_option_t diffuse_texopt; - texture_option_t specular_texopt; - texture_option_t specular_highlight_texopt; - texture_option_t bump_texopt; - texture_option_t displacement_texopt; - texture_option_t alpha_texopt; - texture_option_t reflection_texopt; - - // PBR extension - // http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr - real_t roughness; // [0, 1] default 0 - real_t metallic; // [0, 1] default 0 - real_t sheen; // [0, 1] default 0 - real_t clearcoat_thickness; // [0, 1] default 0 - real_t clearcoat_roughness; // [0, 1] default 0 - real_t anisotropy; // aniso. [0, 1] default 0 - real_t anisotropy_rotation; // anisor. [0, 1] default 0 - real_t pad0; - std::string roughness_texname; // map_Pr - std::string metallic_texname; // map_Pm - std::string sheen_texname; // map_Ps - std::string emissive_texname; // map_Ke - std::string normal_texname; // norm. For normal mapping. - - texture_option_t roughness_texopt; - texture_option_t metallic_texopt; - texture_option_t sheen_texopt; - texture_option_t emissive_texopt; - texture_option_t normal_texopt; - - int pad2; - - std::map unknown_parameter; - -#ifdef TINY_OBJ_LOADER_PYTHON_BINDING - // For pybind11 - std::array GetDiffuse() { - std::array values; - values[0] = double(diffuse[0]); - values[1] = double(diffuse[1]); - values[2] = double(diffuse[2]); - - return values; - } - - std::array GetSpecular() { - std::array values; - values[0] = double(specular[0]); - values[1] = double(specular[1]); - values[2] = double(specular[2]); - - return values; - } - - std::array GetTransmittance() { - std::array values; - values[0] = double(transmittance[0]); - values[1] = double(transmittance[1]); - values[2] = double(transmittance[2]); - - return values; - } - - std::array GetEmission() { - std::array values; - values[0] = double(emission[0]); - values[1] = double(emission[1]); - values[2] = double(emission[2]); - - return values; - } - - std::array GetAmbient() { - std::array values; - values[0] = double(ambient[0]); - values[1] = double(ambient[1]); - values[2] = double(ambient[2]); - - return values; - } - - void SetDiffuse(std::array &a) { - diffuse[0] = real_t(a[0]); - diffuse[1] = real_t(a[1]); - diffuse[2] = real_t(a[2]); - } - - void SetAmbient(std::array &a) { - ambient[0] = real_t(a[0]); - ambient[1] = real_t(a[1]); - ambient[2] = real_t(a[2]); - } - - void SetSpecular(std::array &a) { - specular[0] = real_t(a[0]); - specular[1] = real_t(a[1]); - specular[2] = real_t(a[2]); - } - - void SetTransmittance(std::array &a) { - transmittance[0] = real_t(a[0]); - transmittance[1] = real_t(a[1]); - transmittance[2] = real_t(a[2]); - } - - std::string GetCustomParameter(const std::string &key) { - std::map::const_iterator it = - unknown_parameter.find(key); - - if (it != unknown_parameter.end()) { - return it->second; - } - return std::string(); - } - -#endif -}; - -struct tag_t { - std::string name; - - std::vector intValues; - std::vector floatValues; - std::vector stringValues; -}; - -struct joint_and_weight_t { - int joint_id; - real_t weight; -}; - -struct skin_weight_t { - int vertex_id; // Corresponding vertex index in `attrib_t::vertices`. - // Compared to `index_t`, this index must be positive and - // start with 0(does not allow relative indexing) - std::vector weightValues; -}; - -// Index struct to support different indices for vtx/normal/texcoord. -// -1 means not used. -struct index_t { - int vertex_index; - int normal_index; - int texcoord_index; -}; - -struct mesh_t { - std::vector indices; - std::vector - num_face_vertices; // The number of vertices per - // face. 3 = triangle, 4 = quad, - // ... Up to 255 vertices per face. - std::vector material_ids; // per-face material ID - std::vector smoothing_group_ids; // per-face smoothing group - // ID(0 = off. positive value - // = group id) - std::vector tags; // SubD tag -}; - -// struct path_t { -// std::vector indices; // pairs of indices for lines -//}; - -struct lines_t { - // Linear flattened indices. - std::vector indices; // indices for vertices(poly lines) - std::vector num_line_vertices; // The number of vertices per line. -}; - -struct points_t { - std::vector indices; // indices for points -}; - -struct shape_t { - std::string name; - mesh_t mesh; - lines_t lines; - points_t points; -}; - -// Vertex attributes -struct attrib_t { - std::vector vertices; // 'v'(xyz) - - // For backward compatibility, we store vertex weight in separate array. - std::vector vertex_weights; // 'v'(w) - std::vector normals; // 'vn' - std::vector texcoords; // 'vt'(uv) - - // For backward compatibility, we store texture coordinate 'w' in separate - // array. - std::vector texcoord_ws; // 'vt'(w) - std::vector colors; // extension: vertex colors - - // - // TinyObj extension. - // - - // NOTE(syoyo): array index is based on the appearance order. - // To get a corresponding skin weight for a specific vertex id `vid`, - // Need to reconstruct a look up table: `skin_weight_t::vertex_id` == `vid` - // (e.g. using std::map, std::unordered_map) - std::vector skin_weights; - - attrib_t() {} - - // - // For pybind11 - // - const std::vector &GetVertices() const { return vertices; } - - const std::vector &GetVertexWeights() const { return vertex_weights; } -}; - -struct callback_t { - // W is optional and set to 1 if there is no `w` item in `v` line - void (*vertex_cb)(void *user_data, real_t x, real_t y, real_t z, real_t w); - void (*normal_cb)(void *user_data, real_t x, real_t y, real_t z); - - // y and z are optional and set to 0 if there is no `y` and/or `z` item(s) in - // `vt` line. - void (*texcoord_cb)(void *user_data, real_t x, real_t y, real_t z); - - // called per 'f' line. num_indices is the number of face indices(e.g. 3 for - // triangle, 4 for quad) - // 0 will be passed for undefined index in index_t members. - void (*index_cb)(void *user_data, index_t *indices, int num_indices); - // `name` material name, `material_id` = the array index of material_t[]. -1 - // if - // a material not found in .mtl - void (*usemtl_cb)(void *user_data, const char *name, int material_id); - // `materials` = parsed material data. - void (*mtllib_cb)(void *user_data, const material_t *materials, - int num_materials); - // There may be multiple group names - void (*group_cb)(void *user_data, const char **names, int num_names); - void (*object_cb)(void *user_data, const char *name); - - callback_t() - : vertex_cb(NULL), - normal_cb(NULL), - texcoord_cb(NULL), - index_cb(NULL), - usemtl_cb(NULL), - mtllib_cb(NULL), - group_cb(NULL), - object_cb(NULL) {} -}; - -class MaterialReader { - public: - MaterialReader() {} - virtual ~MaterialReader(); - - virtual bool operator()(const std::string &matId, - std::vector *materials, - std::map *matMap, std::string *warn, - std::string *err) = 0; -}; - -/// -/// Read .mtl from a file. -/// -class MaterialFileReader : public MaterialReader { - public: - // Path could contain separator(';' in Windows, ':' in Posix) - explicit MaterialFileReader(const std::string &mtl_basedir) - : m_mtlBaseDir(mtl_basedir) {} - virtual ~MaterialFileReader() TINYOBJ_OVERRIDE {} - virtual bool operator()(const std::string &matId, - std::vector *materials, - std::map *matMap, std::string *warn, - std::string *err) TINYOBJ_OVERRIDE; - - private: - std::string m_mtlBaseDir; -}; - -/// -/// Read .mtl from a stream. -/// -class MaterialStreamReader : public MaterialReader { - public: - explicit MaterialStreamReader(std::istream &inStream) - : m_inStream(inStream) {} - virtual ~MaterialStreamReader() TINYOBJ_OVERRIDE {} - virtual bool operator()(const std::string &matId, - std::vector *materials, - std::map *matMap, std::string *warn, - std::string *err) TINYOBJ_OVERRIDE; - - private: - std::istream &m_inStream; -}; - -// v2 API -struct ObjReaderConfig { - bool triangulate; // triangulate polygon? - - // Currently not used. - // "simple" or empty: Create triangle fan - // "earcut": Use the algorithm based on Ear clipping - std::string triangulation_method; - - /// Parse vertex color. - /// If vertex color is not present, its filled with default value. - /// false = no vertex color - /// This will increase memory of parsed .obj - bool vertex_color; - - /// - /// Search path to .mtl file. - /// Default = "" = search from the same directory of .obj file. - /// Valid only when loading .obj from a file. - /// - std::string mtl_search_path; - - ObjReaderConfig() - : triangulate(true), triangulation_method("simple"), vertex_color(true) {} -}; - -/// -/// Wavefront .obj reader class(v2 API) -/// -class ObjReader { - public: - ObjReader() : valid_(false) {} - ~ObjReader() {} - - /// - /// Load .obj and .mtl from a file. - /// - /// @param[in] filename wavefront .obj filename - /// @param[in] config Reader configuration - /// - bool ParseFromFile(const std::string &filename, - const ObjReaderConfig &config = ObjReaderConfig()); - - /// - /// Parse .obj from a text string. - /// Need to supply .mtl text string by `mtl_text`. - /// This function ignores `mtllib` line in .obj text. - /// - /// @param[in] obj_text wavefront .obj filename - /// @param[in] mtl_text wavefront .mtl filename - /// @param[in] config Reader configuration - /// - bool ParseFromString(const std::string &obj_text, const std::string &mtl_text, - const ObjReaderConfig &config = ObjReaderConfig()); - - /// - /// .obj was loaded or parsed correctly. - /// - bool Valid() const { return valid_; } - - const attrib_t &GetAttrib() const { return attrib_; } - - const std::vector &GetShapes() const { return shapes_; } - - const std::vector &GetMaterials() const { return materials_; } - - /// - /// Warning message(may be filled after `Load` or `Parse`) - /// - const std::string &Warning() const { return warning_; } - - /// - /// Error message(filled when `Load` or `Parse` failed) - /// - const std::string &Error() const { return error_; } - - private: - bool valid_; - - attrib_t attrib_; - std::vector shapes_; - std::vector materials_; - - std::string warning_; - std::string error_; -}; - -/// ==>>========= Legacy v1 API ============================================= - -/// Loads .obj from a file. -/// 'attrib', 'shapes' and 'materials' will be filled with parsed shape data -/// 'shapes' will be filled with parsed shape data -/// Returns true when loading .obj become success. -/// Returns warning message into `warn`, and error message into `err` -/// 'mtl_basedir' is optional, and used for base directory for .mtl file. -/// In default(`NULL'), .mtl file is searched from an application's working -/// directory. -/// 'triangulate' is optional, and used whether triangulate polygon face in .obj -/// or not. -/// Option 'default_vcols_fallback' specifies whether vertex colors should -/// always be defined, even if no colors are given (fallback to white). -bool LoadObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, std::string *warn, - std::string *err, const char *filename, - const char *mtl_basedir = NULL, bool triangulate = true, - bool default_vcols_fallback = true); - -/// Loads .obj from a file with custom user callback. -/// .mtl is loaded as usual and parsed material_t data will be passed to -/// `callback.mtllib_cb`. -/// Returns true when loading .obj/.mtl become success. -/// Returns warning message into `warn`, and error message into `err` -/// See `examples/callback_api/` for how to use this function. -bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, - void *user_data = NULL, - MaterialReader *readMatFn = NULL, - std::string *warn = NULL, std::string *err = NULL); - -/// Loads object from a std::istream, uses `readMatFn` to retrieve -/// std::istream for materials. -/// Returns true when loading .obj become success. -/// Returns warning and error message into `err` -bool LoadObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, std::string *warn, - std::string *err, std::istream *inStream, - MaterialReader *readMatFn = NULL, bool triangulate = true, - bool default_vcols_fallback = true); - -/// Loads materials into std::map -void LoadMtl(std::map *material_map, - std::vector *materials, std::istream *inStream, - std::string *warning, std::string *err); - -/// -/// Parse texture name and texture option for custom texture parameter through -/// material::unknown_parameter -/// -/// @param[out] texname Parsed texture name -/// @param[out] texopt Parsed texopt -/// @param[in] linebuf Input string -/// -bool ParseTextureNameAndOption(std::string *texname, texture_option_t *texopt, - const char *linebuf); - -/// =<<========== Legacy v1 API ============================================= - -} // namespace tinyobj - -#endif // TINY_OBJ_LOADER_H_ - -#ifdef TINYOBJLOADER_IMPLEMENTATION -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef TINYOBJLOADER_USE_MAPBOX_EARCUT - -#ifdef TINYOBJLOADER_DONOT_INCLUDE_MAPBOX_EARCUT -// Assume earcut.hpp is included outside of tiny_obj_loader.h -#else - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Weverything" -#endif - -#include -#include "mapbox/earcut.hpp" - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -#endif - -#endif // TINYOBJLOADER_USE_MAPBOX_EARCUT - -namespace tinyobj { - -MaterialReader::~MaterialReader() {} - -struct vertex_index_t { - int v_idx, vt_idx, vn_idx; - vertex_index_t() : v_idx(-1), vt_idx(-1), vn_idx(-1) {} - explicit vertex_index_t(int idx) : v_idx(idx), vt_idx(idx), vn_idx(idx) {} - vertex_index_t(int vidx, int vtidx, int vnidx) - : v_idx(vidx), vt_idx(vtidx), vn_idx(vnidx) {} -}; - -// Internal data structure for face representation -// index + smoothing group. -struct face_t { - unsigned int - smoothing_group_id; // smoothing group id. 0 = smoothing groupd is off. - int pad_; - std::vector vertex_indices; // face vertex indices. - - face_t() : smoothing_group_id(0), pad_(0) {} -}; - -// Internal data structure for line representation -struct __line_t { - // l v1/vt1 v2/vt2 ... - // In the specification, line primitrive does not have normal index, but - // TinyObjLoader allow it - std::vector vertex_indices; -}; - -// Internal data structure for points representation -struct __points_t { - // p v1 v2 ... - // In the specification, point primitrive does not have normal index and - // texture coord index, but TinyObjLoader allow it. - std::vector vertex_indices; -}; - -struct tag_sizes { - tag_sizes() : num_ints(0), num_reals(0), num_strings(0) {} - int num_ints; - int num_reals; - int num_strings; -}; - -struct obj_shape { - std::vector v; - std::vector vn; - std::vector vt; -}; - -// -// Manages group of primitives(face, line, points, ...) -struct PrimGroup { - std::vector faceGroup; - std::vector<__line_t> lineGroup; - std::vector<__points_t> pointsGroup; - - void clear() { - faceGroup.clear(); - lineGroup.clear(); - pointsGroup.clear(); - } - - bool IsEmpty() const { - return faceGroup.empty() && lineGroup.empty() && pointsGroup.empty(); - } - - // TODO(syoyo): bspline, surface, ... -}; - -// See -// http://stackoverflow.com/questions/6089231/getting-std-ifstream-to-handle-lf-cr-and-crlf -static std::istream &safeGetline(std::istream &is, std::string &t) { - t.clear(); - - // The characters in the stream are read one-by-one using a std::streambuf. - // That is faster than reading them one-by-one using the std::istream. - // Code that uses streambuf this way must be guarded by a sentry object. - // The sentry object performs various tasks, - // such as thread synchronization and updating the stream state. - - std::istream::sentry se(is, true); - std::streambuf *sb = is.rdbuf(); - - if (se) { - for (;;) { - int c = sb->sbumpc(); - switch (c) { - case '\n': - return is; - case '\r': - if (sb->sgetc() == '\n') sb->sbumpc(); - return is; - case EOF: - // Also handle the case when the last line has no line ending - if (t.empty()) is.setstate(std::ios::eofbit); - return is; - default: - t += static_cast(c); - } - } - } - - return is; -} - -#define IS_SPACE(x) (((x) == ' ') || ((x) == '\t')) -#define IS_DIGIT(x) \ - (static_cast((x) - '0') < static_cast(10)) -#define IS_NEW_LINE(x) (((x) == '\r') || ((x) == '\n') || ((x) == '\0')) - -// Make index zero-base, and also support relative index. -static inline bool fixIndex(int idx, int n, int *ret) { - if (!ret) { - return false; - } - - if (idx > 0) { - (*ret) = idx - 1; - return true; - } - - if (idx == 0) { - // zero is not allowed according to the spec. - return false; - } - - if (idx < 0) { - (*ret) = n + idx; // negative value = relative - return true; - } - - return false; // never reach here. -} - -static inline std::string parseString(const char **token) { - std::string s; - (*token) += strspn((*token), " \t"); - size_t e = strcspn((*token), " \t\r"); - s = std::string((*token), &(*token)[e]); - (*token) += e; - return s; -} - -static inline int parseInt(const char **token) { - (*token) += strspn((*token), " \t"); - int i = atoi((*token)); - (*token) += strcspn((*token), " \t\r"); - return i; -} - -// Tries to parse a floating point number located at s. -// -// s_end should be a location in the string where reading should absolutely -// stop. For example at the end of the string, to prevent buffer overflows. -// -// Parses the following EBNF grammar: -// sign = "+" | "-" ; -// END = ? anything not in digit ? -// digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; -// integer = [sign] , digit , {digit} ; -// decimal = integer , ["." , integer] ; -// float = ( decimal , END ) | ( decimal , ("E" | "e") , integer , END ) ; -// -// Valid strings are for example: -// -0 +3.1417e+2 -0.0E-3 1.0324 -1.41 11e2 -// -// If the parsing is a success, result is set to the parsed value and true -// is returned. -// -// The function is greedy and will parse until any of the following happens: -// - a non-conforming character is encountered. -// - s_end is reached. -// -// The following situations triggers a failure: -// - s >= s_end. -// - parse failure. -// -static bool tryParseDouble(const char *s, const char *s_end, double *result) { - if (s >= s_end) { - return false; - } - - double mantissa = 0.0; - // This exponent is base 2 rather than 10. - // However the exponent we parse is supposed to be one of ten, - // thus we must take care to convert the exponent/and or the - // mantissa to a * 2^E, where a is the mantissa and E is the - // exponent. - // To get the final double we will use ldexp, it requires the - // exponent to be in base 2. - int exponent = 0; - - // NOTE: THESE MUST BE DECLARED HERE SINCE WE ARE NOT ALLOWED - // TO JUMP OVER DEFINITIONS. - char sign = '+'; - char exp_sign = '+'; - char const *curr = s; - - // How many characters were read in a loop. - int read = 0; - // Tells whether a loop terminated due to reaching s_end. - bool end_not_reached = false; - bool leading_decimal_dots = false; - - /* - BEGIN PARSING. - */ - - // Find out what sign we've got. - if (*curr == '+' || *curr == '-') { - sign = *curr; - curr++; - if ((curr != s_end) && (*curr == '.')) { - // accept. Somethig like `.7e+2`, `-.5234` - leading_decimal_dots = true; - } - } else if (IS_DIGIT(*curr)) { /* Pass through. */ - } else if (*curr == '.') { - // accept. Somethig like `.7e+2`, `-.5234` - leading_decimal_dots = true; - } else { - goto fail; - } - - // Read the integer part. - end_not_reached = (curr != s_end); - if (!leading_decimal_dots) { - while (end_not_reached && IS_DIGIT(*curr)) { - mantissa *= 10; - mantissa += static_cast(*curr - 0x30); - curr++; - read++; - end_not_reached = (curr != s_end); - } - - // We must make sure we actually got something. - if (read == 0) goto fail; - } - - // We allow numbers of form "#", "###" etc. - if (!end_not_reached) goto assemble; - - // Read the decimal part. - if (*curr == '.') { - curr++; - read = 1; - end_not_reached = (curr != s_end); - while (end_not_reached && IS_DIGIT(*curr)) { - static const double pow_lut[] = { - 1.0, 0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, - }; - const int lut_entries = sizeof pow_lut / sizeof pow_lut[0]; - - // NOTE: Don't use powf here, it will absolutely murder precision. - mantissa += static_cast(*curr - 0x30) * - (read < lut_entries ? pow_lut[read] : std::pow(10.0, -read)); - read++; - curr++; - end_not_reached = (curr != s_end); - } - } else if (*curr == 'e' || *curr == 'E') { - } else { - goto assemble; - } - - if (!end_not_reached) goto assemble; - - // Read the exponent part. - if (*curr == 'e' || *curr == 'E') { - curr++; - // Figure out if a sign is present and if it is. - end_not_reached = (curr != s_end); - if (end_not_reached && (*curr == '+' || *curr == '-')) { - exp_sign = *curr; - curr++; - } else if (IS_DIGIT(*curr)) { /* Pass through. */ - } else { - // Empty E is not allowed. - goto fail; - } - - read = 0; - end_not_reached = (curr != s_end); - while (end_not_reached && IS_DIGIT(*curr)) { - // To avoid annoying MSVC's min/max macro definiton, - // Use hardcoded int max value - if (exponent > (2147483647/10)) { // 2147483647 = std::numeric_limits::max() - // Integer overflow - goto fail; - } - exponent *= 10; - exponent += static_cast(*curr - 0x30); - curr++; - read++; - end_not_reached = (curr != s_end); - } - exponent *= (exp_sign == '+' ? 1 : -1); - if (read == 0) goto fail; - } - -assemble: - *result = (sign == '+' ? 1 : -1) * - (exponent ? std::ldexp(mantissa * std::pow(5.0, exponent), exponent) - : mantissa); - return true; -fail: - return false; -} - -static inline real_t parseReal(const char **token, double default_value = 0.0) { - (*token) += strspn((*token), " \t"); - const char *end = (*token) + strcspn((*token), " \t\r"); - double val = default_value; - tryParseDouble((*token), end, &val); - real_t f = static_cast(val); - (*token) = end; - return f; -} - -static inline bool parseReal(const char **token, real_t *out) { - (*token) += strspn((*token), " \t"); - const char *end = (*token) + strcspn((*token), " \t\r"); - double val; - bool ret = tryParseDouble((*token), end, &val); - if (ret) { - real_t f = static_cast(val); - (*out) = f; - } - (*token) = end; - return ret; -} - -static inline void parseReal2(real_t *x, real_t *y, const char **token, - const double default_x = 0.0, - const double default_y = 0.0) { - (*x) = parseReal(token, default_x); - (*y) = parseReal(token, default_y); -} - -static inline void parseReal3(real_t *x, real_t *y, real_t *z, - const char **token, const double default_x = 0.0, - const double default_y = 0.0, - const double default_z = 0.0) { - (*x) = parseReal(token, default_x); - (*y) = parseReal(token, default_y); - (*z) = parseReal(token, default_z); -} - -static inline void parseV(real_t *x, real_t *y, real_t *z, real_t *w, - const char **token, const double default_x = 0.0, - const double default_y = 0.0, - const double default_z = 0.0, - const double default_w = 1.0) { - (*x) = parseReal(token, default_x); - (*y) = parseReal(token, default_y); - (*z) = parseReal(token, default_z); - (*w) = parseReal(token, default_w); -} - -// Extension: parse vertex with colors(6 items) -static inline bool parseVertexWithColor(real_t *x, real_t *y, real_t *z, - real_t *r, real_t *g, real_t *b, - const char **token, - const double default_x = 0.0, - const double default_y = 0.0, - const double default_z = 0.0) { - (*x) = parseReal(token, default_x); - (*y) = parseReal(token, default_y); - (*z) = parseReal(token, default_z); - - const bool found_color = - parseReal(token, r) && parseReal(token, g) && parseReal(token, b); - - if (!found_color) { - (*r) = (*g) = (*b) = 1.0; - } - - return found_color; -} - -static inline bool parseOnOff(const char **token, bool default_value = true) { - (*token) += strspn((*token), " \t"); - const char *end = (*token) + strcspn((*token), " \t\r"); - - bool ret = default_value; - if ((0 == strncmp((*token), "on", 2))) { - ret = true; - } else if ((0 == strncmp((*token), "off", 3))) { - ret = false; - } - - (*token) = end; - return ret; -} - -static inline texture_type_t parseTextureType( - const char **token, texture_type_t default_value = TEXTURE_TYPE_NONE) { - (*token) += strspn((*token), " \t"); - const char *end = (*token) + strcspn((*token), " \t\r"); - texture_type_t ty = default_value; - - if ((0 == strncmp((*token), "cube_top", strlen("cube_top")))) { - ty = TEXTURE_TYPE_CUBE_TOP; - } else if ((0 == strncmp((*token), "cube_bottom", strlen("cube_bottom")))) { - ty = TEXTURE_TYPE_CUBE_BOTTOM; - } else if ((0 == strncmp((*token), "cube_left", strlen("cube_left")))) { - ty = TEXTURE_TYPE_CUBE_LEFT; - } else if ((0 == strncmp((*token), "cube_right", strlen("cube_right")))) { - ty = TEXTURE_TYPE_CUBE_RIGHT; - } else if ((0 == strncmp((*token), "cube_front", strlen("cube_front")))) { - ty = TEXTURE_TYPE_CUBE_FRONT; - } else if ((0 == strncmp((*token), "cube_back", strlen("cube_back")))) { - ty = TEXTURE_TYPE_CUBE_BACK; - } else if ((0 == strncmp((*token), "sphere", strlen("sphere")))) { - ty = TEXTURE_TYPE_SPHERE; - } - - (*token) = end; - return ty; -} - -static tag_sizes parseTagTriple(const char **token) { - tag_sizes ts; - - (*token) += strspn((*token), " \t"); - ts.num_ints = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - return ts; - } - - (*token)++; // Skip '/' - - (*token) += strspn((*token), " \t"); - ts.num_reals = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - return ts; - } - (*token)++; // Skip '/' - - ts.num_strings = parseInt(token); - - return ts; -} - -// Parse triples with index offsets: i, i/j/k, i//k, i/j -static bool parseTriple(const char **token, int vsize, int vnsize, int vtsize, - vertex_index_t *ret) { - if (!ret) { - return false; - } - - vertex_index_t vi(-1); - - if (!fixIndex(atoi((*token)), vsize, &(vi.v_idx))) { - return false; - } - - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - (*ret) = vi; - return true; - } - (*token)++; - - // i//k - if ((*token)[0] == '/') { - (*token)++; - if (!fixIndex(atoi((*token)), vnsize, &(vi.vn_idx))) { - return false; - } - (*token) += strcspn((*token), "/ \t\r"); - (*ret) = vi; - return true; - } - - // i/j/k or i/j - if (!fixIndex(atoi((*token)), vtsize, &(vi.vt_idx))) { - return false; - } - - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - (*ret) = vi; - return true; - } - - // i/j/k - (*token)++; // skip '/' - if (!fixIndex(atoi((*token)), vnsize, &(vi.vn_idx))) { - return false; - } - (*token) += strcspn((*token), "/ \t\r"); - - (*ret) = vi; - - return true; -} - -// Parse raw triples: i, i/j/k, i//k, i/j -static vertex_index_t parseRawTriple(const char **token) { - vertex_index_t vi(static_cast(0)); // 0 is an invalid index in OBJ - - vi.v_idx = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - return vi; - } - (*token)++; - - // i//k - if ((*token)[0] == '/') { - (*token)++; - vi.vn_idx = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - return vi; - } - - // i/j/k or i/j - vi.vt_idx = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - if ((*token)[0] != '/') { - return vi; - } - - // i/j/k - (*token)++; // skip '/' - vi.vn_idx = atoi((*token)); - (*token) += strcspn((*token), "/ \t\r"); - return vi; -} - -bool ParseTextureNameAndOption(std::string *texname, texture_option_t *texopt, - const char *linebuf) { - // @todo { write more robust lexer and parser. } - bool found_texname = false; - std::string texture_name; - - const char *token = linebuf; // Assume line ends with NULL - - while (!IS_NEW_LINE((*token))) { - token += strspn(token, " \t"); // skip space - if ((0 == strncmp(token, "-blendu", 7)) && IS_SPACE((token[7]))) { - token += 8; - texopt->blendu = parseOnOff(&token, /* default */ true); - } else if ((0 == strncmp(token, "-blendv", 7)) && IS_SPACE((token[7]))) { - token += 8; - texopt->blendv = parseOnOff(&token, /* default */ true); - } else if ((0 == strncmp(token, "-clamp", 6)) && IS_SPACE((token[6]))) { - token += 7; - texopt->clamp = parseOnOff(&token, /* default */ true); - } else if ((0 == strncmp(token, "-boost", 6)) && IS_SPACE((token[6]))) { - token += 7; - texopt->sharpness = parseReal(&token, 1.0); - } else if ((0 == strncmp(token, "-bm", 3)) && IS_SPACE((token[3]))) { - token += 4; - texopt->bump_multiplier = parseReal(&token, 1.0); - } else if ((0 == strncmp(token, "-o", 2)) && IS_SPACE((token[2]))) { - token += 3; - parseReal3(&(texopt->origin_offset[0]), &(texopt->origin_offset[1]), - &(texopt->origin_offset[2]), &token); - } else if ((0 == strncmp(token, "-s", 2)) && IS_SPACE((token[2]))) { - token += 3; - parseReal3(&(texopt->scale[0]), &(texopt->scale[1]), &(texopt->scale[2]), - &token, 1.0, 1.0, 1.0); - } else if ((0 == strncmp(token, "-t", 2)) && IS_SPACE((token[2]))) { - token += 3; - parseReal3(&(texopt->turbulence[0]), &(texopt->turbulence[1]), - &(texopt->turbulence[2]), &token); - } else if ((0 == strncmp(token, "-type", 5)) && IS_SPACE((token[5]))) { - token += 5; - texopt->type = parseTextureType((&token), TEXTURE_TYPE_NONE); - } else if ((0 == strncmp(token, "-texres", 7)) && IS_SPACE((token[7]))) { - token += 7; - // TODO(syoyo): Check if arg is int type. - texopt->texture_resolution = parseInt(&token); - } else if ((0 == strncmp(token, "-imfchan", 8)) && IS_SPACE((token[8]))) { - token += 9; - token += strspn(token, " \t"); - const char *end = token + strcspn(token, " \t\r"); - if ((end - token) == 1) { // Assume one char for -imfchan - texopt->imfchan = (*token); - } - token = end; - } else if ((0 == strncmp(token, "-mm", 3)) && IS_SPACE((token[3]))) { - token += 4; - parseReal2(&(texopt->brightness), &(texopt->contrast), &token, 0.0, 1.0); - } else if ((0 == strncmp(token, "-colorspace", 11)) && - IS_SPACE((token[11]))) { - token += 12; - texopt->colorspace = parseString(&token); - } else { -// Assume texture filename -#if 0 - size_t len = strcspn(token, " \t\r"); // untile next space - texture_name = std::string(token, token + len); - token += len; - - token += strspn(token, " \t"); // skip space -#else - // Read filename until line end to parse filename containing whitespace - // TODO(syoyo): Support parsing texture option flag after the filename. - texture_name = std::string(token); - token += texture_name.length(); -#endif - - found_texname = true; - } - } - - if (found_texname) { - (*texname) = texture_name; - return true; - } else { - return false; - } -} - -static void InitTexOpt(texture_option_t *texopt, const bool is_bump) { - if (is_bump) { - texopt->imfchan = 'l'; - } else { - texopt->imfchan = 'm'; - } - texopt->bump_multiplier = static_cast(1.0); - texopt->clamp = false; - texopt->blendu = true; - texopt->blendv = true; - texopt->sharpness = static_cast(1.0); - texopt->brightness = static_cast(0.0); - texopt->contrast = static_cast(1.0); - texopt->origin_offset[0] = static_cast(0.0); - texopt->origin_offset[1] = static_cast(0.0); - texopt->origin_offset[2] = static_cast(0.0); - texopt->scale[0] = static_cast(1.0); - texopt->scale[1] = static_cast(1.0); - texopt->scale[2] = static_cast(1.0); - texopt->turbulence[0] = static_cast(0.0); - texopt->turbulence[1] = static_cast(0.0); - texopt->turbulence[2] = static_cast(0.0); - texopt->texture_resolution = -1; - texopt->type = TEXTURE_TYPE_NONE; -} - -static void InitMaterial(material_t *material) { - InitTexOpt(&material->ambient_texopt, /* is_bump */ false); - InitTexOpt(&material->diffuse_texopt, /* is_bump */ false); - InitTexOpt(&material->specular_texopt, /* is_bump */ false); - InitTexOpt(&material->specular_highlight_texopt, /* is_bump */ false); - InitTexOpt(&material->bump_texopt, /* is_bump */ true); - InitTexOpt(&material->displacement_texopt, /* is_bump */ false); - InitTexOpt(&material->alpha_texopt, /* is_bump */ false); - InitTexOpt(&material->reflection_texopt, /* is_bump */ false); - InitTexOpt(&material->roughness_texopt, /* is_bump */ false); - InitTexOpt(&material->metallic_texopt, /* is_bump */ false); - InitTexOpt(&material->sheen_texopt, /* is_bump */ false); - InitTexOpt(&material->emissive_texopt, /* is_bump */ false); - InitTexOpt(&material->normal_texopt, - /* is_bump */ false); // @fixme { is_bump will be true? } - material->name = ""; - material->ambient_texname = ""; - material->diffuse_texname = ""; - material->specular_texname = ""; - material->specular_highlight_texname = ""; - material->bump_texname = ""; - material->displacement_texname = ""; - material->reflection_texname = ""; - material->alpha_texname = ""; - for (int i = 0; i < 3; i++) { - material->ambient[i] = static_cast(0.0); - material->diffuse[i] = static_cast(0.0); - material->specular[i] = static_cast(0.0); - material->transmittance[i] = static_cast(0.0); - material->emission[i] = static_cast(0.0); - } - material->illum = 0; - material->dissolve = static_cast(1.0); - material->shininess = static_cast(1.0); - material->ior = static_cast(1.0); - - material->roughness = static_cast(0.0); - material->metallic = static_cast(0.0); - material->sheen = static_cast(0.0); - material->clearcoat_thickness = static_cast(0.0); - material->clearcoat_roughness = static_cast(0.0); - material->anisotropy_rotation = static_cast(0.0); - material->anisotropy = static_cast(0.0); - material->roughness_texname = ""; - material->metallic_texname = ""; - material->sheen_texname = ""; - material->emissive_texname = ""; - material->normal_texname = ""; - - material->unknown_parameter.clear(); -} - -// code from https://wrf.ecse.rpi.edu//Research/Short_Notes/pnpoly.html -template -static int pnpoly(int nvert, T *vertx, T *verty, T testx, T testy) { - int i, j, c = 0; - for (i = 0, j = nvert - 1; i < nvert; j = i++) { - if (((verty[i] > testy) != (verty[j] > testy)) && - (testx < - (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + - vertx[i])) - c = !c; - } - return c; -} - -// TODO(syoyo): refactor function. -static bool exportGroupsToShape(shape_t *shape, const PrimGroup &prim_group, - const std::vector &tags, - const int material_id, const std::string &name, - bool triangulate, const std::vector &v, - std::string *warn) { - if (prim_group.IsEmpty()) { - return false; - } - - shape->name = name; - - // polygon - if (!prim_group.faceGroup.empty()) { - // Flatten vertices and indices - for (size_t i = 0; i < prim_group.faceGroup.size(); i++) { - const face_t &face = prim_group.faceGroup[i]; - - size_t npolys = face.vertex_indices.size(); - - if (npolys < 3) { - // Face must have 3+ vertices. - if (warn) { - (*warn) += "Degenerated face found\n."; - } - continue; - } - - if (triangulate) { - if (npolys == 4) { - vertex_index_t i0 = face.vertex_indices[0]; - vertex_index_t i1 = face.vertex_indices[1]; - vertex_index_t i2 = face.vertex_indices[2]; - vertex_index_t i3 = face.vertex_indices[3]; - - size_t vi0 = size_t(i0.v_idx); - size_t vi1 = size_t(i1.v_idx); - size_t vi2 = size_t(i2.v_idx); - size_t vi3 = size_t(i3.v_idx); - - if (((3 * vi0 + 2) >= v.size()) || ((3 * vi1 + 2) >= v.size()) || - ((3 * vi2 + 2) >= v.size()) || ((3 * vi3 + 2) >= v.size())) { - // Invalid triangle. - // FIXME(syoyo): Is it ok to simply skip this invalid triangle? - if (warn) { - (*warn) += "Face with invalid vertex index found.\n"; - } - continue; - } - - real_t v0x = v[vi0 * 3 + 0]; - real_t v0y = v[vi0 * 3 + 1]; - real_t v0z = v[vi0 * 3 + 2]; - real_t v1x = v[vi1 * 3 + 0]; - real_t v1y = v[vi1 * 3 + 1]; - real_t v1z = v[vi1 * 3 + 2]; - real_t v2x = v[vi2 * 3 + 0]; - real_t v2y = v[vi2 * 3 + 1]; - real_t v2z = v[vi2 * 3 + 2]; - real_t v3x = v[vi3 * 3 + 0]; - real_t v3y = v[vi3 * 3 + 1]; - real_t v3z = v[vi3 * 3 + 2]; - - // There are two candidates to split the quad into two triangles. - // - // Choose the shortest edge. - // TODO: Is it better to determine the edge to split by calculating - // the area of each triangle? - // - // +---+ - // |\ | - // | \ | - // | \| - // +---+ - // - // +---+ - // | /| - // | / | - // |/ | - // +---+ - - real_t e02x = v2x - v0x; - real_t e02y = v2y - v0y; - real_t e02z = v2z - v0z; - real_t e13x = v3x - v1x; - real_t e13y = v3y - v1y; - real_t e13z = v3z - v1z; - - real_t sqr02 = e02x * e02x + e02y * e02y + e02z * e02z; - real_t sqr13 = e13x * e13x + e13y * e13y + e13z * e13z; - - index_t idx0, idx1, idx2, idx3; - - idx0.vertex_index = i0.v_idx; - idx0.normal_index = i0.vn_idx; - idx0.texcoord_index = i0.vt_idx; - idx1.vertex_index = i1.v_idx; - idx1.normal_index = i1.vn_idx; - idx1.texcoord_index = i1.vt_idx; - idx2.vertex_index = i2.v_idx; - idx2.normal_index = i2.vn_idx; - idx2.texcoord_index = i2.vt_idx; - idx3.vertex_index = i3.v_idx; - idx3.normal_index = i3.vn_idx; - idx3.texcoord_index = i3.vt_idx; - - if (sqr02 < sqr13) { - // [0, 1, 2], [0, 2, 3] - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx2); - - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx2); - shape->mesh.indices.push_back(idx3); - } else { - // [0, 1, 3], [1, 2, 3] - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx3); - - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx2); - shape->mesh.indices.push_back(idx3); - } - - // Two triangle faces - shape->mesh.num_face_vertices.push_back(3); - shape->mesh.num_face_vertices.push_back(3); - - shape->mesh.material_ids.push_back(material_id); - shape->mesh.material_ids.push_back(material_id); - - shape->mesh.smoothing_group_ids.push_back(face.smoothing_group_id); - shape->mesh.smoothing_group_ids.push_back(face.smoothing_group_id); - - } else { - vertex_index_t i0 = face.vertex_indices[0]; - vertex_index_t i1(-1); - vertex_index_t i2 = face.vertex_indices[1]; - - // find the two axes to work in - size_t axes[2] = {1, 2}; - for (size_t k = 0; k < npolys; ++k) { - i0 = face.vertex_indices[(k + 0) % npolys]; - i1 = face.vertex_indices[(k + 1) % npolys]; - i2 = face.vertex_indices[(k + 2) % npolys]; - size_t vi0 = size_t(i0.v_idx); - size_t vi1 = size_t(i1.v_idx); - size_t vi2 = size_t(i2.v_idx); - - if (((3 * vi0 + 2) >= v.size()) || ((3 * vi1 + 2) >= v.size()) || - ((3 * vi2 + 2) >= v.size())) { - // Invalid triangle. - // FIXME(syoyo): Is it ok to simply skip this invalid triangle? - continue; - } - real_t v0x = v[vi0 * 3 + 0]; - real_t v0y = v[vi0 * 3 + 1]; - real_t v0z = v[vi0 * 3 + 2]; - real_t v1x = v[vi1 * 3 + 0]; - real_t v1y = v[vi1 * 3 + 1]; - real_t v1z = v[vi1 * 3 + 2]; - real_t v2x = v[vi2 * 3 + 0]; - real_t v2y = v[vi2 * 3 + 1]; - real_t v2z = v[vi2 * 3 + 2]; - real_t e0x = v1x - v0x; - real_t e0y = v1y - v0y; - real_t e0z = v1z - v0z; - real_t e1x = v2x - v1x; - real_t e1y = v2y - v1y; - real_t e1z = v2z - v1z; - real_t cx = std::fabs(e0y * e1z - e0z * e1y); - real_t cy = std::fabs(e0z * e1x - e0x * e1z); - real_t cz = std::fabs(e0x * e1y - e0y * e1x); - const real_t epsilon = std::numeric_limits::epsilon(); - // std::cout << "cx " << cx << ", cy " << cy << ", cz " << cz << - // "\n"; - if (cx > epsilon || cy > epsilon || cz > epsilon) { - // std::cout << "corner\n"; - // found a corner - if (cx > cy && cx > cz) { - // std::cout << "pattern0\n"; - } else { - // std::cout << "axes[0] = 0\n"; - axes[0] = 0; - if (cz > cx && cz > cy) { - // std::cout << "axes[1] = 1\n"; - axes[1] = 1; - } - } - break; - } - } - -#ifdef TINYOBJLOADER_USE_MAPBOX_EARCUT - using Point = std::array; - - // first polyline define the main polygon. - // following polylines define holes(not used in tinyobj). - std::vector > polygon; - - std::vector polyline; - - // Fill polygon data(facevarying vertices). - for (size_t k = 0; k < npolys; k++) { - i0 = face.vertex_indices[k]; - size_t vi0 = size_t(i0.v_idx); - - assert(((3 * vi0 + 2) < v.size())); - - real_t v0x = v[vi0 * 3 + axes[0]]; - real_t v0y = v[vi0 * 3 + axes[1]]; - - polyline.push_back({v0x, v0y}); - } - - polygon.push_back(polyline); - std::vector indices = mapbox::earcut(polygon); - // => result = 3 * faces, clockwise - - assert(indices.size() % 3 == 0); - - // Reconstruct vertex_index_t - for (size_t k = 0; k < indices.size() / 3; k++) { - { - index_t idx0, idx1, idx2; - idx0.vertex_index = face.vertex_indices[indices[3 * k + 0]].v_idx; - idx0.normal_index = - face.vertex_indices[indices[3 * k + 0]].vn_idx; - idx0.texcoord_index = - face.vertex_indices[indices[3 * k + 0]].vt_idx; - idx1.vertex_index = face.vertex_indices[indices[3 * k + 1]].v_idx; - idx1.normal_index = - face.vertex_indices[indices[3 * k + 1]].vn_idx; - idx1.texcoord_index = - face.vertex_indices[indices[3 * k + 1]].vt_idx; - idx2.vertex_index = face.vertex_indices[indices[3 * k + 2]].v_idx; - idx2.normal_index = - face.vertex_indices[indices[3 * k + 2]].vn_idx; - idx2.texcoord_index = - face.vertex_indices[indices[3 * k + 2]].vt_idx; - - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx2); - - shape->mesh.num_face_vertices.push_back(3); - shape->mesh.material_ids.push_back(material_id); - shape->mesh.smoothing_group_ids.push_back( - face.smoothing_group_id); - } - } - -#else // Built-in ear clipping triangulation - - - face_t remainingFace = face; // copy - size_t guess_vert = 0; - vertex_index_t ind[3]; - real_t vx[3]; - real_t vy[3]; - - // How many iterations can we do without decreasing the remaining - // vertices. - size_t remainingIterations = face.vertex_indices.size(); - size_t previousRemainingVertices = - remainingFace.vertex_indices.size(); - - while (remainingFace.vertex_indices.size() > 3 && - remainingIterations > 0) { - // std::cout << "remainingIterations " << remainingIterations << - // "\n"; - - npolys = remainingFace.vertex_indices.size(); - if (guess_vert >= npolys) { - guess_vert -= npolys; - } - - if (previousRemainingVertices != npolys) { - // The number of remaining vertices decreased. Reset counters. - previousRemainingVertices = npolys; - remainingIterations = npolys; - } else { - // We didn't consume a vertex on previous iteration, reduce the - // available iterations. - remainingIterations--; - } - - for (size_t k = 0; k < 3; k++) { - ind[k] = remainingFace.vertex_indices[(guess_vert + k) % npolys]; - size_t vi = size_t(ind[k].v_idx); - if (((vi * 3 + axes[0]) >= v.size()) || - ((vi * 3 + axes[1]) >= v.size())) { - // ??? - vx[k] = static_cast(0.0); - vy[k] = static_cast(0.0); - } else { - vx[k] = v[vi * 3 + axes[0]]; - vy[k] = v[vi * 3 + axes[1]]; - } - } - - // - // area is calculated per face - // - real_t e0x = vx[1] - vx[0]; - real_t e0y = vy[1] - vy[0]; - real_t e1x = vx[2] - vx[1]; - real_t e1y = vy[2] - vy[1]; - real_t cross = e0x * e1y - e0y * e1x; - // std::cout << "axes = " << axes[0] << ", " << axes[1] << "\n"; - // std::cout << "e0x, e0y, e1x, e1y " << e0x << ", " << e0y << ", " - // << e1x << ", " << e1y << "\n"; - - real_t area = (vx[0] * vy[1] - vy[0] * vx[1]) * static_cast(0.5); - // std::cout << "cross " << cross << ", area " << area << "\n"; - // if an internal angle - if (cross * area < static_cast(0.0)) { - // std::cout << "internal \n"; - guess_vert += 1; - // std::cout << "guess vert : " << guess_vert << "\n"; - continue; - } - - // check all other verts in case they are inside this triangle - bool overlap = false; - for (size_t otherVert = 3; otherVert < npolys; ++otherVert) { - size_t idx = (guess_vert + otherVert) % npolys; - - if (idx >= remainingFace.vertex_indices.size()) { - // std::cout << "???0\n"; - // ??? - continue; - } - - size_t ovi = size_t(remainingFace.vertex_indices[idx].v_idx); - - if (((ovi * 3 + axes[0]) >= v.size()) || - ((ovi * 3 + axes[1]) >= v.size())) { - // std::cout << "???1\n"; - // ??? - continue; - } - real_t tx = v[ovi * 3 + axes[0]]; - real_t ty = v[ovi * 3 + axes[1]]; - if (pnpoly(3, vx, vy, tx, ty)) { - // std::cout << "overlap\n"; - overlap = true; - break; - } - } - - if (overlap) { - // std::cout << "overlap2\n"; - guess_vert += 1; - continue; - } - - // this triangle is an ear - { - index_t idx0, idx1, idx2; - idx0.vertex_index = ind[0].v_idx; - idx0.normal_index = ind[0].vn_idx; - idx0.texcoord_index = ind[0].vt_idx; - idx1.vertex_index = ind[1].v_idx; - idx1.normal_index = ind[1].vn_idx; - idx1.texcoord_index = ind[1].vt_idx; - idx2.vertex_index = ind[2].v_idx; - idx2.normal_index = ind[2].vn_idx; - idx2.texcoord_index = ind[2].vt_idx; - - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx2); - - shape->mesh.num_face_vertices.push_back(3); - shape->mesh.material_ids.push_back(material_id); - shape->mesh.smoothing_group_ids.push_back( - face.smoothing_group_id); - } - - // remove v1 from the list - size_t removed_vert_index = (guess_vert + 1) % npolys; - while (removed_vert_index + 1 < npolys) { - remainingFace.vertex_indices[removed_vert_index] = - remainingFace.vertex_indices[removed_vert_index + 1]; - removed_vert_index += 1; - } - remainingFace.vertex_indices.pop_back(); - } - - // std::cout << "remainingFace.vi.size = " << - // remainingFace.vertex_indices.size() << "\n"; - if (remainingFace.vertex_indices.size() == 3) { - i0 = remainingFace.vertex_indices[0]; - i1 = remainingFace.vertex_indices[1]; - i2 = remainingFace.vertex_indices[2]; - { - index_t idx0, idx1, idx2; - idx0.vertex_index = i0.v_idx; - idx0.normal_index = i0.vn_idx; - idx0.texcoord_index = i0.vt_idx; - idx1.vertex_index = i1.v_idx; - idx1.normal_index = i1.vn_idx; - idx1.texcoord_index = i1.vt_idx; - idx2.vertex_index = i2.v_idx; - idx2.normal_index = i2.vn_idx; - idx2.texcoord_index = i2.vt_idx; - - shape->mesh.indices.push_back(idx0); - shape->mesh.indices.push_back(idx1); - shape->mesh.indices.push_back(idx2); - - shape->mesh.num_face_vertices.push_back(3); - shape->mesh.material_ids.push_back(material_id); - shape->mesh.smoothing_group_ids.push_back( - face.smoothing_group_id); - } - } -#endif - } // npolys - } else { - for (size_t k = 0; k < npolys; k++) { - index_t idx; - idx.vertex_index = face.vertex_indices[k].v_idx; - idx.normal_index = face.vertex_indices[k].vn_idx; - idx.texcoord_index = face.vertex_indices[k].vt_idx; - shape->mesh.indices.push_back(idx); - } - - shape->mesh.num_face_vertices.push_back( - static_cast(npolys)); - shape->mesh.material_ids.push_back(material_id); // per face - shape->mesh.smoothing_group_ids.push_back( - face.smoothing_group_id); // per face - } - } - - shape->mesh.tags = tags; - } - - // line - if (!prim_group.lineGroup.empty()) { - // Flatten indices - for (size_t i = 0; i < prim_group.lineGroup.size(); i++) { - for (size_t j = 0; j < prim_group.lineGroup[i].vertex_indices.size(); - j++) { - const vertex_index_t &vi = prim_group.lineGroup[i].vertex_indices[j]; - - index_t idx; - idx.vertex_index = vi.v_idx; - idx.normal_index = vi.vn_idx; - idx.texcoord_index = vi.vt_idx; - - shape->lines.indices.push_back(idx); - } - - shape->lines.num_line_vertices.push_back( - int(prim_group.lineGroup[i].vertex_indices.size())); - } - } - - // points - if (!prim_group.pointsGroup.empty()) { - // Flatten & convert indices - for (size_t i = 0; i < prim_group.pointsGroup.size(); i++) { - for (size_t j = 0; j < prim_group.pointsGroup[i].vertex_indices.size(); - j++) { - const vertex_index_t &vi = prim_group.pointsGroup[i].vertex_indices[j]; - - index_t idx; - idx.vertex_index = vi.v_idx; - idx.normal_index = vi.vn_idx; - idx.texcoord_index = vi.vt_idx; - - shape->points.indices.push_back(idx); - } - } - } - - return true; -} - -// Split a string with specified delimiter character and escape character. -// https://rosettacode.org/wiki/Tokenize_a_string_with_escaping#C.2B.2B -static void SplitString(const std::string &s, char delim, char escape, - std::vector &elems) { - std::string token; - - bool escaping = false; - for (size_t i = 0; i < s.size(); ++i) { - char ch = s[i]; - if (escaping) { - escaping = false; - } else if (ch == escape) { - escaping = true; - continue; - } else if (ch == delim) { - if (!token.empty()) { - elems.push_back(token); - } - token.clear(); - continue; - } - token += ch; - } - - elems.push_back(token); -} - -static std::string JoinPath(const std::string &dir, - const std::string &filename) { - if (dir.empty()) { - return filename; - } else { - // check '/' - char lastChar = *dir.rbegin(); - if (lastChar != '/') { - return dir + std::string("/") + filename; - } else { - return dir + filename; - } - } -} - -void LoadMtl(std::map *material_map, - std::vector *materials, std::istream *inStream, - std::string *warning, std::string *err) { - (void)err; - - // Create a default material anyway. - material_t material; - InitMaterial(&material); - - // Issue 43. `d` wins against `Tr` since `Tr` is not in the MTL specification. - bool has_d = false; - bool has_tr = false; - - // has_kd is used to set a default diffuse value when map_Kd is present - // and Kd is not. - bool has_kd = false; - - std::stringstream warn_ss; - - size_t line_no = 0; - std::string linebuf; - while (inStream->peek() != -1) { - safeGetline(*inStream, linebuf); - line_no++; - - // Trim trailing whitespace. - if (linebuf.size() > 0) { - linebuf = linebuf.substr(0, linebuf.find_last_not_of(" \t") + 1); - } - - // Trim newline '\r\n' or '\n' - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\n') - linebuf.erase(linebuf.size() - 1); - } - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\r') - linebuf.erase(linebuf.size() - 1); - } - - // Skip if empty line. - if (linebuf.empty()) { - continue; - } - - // Skip leading space. - const char *token = linebuf.c_str(); - token += strspn(token, " \t"); - - assert(token); - if (token[0] == '\0') continue; // empty line - - if (token[0] == '#') continue; // comment line - - // new mtl - if ((0 == strncmp(token, "newmtl", 6)) && IS_SPACE((token[6]))) { - // flush previous material. - if (!material.name.empty()) { - material_map->insert(std::pair( - material.name, static_cast(materials->size()))); - materials->push_back(material); - } - - // initial temporary material - InitMaterial(&material); - - has_d = false; - has_tr = false; - - // set new mtl name - token += 7; - { - std::stringstream sstr; - sstr << token; - material.name = sstr.str(); - } - continue; - } - - // ambient - if (token[0] == 'K' && token[1] == 'a' && IS_SPACE((token[2]))) { - token += 2; - real_t r, g, b; - parseReal3(&r, &g, &b, &token); - material.ambient[0] = r; - material.ambient[1] = g; - material.ambient[2] = b; - continue; - } - - // diffuse - if (token[0] == 'K' && token[1] == 'd' && IS_SPACE((token[2]))) { - token += 2; - real_t r, g, b; - parseReal3(&r, &g, &b, &token); - material.diffuse[0] = r; - material.diffuse[1] = g; - material.diffuse[2] = b; - has_kd = true; - continue; - } - - // specular - if (token[0] == 'K' && token[1] == 's' && IS_SPACE((token[2]))) { - token += 2; - real_t r, g, b; - parseReal3(&r, &g, &b, &token); - material.specular[0] = r; - material.specular[1] = g; - material.specular[2] = b; - continue; - } - - // transmittance - if ((token[0] == 'K' && token[1] == 't' && IS_SPACE((token[2]))) || - (token[0] == 'T' && token[1] == 'f' && IS_SPACE((token[2])))) { - token += 2; - real_t r, g, b; - parseReal3(&r, &g, &b, &token); - material.transmittance[0] = r; - material.transmittance[1] = g; - material.transmittance[2] = b; - continue; - } - - // ior(index of refraction) - if (token[0] == 'N' && token[1] == 'i' && IS_SPACE((token[2]))) { - token += 2; - material.ior = parseReal(&token); - continue; - } - - // emission - if (token[0] == 'K' && token[1] == 'e' && IS_SPACE(token[2])) { - token += 2; - real_t r, g, b; - parseReal3(&r, &g, &b, &token); - material.emission[0] = r; - material.emission[1] = g; - material.emission[2] = b; - continue; - } - - // shininess - if (token[0] == 'N' && token[1] == 's' && IS_SPACE(token[2])) { - token += 2; - material.shininess = parseReal(&token); - continue; - } - - // illum model - if (0 == strncmp(token, "illum", 5) && IS_SPACE(token[5])) { - token += 6; - material.illum = parseInt(&token); - continue; - } - - // dissolve - if ((token[0] == 'd' && IS_SPACE(token[1]))) { - token += 1; - material.dissolve = parseReal(&token); - - if (has_tr) { - warn_ss << "Both `d` and `Tr` parameters defined for \"" - << material.name - << "\". Use the value of `d` for dissolve (line " << line_no - << " in .mtl.)\n"; - } - has_d = true; - continue; - } - if (token[0] == 'T' && token[1] == 'r' && IS_SPACE(token[2])) { - token += 2; - if (has_d) { - // `d` wins. Ignore `Tr` value. - warn_ss << "Both `d` and `Tr` parameters defined for \"" - << material.name - << "\". Use the value of `d` for dissolve (line " << line_no - << " in .mtl.)\n"; - } else { - // We invert value of Tr(assume Tr is in range [0, 1]) - // NOTE: Interpretation of Tr is application(exporter) dependent. For - // some application(e.g. 3ds max obj exporter), Tr = d(Issue 43) - material.dissolve = static_cast(1.0) - parseReal(&token); - } - has_tr = true; - continue; - } - - // PBR: roughness - if (token[0] == 'P' && token[1] == 'r' && IS_SPACE(token[2])) { - token += 2; - material.roughness = parseReal(&token); - continue; - } - - // PBR: metallic - if (token[0] == 'P' && token[1] == 'm' && IS_SPACE(token[2])) { - token += 2; - material.metallic = parseReal(&token); - continue; - } - - // PBR: sheen - if (token[0] == 'P' && token[1] == 's' && IS_SPACE(token[2])) { - token += 2; - material.sheen = parseReal(&token); - continue; - } - - // PBR: clearcoat thickness - if (token[0] == 'P' && token[1] == 'c' && IS_SPACE(token[2])) { - token += 2; - material.clearcoat_thickness = parseReal(&token); - continue; - } - - // PBR: clearcoat roughness - if ((0 == strncmp(token, "Pcr", 3)) && IS_SPACE(token[3])) { - token += 4; - material.clearcoat_roughness = parseReal(&token); - continue; - } - - // PBR: anisotropy - if ((0 == strncmp(token, "aniso", 5)) && IS_SPACE(token[5])) { - token += 6; - material.anisotropy = parseReal(&token); - continue; - } - - // PBR: anisotropy rotation - if ((0 == strncmp(token, "anisor", 6)) && IS_SPACE(token[6])) { - token += 7; - material.anisotropy_rotation = parseReal(&token); - continue; - } - - // ambient texture - if ((0 == strncmp(token, "map_Ka", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.ambient_texname), - &(material.ambient_texopt), token); - continue; - } - - // diffuse texture - if ((0 == strncmp(token, "map_Kd", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.diffuse_texname), - &(material.diffuse_texopt), token); - - // Set a decent diffuse default value if a diffuse texture is specified - // without a matching Kd value. - if (!has_kd) { - material.diffuse[0] = static_cast(0.6); - material.diffuse[1] = static_cast(0.6); - material.diffuse[2] = static_cast(0.6); - } - - continue; - } - - // specular texture - if ((0 == strncmp(token, "map_Ks", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.specular_texname), - &(material.specular_texopt), token); - continue; - } - - // specular highlight texture - if ((0 == strncmp(token, "map_Ns", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.specular_highlight_texname), - &(material.specular_highlight_texopt), token); - continue; - } - - // bump texture - if ((0 == strncmp(token, "map_bump", 8)) && IS_SPACE(token[8])) { - token += 9; - ParseTextureNameAndOption(&(material.bump_texname), - &(material.bump_texopt), token); - continue; - } - - // bump texture - if ((0 == strncmp(token, "map_Bump", 8)) && IS_SPACE(token[8])) { - token += 9; - ParseTextureNameAndOption(&(material.bump_texname), - &(material.bump_texopt), token); - continue; - } - - // bump texture - if ((0 == strncmp(token, "bump", 4)) && IS_SPACE(token[4])) { - token += 5; - ParseTextureNameAndOption(&(material.bump_texname), - &(material.bump_texopt), token); - continue; - } - - // alpha texture - if ((0 == strncmp(token, "map_d", 5)) && IS_SPACE(token[5])) { - token += 6; - material.alpha_texname = token; - ParseTextureNameAndOption(&(material.alpha_texname), - &(material.alpha_texopt), token); - continue; - } - - // displacement texture - if ((0 == strncmp(token, "disp", 4)) && IS_SPACE(token[4])) { - token += 5; - ParseTextureNameAndOption(&(material.displacement_texname), - &(material.displacement_texopt), token); - continue; - } - - // reflection map - if ((0 == strncmp(token, "refl", 4)) && IS_SPACE(token[4])) { - token += 5; - ParseTextureNameAndOption(&(material.reflection_texname), - &(material.reflection_texopt), token); - continue; - } - - // PBR: roughness texture - if ((0 == strncmp(token, "map_Pr", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.roughness_texname), - &(material.roughness_texopt), token); - continue; - } - - // PBR: metallic texture - if ((0 == strncmp(token, "map_Pm", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.metallic_texname), - &(material.metallic_texopt), token); - continue; - } - - // PBR: sheen texture - if ((0 == strncmp(token, "map_Ps", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.sheen_texname), - &(material.sheen_texopt), token); - continue; - } - - // PBR: emissive texture - if ((0 == strncmp(token, "map_Ke", 6)) && IS_SPACE(token[6])) { - token += 7; - ParseTextureNameAndOption(&(material.emissive_texname), - &(material.emissive_texopt), token); - continue; - } - - // PBR: normal map texture - if ((0 == strncmp(token, "norm", 4)) && IS_SPACE(token[4])) { - token += 5; - ParseTextureNameAndOption(&(material.normal_texname), - &(material.normal_texopt), token); - continue; - } - - // unknown parameter - const char *_space = strchr(token, ' '); - if (!_space) { - _space = strchr(token, '\t'); - } - if (_space) { - std::ptrdiff_t len = _space - token; - std::string key(token, static_cast(len)); - std::string value = _space + 1; - material.unknown_parameter.insert( - std::pair(key, value)); - } - } - // flush last material. - material_map->insert(std::pair( - material.name, static_cast(materials->size()))); - materials->push_back(material); - - if (warning) { - (*warning) = warn_ss.str(); - } -} - -bool MaterialFileReader::operator()(const std::string &matId, - std::vector *materials, - std::map *matMap, - std::string *warn, std::string *err) { - if (!m_mtlBaseDir.empty()) { -#ifdef _WIN32 - char sep = ';'; -#else - char sep = ':'; -#endif - - // https://stackoverflow.com/questions/5167625/splitting-a-c-stdstring-using-tokens-e-g - std::vector paths; - std::istringstream f(m_mtlBaseDir); - - std::string s; - while (getline(f, s, sep)) { - paths.push_back(s); - } - - for (size_t i = 0; i < paths.size(); i++) { - std::string filepath = JoinPath(paths[i], matId); - - std::ifstream matIStream(filepath.c_str()); - if (matIStream) { - LoadMtl(matMap, materials, &matIStream, warn, err); - - return true; - } - } - - std::stringstream ss; - ss << "Material file [ " << matId - << " ] not found in a path : " << m_mtlBaseDir << "\n"; - if (warn) { - (*warn) += ss.str(); - } - return false; - - } else { - std::string filepath = matId; - std::ifstream matIStream(filepath.c_str()); - if (matIStream) { - LoadMtl(matMap, materials, &matIStream, warn, err); - - return true; - } - - std::stringstream ss; - ss << "Material file [ " << filepath - << " ] not found in a path : " << m_mtlBaseDir << "\n"; - if (warn) { - (*warn) += ss.str(); - } - - return false; - } -} - -bool MaterialStreamReader::operator()(const std::string &matId, - std::vector *materials, - std::map *matMap, - std::string *warn, std::string *err) { - (void)err; - (void)matId; - if (!m_inStream) { - std::stringstream ss; - ss << "Material stream in error state. \n"; - if (warn) { - (*warn) += ss.str(); - } - return false; - } - - LoadMtl(matMap, materials, &m_inStream, warn, err); - - return true; -} - -bool LoadObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, std::string *warn, - std::string *err, const char *filename, const char *mtl_basedir, - bool triangulate, bool default_vcols_fallback) { - attrib->vertices.clear(); - attrib->normals.clear(); - attrib->texcoords.clear(); - attrib->colors.clear(); - shapes->clear(); - - std::stringstream errss; - - std::ifstream ifs(filename); - if (!ifs) { - errss << "Cannot open file [" << filename << "]\n"; - if (err) { - (*err) = errss.str(); - } - return false; - } - - std::string baseDir = mtl_basedir ? mtl_basedir : ""; - if (!baseDir.empty()) { -#ifndef _WIN32 - const char dirsep = '/'; -#else - const char dirsep = '\\'; -#endif - if (baseDir[baseDir.length() - 1] != dirsep) baseDir += dirsep; - } - MaterialFileReader matFileReader(baseDir); - - return LoadObj(attrib, shapes, materials, warn, err, &ifs, &matFileReader, - triangulate, default_vcols_fallback); -} - -bool LoadObj(attrib_t *attrib, std::vector *shapes, - std::vector *materials, std::string *warn, - std::string *err, std::istream *inStream, - MaterialReader *readMatFn /*= NULL*/, bool triangulate, - bool default_vcols_fallback) { - std::stringstream errss; - - std::vector v; - std::vector vn; - std::vector vt; - std::vector vc; - std::vector vw; - std::vector tags; - PrimGroup prim_group; - std::string name; - - // material - std::map material_map; - int material = -1; - - // smoothing group id - unsigned int current_smoothing_id = - 0; // Initial value. 0 means no smoothing. - - int greatest_v_idx = -1; - int greatest_vn_idx = -1; - int greatest_vt_idx = -1; - - shape_t shape; - - bool found_all_colors = true; - - size_t line_num = 0; - std::string linebuf; - while (inStream->peek() != -1) { - safeGetline(*inStream, linebuf); - - line_num++; - - // Trim newline '\r\n' or '\n' - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\n') - linebuf.erase(linebuf.size() - 1); - } - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\r') - linebuf.erase(linebuf.size() - 1); - } - - // Skip if empty line. - if (linebuf.empty()) { - continue; - } - - // Skip leading space. - const char *token = linebuf.c_str(); - token += strspn(token, " \t"); - - assert(token); - if (token[0] == '\0') continue; // empty line - - if (token[0] == '#') continue; // comment line - - // vertex - if (token[0] == 'v' && IS_SPACE((token[1]))) { - token += 2; - real_t x, y, z; - real_t r, g, b; - - found_all_colors &= parseVertexWithColor(&x, &y, &z, &r, &g, &b, &token); - - v.push_back(x); - v.push_back(y); - v.push_back(z); - - if (found_all_colors || default_vcols_fallback) { - vc.push_back(r); - vc.push_back(g); - vc.push_back(b); - } - - continue; - } - - // normal - if (token[0] == 'v' && token[1] == 'n' && IS_SPACE((token[2]))) { - token += 3; - real_t x, y, z; - parseReal3(&x, &y, &z, &token); - vn.push_back(x); - vn.push_back(y); - vn.push_back(z); - continue; - } - - // texcoord - if (token[0] == 'v' && token[1] == 't' && IS_SPACE((token[2]))) { - token += 3; - real_t x, y; - parseReal2(&x, &y, &token); - vt.push_back(x); - vt.push_back(y); - continue; - } - - // skin weight. tinyobj extension - if (token[0] == 'v' && token[1] == 'w' && IS_SPACE((token[2]))) { - token += 3; - - // vw ... - // example: - // vw 0 0 0.25 1 0.25 2 0.5 - - // TODO(syoyo): Add syntax check - int vid = 0; - vid = parseInt(&token); - - skin_weight_t sw; - - sw.vertex_id = vid; - - while (!IS_NEW_LINE(token[0])) { - real_t j, w; - // joint_id should not be negative, weight may be negative - // TODO(syoyo): # of elements check - parseReal2(&j, &w, &token, -1.0); - - if (j < static_cast(0)) { - if (err) { - std::stringstream ss; - ss << "Failed parse `vw' line. joint_id is negative. " - "line " - << line_num << ".)\n"; - (*err) += ss.str(); - } - return false; - } - - joint_and_weight_t jw; - - jw.joint_id = int(j); - jw.weight = w; - - sw.weightValues.push_back(jw); - - size_t n = strspn(token, " \t\r"); - token += n; - } - - vw.push_back(sw); - } - - // line - if (token[0] == 'l' && IS_SPACE((token[1]))) { - token += 2; - - __line_t line; - - while (!IS_NEW_LINE(token[0])) { - vertex_index_t vi; - if (!parseTriple(&token, static_cast(v.size() / 3), - static_cast(vn.size() / 3), - static_cast(vt.size() / 2), &vi)) { - if (err) { - std::stringstream ss; - ss << "Failed parse `l' line(e.g. zero value for vertex index. " - "line " - << line_num << ".)\n"; - (*err) += ss.str(); - } - return false; - } - - line.vertex_indices.push_back(vi); - - size_t n = strspn(token, " \t\r"); - token += n; - } - - prim_group.lineGroup.push_back(line); - - continue; - } - - // points - if (token[0] == 'p' && IS_SPACE((token[1]))) { - token += 2; - - __points_t pts; - - while (!IS_NEW_LINE(token[0])) { - vertex_index_t vi; - if (!parseTriple(&token, static_cast(v.size() / 3), - static_cast(vn.size() / 3), - static_cast(vt.size() / 2), &vi)) { - if (err) { - std::stringstream ss; - ss << "Failed parse `p' line(e.g. zero value for vertex index. " - "line " - << line_num << ".)\n"; - (*err) += ss.str(); - } - return false; - } - - pts.vertex_indices.push_back(vi); - - size_t n = strspn(token, " \t\r"); - token += n; - } - - prim_group.pointsGroup.push_back(pts); - - continue; - } - - // face - if (token[0] == 'f' && IS_SPACE((token[1]))) { - token += 2; - token += strspn(token, " \t"); - - face_t face; - - face.smoothing_group_id = current_smoothing_id; - face.vertex_indices.reserve(3); - - while (!IS_NEW_LINE(token[0])) { - vertex_index_t vi; - if (!parseTriple(&token, static_cast(v.size() / 3), - static_cast(vn.size() / 3), - static_cast(vt.size() / 2), &vi)) { - if (err) { - std::stringstream ss; - ss << "Failed parse `f' line(e.g. zero value for face index. line " - << line_num << ".)\n"; - (*err) += ss.str(); - } - return false; - } - - greatest_v_idx = greatest_v_idx > vi.v_idx ? greatest_v_idx : vi.v_idx; - greatest_vn_idx = - greatest_vn_idx > vi.vn_idx ? greatest_vn_idx : vi.vn_idx; - greatest_vt_idx = - greatest_vt_idx > vi.vt_idx ? greatest_vt_idx : vi.vt_idx; - - face.vertex_indices.push_back(vi); - size_t n = strspn(token, " \t\r"); - token += n; - } - - // replace with emplace_back + std::move on C++11 - prim_group.faceGroup.push_back(face); - - continue; - } - - // use mtl - if ((0 == strncmp(token, "usemtl", 6))) { - token += 6; - std::string namebuf = parseString(&token); - - int newMaterialId = -1; - std::map::const_iterator it = - material_map.find(namebuf); - if (it != material_map.end()) { - newMaterialId = it->second; - } else { - // { error!! material not found } - if (warn) { - (*warn) += "material [ '" + namebuf + "' ] not found in .mtl\n"; - } - } - - if (newMaterialId != material) { - // Create per-face material. Thus we don't add `shape` to `shapes` at - // this time. - // just clear `faceGroup` after `exportGroupsToShape()` call. - exportGroupsToShape(&shape, prim_group, tags, material, name, - triangulate, v, warn); - prim_group.faceGroup.clear(); - material = newMaterialId; - } - - continue; - } - - // load mtl - if ((0 == strncmp(token, "mtllib", 6)) && IS_SPACE((token[6]))) { - if (readMatFn) { - token += 7; - - std::vector filenames; - SplitString(std::string(token), ' ', '\\', filenames); - - if (filenames.empty()) { - if (warn) { - std::stringstream ss; - ss << "Looks like empty filename for mtllib. Use default " - "material (line " - << line_num << ".)\n"; - - (*warn) += ss.str(); - } - } else { - bool found = false; - for (size_t s = 0; s < filenames.size(); s++) { - std::string warn_mtl; - std::string err_mtl; - bool ok = (*readMatFn)(filenames[s].c_str(), materials, - &material_map, &warn_mtl, &err_mtl); - if (warn && (!warn_mtl.empty())) { - (*warn) += warn_mtl; - } - - if (err && (!err_mtl.empty())) { - (*err) += err_mtl; - } - - if (ok) { - found = true; - break; - } - } - - if (!found) { - if (warn) { - (*warn) += - "Failed to load material file(s). Use default " - "material.\n"; - } - } - } - } - - continue; - } - - // group name - if (token[0] == 'g' && IS_SPACE((token[1]))) { - // flush previous face group. - bool ret = exportGroupsToShape(&shape, prim_group, tags, material, name, - triangulate, v, warn); - (void)ret; // return value not used. - - if (shape.mesh.indices.size() > 0) { - shapes->push_back(shape); - } - - shape = shape_t(); - - // material = -1; - prim_group.clear(); - - std::vector names; - - while (!IS_NEW_LINE(token[0])) { - std::string str = parseString(&token); - names.push_back(str); - token += strspn(token, " \t\r"); // skip tag - } - - // names[0] must be 'g' - - if (names.size() < 2) { - // 'g' with empty names - if (warn) { - std::stringstream ss; - ss << "Empty group name. line: " << line_num << "\n"; - (*warn) += ss.str(); - name = ""; - } - } else { - std::stringstream ss; - ss << names[1]; - - // tinyobjloader does not support multiple groups for a primitive. - // Currently we concatinate multiple group names with a space to get - // single group name. - - for (size_t i = 2; i < names.size(); i++) { - ss << " " << names[i]; - } - - name = ss.str(); - } - - continue; - } - - // object name - if (token[0] == 'o' && IS_SPACE((token[1]))) { - // flush previous face group. - bool ret = exportGroupsToShape(&shape, prim_group, tags, material, name, - triangulate, v, warn); - (void)ret; // return value not used. - - if (shape.mesh.indices.size() > 0 || shape.lines.indices.size() > 0 || - shape.points.indices.size() > 0) { - shapes->push_back(shape); - } - - // material = -1; - prim_group.clear(); - shape = shape_t(); - - // @todo { multiple object name? } - token += 2; - std::stringstream ss; - ss << token; - name = ss.str(); - - continue; - } - - if (token[0] == 't' && IS_SPACE(token[1])) { - const int max_tag_nums = 8192; // FIXME(syoyo): Parameterize. - tag_t tag; - - token += 2; - - tag.name = parseString(&token); - - tag_sizes ts = parseTagTriple(&token); - - if (ts.num_ints < 0) { - ts.num_ints = 0; - } - if (ts.num_ints > max_tag_nums) { - ts.num_ints = max_tag_nums; - } - - if (ts.num_reals < 0) { - ts.num_reals = 0; - } - if (ts.num_reals > max_tag_nums) { - ts.num_reals = max_tag_nums; - } - - if (ts.num_strings < 0) { - ts.num_strings = 0; - } - if (ts.num_strings > max_tag_nums) { - ts.num_strings = max_tag_nums; - } - - tag.intValues.resize(static_cast(ts.num_ints)); - - for (size_t i = 0; i < static_cast(ts.num_ints); ++i) { - tag.intValues[i] = parseInt(&token); - } - - tag.floatValues.resize(static_cast(ts.num_reals)); - for (size_t i = 0; i < static_cast(ts.num_reals); ++i) { - tag.floatValues[i] = parseReal(&token); - } - - tag.stringValues.resize(static_cast(ts.num_strings)); - for (size_t i = 0; i < static_cast(ts.num_strings); ++i) { - tag.stringValues[i] = parseString(&token); - } - - tags.push_back(tag); - - continue; - } - - if (token[0] == 's' && IS_SPACE(token[1])) { - // smoothing group id - token += 2; - - // skip space. - token += strspn(token, " \t"); // skip space - - if (token[0] == '\0') { - continue; - } - - if (token[0] == '\r' || token[1] == '\n') { - continue; - } - - if (strlen(token) >= 3 && token[0] == 'o' && token[1] == 'f' && - token[2] == 'f') { - current_smoothing_id = 0; - } else { - // assume number - int smGroupId = parseInt(&token); - if (smGroupId < 0) { - // parse error. force set to 0. - // FIXME(syoyo): Report warning. - current_smoothing_id = 0; - } else { - current_smoothing_id = static_cast(smGroupId); - } - } - - continue; - } // smoothing group id - - // Ignore unknown command. - } - - // not all vertices have colors, no default colors desired? -> clear colors - if (!found_all_colors && !default_vcols_fallback) { - vc.clear(); - } - - if (greatest_v_idx >= static_cast(v.size() / 3)) { - if (warn) { - std::stringstream ss; - ss << "Vertex indices out of bounds (line " << line_num << ".)\n\n"; - (*warn) += ss.str(); - } - } - if (greatest_vn_idx >= static_cast(vn.size() / 3)) { - if (warn) { - std::stringstream ss; - ss << "Vertex normal indices out of bounds (line " << line_num << ".)\n\n"; - (*warn) += ss.str(); - } - } - if (greatest_vt_idx >= static_cast(vt.size() / 2)) { - if (warn) { - std::stringstream ss; - ss << "Vertex texcoord indices out of bounds (line " << line_num << ".)\n\n"; - (*warn) += ss.str(); - } - } - - bool ret = exportGroupsToShape(&shape, prim_group, tags, material, name, - triangulate, v, warn); - // exportGroupsToShape return false when `usemtl` is called in the last - // line. - // we also add `shape` to `shapes` when `shape.mesh` has already some - // faces(indices) - if (ret || shape.mesh.indices - .size()) { // FIXME(syoyo): Support other prims(e.g. lines) - shapes->push_back(shape); - } - prim_group.clear(); // for safety - - if (err) { - (*err) += errss.str(); - } - - attrib->vertices.swap(v); - attrib->vertex_weights.swap(v); - attrib->normals.swap(vn); - attrib->texcoords.swap(vt); - attrib->texcoord_ws.swap(vt); - attrib->colors.swap(vc); - attrib->skin_weights.swap(vw); - - return true; -} - -bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, - void *user_data /*= NULL*/, - MaterialReader *readMatFn /*= NULL*/, - std::string *warn, /* = NULL*/ - std::string *err /*= NULL*/) { - std::stringstream errss; - - // material - std::map material_map; - int material_id = -1; // -1 = invalid - - std::vector indices; - std::vector materials; - std::vector names; - names.reserve(2); - std::vector names_out; - - std::string linebuf; - while (inStream.peek() != -1) { - safeGetline(inStream, linebuf); - - // Trim newline '\r\n' or '\n' - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\n') - linebuf.erase(linebuf.size() - 1); - } - if (linebuf.size() > 0) { - if (linebuf[linebuf.size() - 1] == '\r') - linebuf.erase(linebuf.size() - 1); - } - - // Skip if empty line. - if (linebuf.empty()) { - continue; - } - - // Skip leading space. - const char *token = linebuf.c_str(); - token += strspn(token, " \t"); - - assert(token); - if (token[0] == '\0') continue; // empty line - - if (token[0] == '#') continue; // comment line - - // vertex - if (token[0] == 'v' && IS_SPACE((token[1]))) { - token += 2; - // TODO(syoyo): Support parsing vertex color extension. - real_t x, y, z, w; // w is optional. default = 1.0 - parseV(&x, &y, &z, &w, &token); - if (callback.vertex_cb) { - callback.vertex_cb(user_data, x, y, z, w); - } - continue; - } - - // normal - if (token[0] == 'v' && token[1] == 'n' && IS_SPACE((token[2]))) { - token += 3; - real_t x, y, z; - parseReal3(&x, &y, &z, &token); - if (callback.normal_cb) { - callback.normal_cb(user_data, x, y, z); - } - continue; - } - - // texcoord - if (token[0] == 'v' && token[1] == 't' && IS_SPACE((token[2]))) { - token += 3; - real_t x, y, z; // y and z are optional. default = 0.0 - parseReal3(&x, &y, &z, &token); - if (callback.texcoord_cb) { - callback.texcoord_cb(user_data, x, y, z); - } - continue; - } - - // face - if (token[0] == 'f' && IS_SPACE((token[1]))) { - token += 2; - token += strspn(token, " \t"); - - indices.clear(); - while (!IS_NEW_LINE(token[0])) { - vertex_index_t vi = parseRawTriple(&token); - - index_t idx; - idx.vertex_index = vi.v_idx; - idx.normal_index = vi.vn_idx; - idx.texcoord_index = vi.vt_idx; - - indices.push_back(idx); - size_t n = strspn(token, " \t\r"); - token += n; - } - - if (callback.index_cb && indices.size() > 0) { - callback.index_cb(user_data, &indices.at(0), - static_cast(indices.size())); - } - - continue; - } - - // use mtl - if ((0 == strncmp(token, "usemtl", 6)) && IS_SPACE((token[6]))) { - token += 7; - std::stringstream ss; - ss << token; - std::string namebuf = ss.str(); - - int newMaterialId = -1; - std::map::const_iterator it = - material_map.find(namebuf); - if (it != material_map.end()) { - newMaterialId = it->second; - } else { - // { warn!! material not found } - if (warn && (!callback.usemtl_cb)) { - (*warn) += "material [ " + namebuf + " ] not found in .mtl\n"; - } - } - - if (newMaterialId != material_id) { - material_id = newMaterialId; - } - - if (callback.usemtl_cb) { - callback.usemtl_cb(user_data, namebuf.c_str(), material_id); - } - - continue; - } - - // load mtl - if ((0 == strncmp(token, "mtllib", 6)) && IS_SPACE((token[6]))) { - if (readMatFn) { - token += 7; - - std::vector filenames; - SplitString(std::string(token), ' ', '\\', filenames); - - if (filenames.empty()) { - if (warn) { - (*warn) += - "Looks like empty filename for mtllib. Use default " - "material. \n"; - } - } else { - bool found = false; - for (size_t s = 0; s < filenames.size(); s++) { - std::string warn_mtl; - std::string err_mtl; - bool ok = (*readMatFn)(filenames[s].c_str(), &materials, - &material_map, &warn_mtl, &err_mtl); - - if (warn && (!warn_mtl.empty())) { - (*warn) += warn_mtl; // This should be warn message. - } - - if (err && (!err_mtl.empty())) { - (*err) += err_mtl; - } - - if (ok) { - found = true; - break; - } - } - - if (!found) { - if (warn) { - (*warn) += - "Failed to load material file(s). Use default " - "material.\n"; - } - } else { - if (callback.mtllib_cb) { - callback.mtllib_cb(user_data, &materials.at(0), - static_cast(materials.size())); - } - } - } - } - - continue; - } - - // group name - if (token[0] == 'g' && IS_SPACE((token[1]))) { - names.clear(); - - while (!IS_NEW_LINE(token[0])) { - std::string str = parseString(&token); - names.push_back(str); - token += strspn(token, " \t\r"); // skip tag - } - - assert(names.size() > 0); - - if (callback.group_cb) { - if (names.size() > 1) { - // create const char* array. - names_out.resize(names.size() - 1); - for (size_t j = 0; j < names_out.size(); j++) { - names_out[j] = names[j + 1].c_str(); - } - callback.group_cb(user_data, &names_out.at(0), - static_cast(names_out.size())); - - } else { - callback.group_cb(user_data, NULL, 0); - } - } - - continue; - } - - // object name - if (token[0] == 'o' && IS_SPACE((token[1]))) { - // @todo { multiple object name? } - token += 2; - - std::stringstream ss; - ss << token; - std::string object_name = ss.str(); - - if (callback.object_cb) { - callback.object_cb(user_data, object_name.c_str()); - } - - continue; - } - -#if 0 // @todo - if (token[0] == 't' && IS_SPACE(token[1])) { - tag_t tag; - - token += 2; - std::stringstream ss; - ss << token; - tag.name = ss.str(); - - token += tag.name.size() + 1; - - tag_sizes ts = parseTagTriple(&token); - - tag.intValues.resize(static_cast(ts.num_ints)); - - for (size_t i = 0; i < static_cast(ts.num_ints); ++i) { - tag.intValues[i] = atoi(token); - token += strcspn(token, "/ \t\r") + 1; - } - - tag.floatValues.resize(static_cast(ts.num_reals)); - for (size_t i = 0; i < static_cast(ts.num_reals); ++i) { - tag.floatValues[i] = parseReal(&token); - token += strcspn(token, "/ \t\r") + 1; - } - - tag.stringValues.resize(static_cast(ts.num_strings)); - for (size_t i = 0; i < static_cast(ts.num_strings); ++i) { - std::stringstream ss; - ss << token; - tag.stringValues[i] = ss.str(); - token += tag.stringValues[i].size() + 1; - } - - tags.push_back(tag); - } -#endif - - // Ignore unknown command. - } - - if (err) { - (*err) += errss.str(); - } - - return true; -} - -bool ObjReader::ParseFromFile(const std::string &filename, - const ObjReaderConfig &config) { - std::string mtl_search_path; - - if (config.mtl_search_path.empty()) { - // - // split at last '/'(for unixish system) or '\\'(for windows) to get - // the base directory of .obj file - // - size_t pos = filename.find_last_of("/\\"); - if (pos != std::string::npos) { - mtl_search_path = filename.substr(0, pos); - } - } else { - mtl_search_path = config.mtl_search_path; - } - - valid_ = LoadObj(&attrib_, &shapes_, &materials_, &warning_, &error_, - filename.c_str(), mtl_search_path.c_str(), - config.triangulate, config.vertex_color); - - return valid_; -} - -bool ObjReader::ParseFromString(const std::string &obj_text, - const std::string &mtl_text, - const ObjReaderConfig &config) { - std::stringbuf obj_buf(obj_text); - std::stringbuf mtl_buf(mtl_text); - - std::istream obj_ifs(&obj_buf); - std::istream mtl_ifs(&mtl_buf); - - MaterialStreamReader mtl_ss(mtl_ifs); - - valid_ = LoadObj(&attrib_, &shapes_, &materials_, &warning_, &error_, - &obj_ifs, &mtl_ss, config.triangulate, config.vertex_color); - - return valid_; -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif -} // namespace tinyobj - -#endif diff --git a/externals/tinyobjloader/tinyobjloader-config.cmake.in b/externals/tinyobjloader/tinyobjloader-config.cmake.in deleted file mode 100644 index 91f01b0..0000000 --- a/externals/tinyobjloader/tinyobjloader-config.cmake.in +++ /dev/null @@ -1,9 +0,0 @@ -@PACKAGE_INIT@ - -set(TINYOBJLOADER_VERSION "@TINYOBJLOADER_VERSION@") - -set_and_check(TINYOBJLOADER_INCLUDE_DIRS "@PACKAGE_TINYOBJLOADER_INCLUDE_DIR@") -set_and_check(TINYOBJLOADER_LIBRARY_DIRS "@PACKAGE_TINYOBJLOADER_LIBRARY_DIR@") -set(TINYOBJLOADER_LIBRARIES @LIBRARY_NAME@) - -include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") diff --git a/externals/tinyobjloader/tinyobjloader.pc.in b/externals/tinyobjloader/tinyobjloader.pc.in deleted file mode 100644 index 048a287..0000000 --- a/externals/tinyobjloader/tinyobjloader.pc.in +++ /dev/null @@ -1,15 +0,0 @@ -# Generated by CMake @CMAKE_VERSION@ for @PROJECT_NAME@. Any changes to this -# file will be overwritten by the next CMake run. The input file was -# tinyobjloader.pc.in. - -prefix=@CMAKE_INSTALL_PREFIX@ -exec_prefix=${prefix} -libdir=${prefix}/@TINYOBJLOADER_LIBRARY_DIR@ -includedir=${prefix}/@TINYOBJLOADER_INCLUDE_DIR@ - -Name: @PROJECT_NAME@ -Description: Tiny but powerful single file wavefront obj loader -URL: https://syoyo.github.io/tinyobjloader/ -Version: @TINYOBJLOADER_VERSION@ -Libs: -L${libdir} -l@LIBRARY_NAME@ -Cflags: -I${includedir} diff --git a/externals/tinyobjloader/tools/windows/premake5.exe b/externals/tinyobjloader/tools/windows/premake5.exe deleted file mode 100644 index 51c05a80b452f74326b5bd768397c94ca3ff830c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912896 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

52S<r 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

}#W+yScl~^mFxU@*jMycgQMdb9B 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�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%0AE5 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%0AS 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
~>Mxmc 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

    Nx8eOg?!`S6wzP}N8HvAYlO5)PJr;Ub< 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%0D2R)wMp8H680^NZgMNgzV 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%0D3ITsK~goO2iP8swbo&OajO+{OG8 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

    Ra<9kIAChwF06HE57M64LMB(m|rM;{$G5%HG7uG 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

    W6=hmftK{#N?y4 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%0AGvA`tkhx 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

    v>sRIh2W`C+rpDanJ<_9mj26ey+vmy?^DcFGh%8 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%0AB*AOBpQ{wQ#xTBi8{IBHIB>hNemwK+8c z@K^snrg;BR)#2qC-oN|4Bi;J2C9K&IfeY?+pn+ot;YZC*;)v8EOyRGN3}JsH0P~y~ zPR4Ro&Ul>91p8w$+ZfvOaw(QS4#ciAy~t9GQ*|rlzdYd%xJ)4)3BbjHDh@`cN2{B%6pUT zXk9G9cnis6hEZY0PfyRhmg!P@)0D^UuzvZ|c=qXVTHU1sp6|$dv}Yu(I?{`JoI8p6 zA4e$WO(V@c$7?M)_(Ya3esaG&MYqpEKX>!R0%OZE2m3P>UCkF~Ol?QTGDg)ouCo5@ zk9{VNqvtyps5?jf;>!E9+iJ*?E)p*s>qf@#ufMH@vpm*hXzoSEaKtSi__Y<=nbTfm zss}^a_s%{9-Dk4DU9Bet{B{BY=h!iQym(A8#%uz=5*&ZoJ+&#;;28=%YwdGpYh4I-+QjwoEp z8=ps@{R;Q7P6HuR2>V?HyU>wE&G~LqAReeZoT_J?0(;sh~9xCh_P)+W7{gm zyd{l!s~G2&G|sJJ%wf`)!;1MUN%L1K=3^zz$4bo8N}7L`o_0w>y?u|P{g+mzeq!t! z1>m}BUeyoVrRYUJ&c3J~Ebv47mwgx~qpdpJ)i+KDTNb-#i^(6vJl*F0F#UNO?8CfB zqx?rwUt4>uoh=Z@tQ_UEER3H_8b8@omTx{ur)DshP^^7ha9{(tv0j%A=}9}UZvcB4 zp8NCMD?`~WaI`$1&rI3N)E_FnIt&|f@EU2_KI9h|2G-$^;Xx}y*>#pug zp4nWn0pl|lxINGm9yKIA7Ffo3oAU-!hOaYXmh~a{%}aCmK;F#QrcVf-**b&Xd^CzyF9ihePo3J#+Ze2IaAROfcKYk<_7k6|6U!*OQ-*qS!UwtalvwWbRth z+_hBdn%%Z-&1u|tr5{zidEK^yaqUta?n~#F6oFntLvhHXo~CfU?-@6;RX9%V(vwn@ zt^@78nR_L3Pcp{0J=_rRvv6$aW=>a|G0M9TjnsNa$#JBa{Wy8 z+&oJNOllK}4@UMk#UF_XhaV>M+&NW$N|7c4Vv6v&$`1zc8Y$n?;kj^oPjk4}ja%?l z5xy^TWFX9v421=Z*}Z`N!R%<4Wev9@v{^9-0qJc>bPc zZC_LPOZ#V#ZD9oNXxEPpZrBfB#6+TBOn>@h`5~CYcYFpe=}%|2hQWdMk@#YRx$F-X zrNyG#*oWERO=Fj2!5&c|c&xz)Q~3JHY?wT2C`P%CBxCrEjNzhF`~{i{%w(Bc!YVk``jO83Xj`f(r-~)M?b&! zn+Ljg3c)QE#?s|-Ov%zc1WOGVM?+@V_#9>k-ucBG|K-7Yn5I%N=Kg3L8S9_1>q%qR zs}tF4(ZlP$_-D=xl(}C9SXLq!dq(u7B;M^{{?st6otbsk5T3nhAf!#ryat@6*{-Qj zH;T{hp6E+`3oL`VA4FoSyZue!ltos;&{~l=vBm&Ob&k(kjEQ9YCUdy_+O<%68lSIw zFn~JKdT91pBra__&=mf$)CLGy6p6V41~RVOZaDUg*Td%xq-q2AL6&dXXUH;;e%g8v zmfLwP_t*fMxs)J1`*Q0y4xm1d0-&Oe?}*KI9)Eg47}Vbqff08H(O3I2;e^#8nEd&0 zYWpMuwoDU(!@n3#_#z9givccdx3F}`~L z9QeRH6wj)WWDFbo%(&AzFczP!N0CvczVvI$64;$_L@O;EL*;(2h==pD?-4qd>W;05 z-y~&DUaxU9qhWdcF;fWk+&h*+TUWuU5Q0g9$C}dL*y(|vcMiehN6cxAeaV={7;o%* z;|3zuDHg(e4dZE3^iAIx%;y_x{~};fwa;b-VCI=)Ddgt4YQ?7qFplA9TGL^a?P!&g zc=7&lIy(QjEtdCZX#Sz5K31n!D;U&13~!9-PlLakL^-{K@ohHy;c6Ae2k^f0STd#= z%h^r-bpUgKj;5AHeQc`HN&No%;k2sg5nEBlh5oJlaJpT&9pvYGxUH7;r!}8+fsAXy zu*HD>rucjrdO;W72P|6EoW>Y`ChH(*78Zu5bM>eFheyDvzh0^Rp2hKDD!er4wI(-8K&Tp7jsh6 zwmDE1!f`R{NXYG(a5qIbw%%!u@4Ng9283(F+AEb1P_Eyq6J5$RC`+2VSk?P+iBan?j%lZKbq$< zzP166PU6%~qsSP~IP;`&=G9Lz!|55%i__#dZE9;{Juv?oY5q0EJg}sBVAZxBy{PE$ zlUVTkhpOcxv@Pu9$U}6;#&CL32sSJ@gs!IA0pId{z+rQT@!U27*5nFjjQf%F%cy&> zl6`<;vqlqEd<1(x4Z)1ZM$>>ZPoO*dQH4v4q0v(d;wJ6`UyhkX%m+uB4^A;p9N*=M z2ZoWaA$Sf8T^$WNGTatwG8qoymy6*#6Jn3Xy zxrSWyhGSm^WBC42WDK7>egQ&04C8Y_6NvduNb{R0<~JeDZ^HN7N6^K6ffyNhMls(X zX}&+je1D|*{+Q3PA8FoF)j3-?DqjBtW=ook8hn+T&$B8VJ);>VZTMWJdBvQ$&Bjpr zxf8*sUkILTFp4^t`5Mmg8S*Bj#!_|vuV6`)aI8Lav?)KP_Z!mJjs6&ziopZ^lU+{_Ahbn4hMFcfdvp!*x6!4U6eS zK27}b>7-O-%vq7 zXegfgdAuo{yzF*3;~j=IlTRjNewf>xG`Bkq+uRx!*LURMLC_%h{b?Z9={td#&xJIf zi(>vV()?w7#-|Ty9$Q*=W;irk;`r?f@9nVPEiA4qS4l z%zKi3NSI=NNz(k1>Qt(tw7{;g{h~$`t9P11L1j5xnsR=wm|v_eO{r6oJo%n%g>&`E z_)g}kAk9^w{9V1NY`as8g>_pkd)%MazX-q;^Pj7lP?=74SD1B7O}Z9Vf&4ov98;(k z&AVEbHjh#`X?`6lU92=E*`lyJ^9V6d3Td7c#at?+xl~k|iZ=Rnj=~K$kk89`P~(9L z7q+WT#`hc3Gd~Myeip^tf~2_xiTNB!^Es07oy?pehvj?MCFV*a&6}o->6wdxG#7*Fabz$(U3LNwNAdlA?zb~ap1=yVKBCM0 z3Q_HHghA`N(J#9T(EZee4ZC~Mf*Sc~w=3bvdOeA`L`idr(*7=eX~6`49Q<7d`nFUa z>QR(1N74SY@kvI?{{`~|Wg1JZy)#n3?f$sG8?Sp!Oi%WP{&=YLc&a+O7T+sVIAmHa z(|4Img*3;CYPT#C&E4sbP1cVwy(ihibabklKURA(ftX*OG`~CrHEd0b=KA5J!KJDA zlsfc$hr&B6YmxDtn-1rrYoQ9CCF#fa^xKf;sVC-$B+U^?%pFOZJCa%+F2`rD6`uSh zZXcO6w}oQpZzmS+eDCTmEw0~%4xBR_0=t~oKk9%+6( zVjgqSJmyrur5RoPS>e|oG^dt@m{*AFCsQ>~-e>V9%_l|7jYXOpi+SE z;%tk?mZv$*o7PL?mfbB$k|b#w)UVx=Wghb< zO1$Jx-fw-6JijiFBfs(;kt^pqz8f^tkxw@thfJZRJj-|FS)}}4-j~u#%HfcbPNd{t z@+I{v@z!#^&WH8Aj_23qbUYtz=a38Sj&iuhBuq;Gk^H;3%loB19Q9|-w>7^~PWi6& zeNs;%{W^>3ZnZMBe`|qXX!^Pd4uG04_O~04=Pi*;Kzt@p3DThdF z`J_DmR!&bx{!)6qnUs7qj&YRBRZDr_+m=t>BU0Wk-%GJk>eEpV@s(TZS?Xi?8b`TP z_`ECW$dB8<-uGtxSL#*D{W^c$g&lpI82MJ2>mN*7|pian!p=$(OU|_~Pa736+D! zNckQ4xO2=QrCmfyzQvCdDRx7ow3kTH50TP-A``1G|6V_i{7ZXC`&rx5Sv!jVCwe2& zS^J3|$#_2RlP|U1dcRWI)5ZO-zq7WlqaIRvNq=;tv$mhL9j)zVZ6|3Tkz)5nir*o6 zCVD6OW^FIYzvNTo{StrOj`6jpjKgl)FOg?!yIR{*+S%Hky9+t$Ev46gM!L8=>cQG> zR(-STmot5mc8YHta@J1L??g(yNIs?g^`1qu2jH7;DrxSm|A>Xu}-?V+L`Ir1jdrJFCe2rs&-M$I6 zx6*E+pYm*NN3m04XO~`gw2y1dyOq)o@?Pt+#9O7abZ$P5`jPb3^`>{-zG8Qs*;~=; z*LK(3&n2Hyo)rJezoQ)1ejtCpGSl1-659TWZTHr<9Qk!|U#G{}#7QaN`}%!KFR2HI z{yMYU5}(lV_D$_}Lfc#F<8}U}-~M&GOS*n-q`Z!C>TTOy^xHZP4=>|r=agRmtbAQB zfB)S&WgPV&`O8|s@mzbM<9BX8?^dRW=Y5h7XWtcjD*aIGkX1_mw916~8`g2inOzcl zBzDKDr`GbgxJ!LY|8qzgmtNZ`$Nbqko=88F`jL8&dXajNa=&SL#s3ux{BZH(#O_PHNE!d- z@A53|C+%jn4-&uos6)?OV-hB%{UyEiS>oTlbhOL6>UT09d-M6%U;6=8`zO!VdXoO; z8e{Hn*7%Z<=D$lnlzt~t`lUQeKa~Dw?RV1uob@;9UkUA3|K7jW$LW#u0~dG4^M8wU z^KsOx5g$Eq5aO<-=v?39h7HlzmxtYc1@nejzzX|^skg&?^jBFz3q4Ej(61O+x9o< zU(&Cv{zGENQR!bIr9WBwnX~>S{mofFlX{bWW$ka)arb@oGwELHlLt8DyXuDt?SJCeiInv*>37oKr2oa|&q;q1{gh|v zZ&D8_z0CEnvXbLDq5V#cy=xN6L6E@?G`g?oS>4*TvmOuUq|h$=B`j*ZFddakNWf`*C9XuXX)W z_GjPJu8N(NaXh|$EB00TvDjH_{YZUCzm`6NuH(CI`b z^mp?8_|iLDZ?f*YiXMrS`IkuXn?*VsADsEmRzF4dzeImT#-~4`HzGx!oavFZo}|4* zkF5H&aO~UZm5dLvo*+{6%&K2jJrn&By>g~ciR~}e^kQd4I_oFmCrE#hXKO!+uV09L z6~Dmhzgqi8Lj72=yNUM?%yvlhD8BxYP`_8~uJi|yZ)%6dPe`mij?XTqj&jt4Ys`PQ zl=hK)%Cl9<-<`<|y~TbzWJ3FYeCIdCPCB!T@%4Y1zlk2i*Z;*%ige~DC)Peny`}Ur z*VDm@Viz6Knf*+te#kn7RWHO|ij=?0vokyDOfSTa#-|4^?qBKkSBD z@;1Im(^T^8>PPB~r$RcRem7R4>GTknuqDLgc&F52-g7ce9?zv&gp{ zPef1R8#kBTe$e~s z_u?N(|CjMVo~6HwlzuMHBCYx$dLZ#uzscEnA^x>>-X-I&*c)qmh#rWPaYdd*%6O7c zeUbGVXY1is|I4aBDfGGUgpMn3sz+_tN&hlSHy`t}^wSgxjJN(?erJ7;q_f6LdaIQ5 z*7*3I<9olf^XvEg{W-*cO3y@}oavXuCsw}_s#l^UqZ*cSv>-^Q3o=LsB#yEZ_ zQr>5kqKBey@^?4Az9IT(ogX{%??fME{Z#bNs&`g@E}{BoU4Ih4PNa-yBAv~frCyv# zXZ2`}w?13n7vJBl>E-!Nek=n!q?xCd6OeQ@^`5p(Kpe*#QKS{jwbsQ*7a1`uMq!G z)(fP6ioDsxkv|#V;#+SOy?o#LDE@`Dy;FKgex;qIp8sB2_4IAWFVQ!VqHiKa??j58 zi4=VkDS9VT^e>@$C;DcspZ}}R3Dp&^5;?1D(E z-bj36^+(1v@&Cl{lXw}|Bwn6HzeJC$`X%}!dL{ZJ@uEi}Zo5gpM*)#!-S@nbP4@kLet56QzS6olHMv`_X9`y6RNNOw4RFIie8EoJr@0xc#)#N zZ#&M(ep-C6swtbf$MQK3d1a zH`TM(<+PUj{XRRd@4x2>$AisR=(+boc+#O zd}8xuP5-*TIO^+7?Mi&(Z+!N|nH>@PAyVvv*aMLgFH-D-{9UBj2l>0$2eAucClYEO zoQ>OJC&Z6_Tl*mGChhgEWkT(R*a@)@Vi&CTK2XE>pSo@8%*ZY!U7ZSV9X0;2>`~zq9K=fbc=khG}!Mbkd%pQpT zi?rS=?Y!Bc_pUK!{de{(@oy_duiy4P@B8=CujD)L$}Y%#R^&gzs3$YvGM~HN0H{R4NoVwT#u^a!Cy|B(B1b667 z{RU_DLhQu5whwMTf8Af-w|#K-{BKD$H z9f!W8^!op|lzt%f@UHBG+-DIf_9DLXDPlL|oQgclJVfRtvi>0P;%7*FLj4c%GsN$Z z`Nx~u5Ah@3m%Xt1sbcS?{iHqLw~WtD$hw5c*Y}VA9{<7WcUadg5^6sZYd2(H-`Tvy z>TmQL<**xWK5r*eyyfo``u%tP9qaq7{Vkz(#M!>T>?ex-ko63)A0oxB$UG&X{>MLU zH>@}w;%CS_xg&u==Pc~gHx?1=aq;%8X*L&ScFwAvA|A2Oej zXYohI1v>1AYs~*-ERUD8`|J8J^F7EoZyom~-a7uvJVC~LdH$!y{rJwUTF-S@_m|=u z_eFoDzNG&CTcqf(NXeHxCswbm>lLEkiS-w(`fb%~s~%hR*SfEPO z@*{tjd`bMj`zNwq&>M2J0hk0Rw?r)k>dYYrPxnrQtYkBx4jo2_d>1s zMQ`dC#dq$?x?l5pUDh$~$~@}d?Wwta#D4u>lVWeJQtYqnE6KCiS!e6KvX3n1u&wL8 z*7cb;@8{EwdFM2NeEK>X@@smV~ z|0I5sNQsYc{q=3nam2S@o6z%@Vh5b9zy7~!2Sl$$|K%Q{#LInMiI;U7iH~nRN7iq| zZirtd@#3FJygZA25qpx@bsm|Yi4;Fh{5P4mS?6cs&q=(@%OqarXA&>Zd8Rq+Q3{{G zmTpes#r`<^oi#qO>8-#2r=OjbTgJ)P`7z($xB6vbN5v1b+Dq}j#2$)$6#vVaT@-uh z%nph_Ui(>c0-Z`^#Z))GH{*>4^v0q}h#9oPBiQN*p@2aCcU1ROuN} zRZ4oXQ&P`jr{0&{5@C|^o1hfJ&=CjOU5v14M_toH0}*O|m_i5;`rFWG;S^F3B+op)N#3tR8y z#^-;%>AKUu+b?rFNPAe@>p%7U=Khd_7ft*dt38l%{v&ZnH|v8)@56uq|kBl2w3YpWj1da}rb?$afHzwWQ+SJv@F`q6(% zpZ}@via#UYllhm#i+>~WG9Qz8nU_ht%+DlVq{KV3Q_jvW%6hk~SIN4!#ETy!@y`4s zS(mc;v2SA6#LkI*v)VCd_Dk%RNU>L9r*0jRdBy*vV|^-N_28`EMm=);-o<^3 zo|KRmGG_zl8 z^=HNYTE~0W7;AqupPO;k&;RLo@ju1ywAx#-yUzSe+5dF5A7Hhwvak8tZ(J3p&tgZ# z4@sz=JL7ARc+m^1KFGSz+s+fM{)^~??7zwLYiaHWW$HTYSV}LEW}fKy{2$RPk?-r? zM?&>YaEL@ER_|o}Tck5RjBg!D{2{9zzOH8(Kg{j%PwU@5^*!;kM2en^6g{^}@wY@e zvjf(7rksbc+J(gWT{2%3``}E9|0PoVFp<`F|KGFNo4=M~H^m-{Um(SOQ*{kMHb{3fxd;y+2e*j0&_XR)vG*;BEfBCURw*j4$vJj?u6=DT8V zC0?GbewoaBWxgx^nb=>67yB#mVsAyt-{o2CZ-p-%b|!_--%Gc6{%-yK|Ht0@gWQ&_ zYhIY_s#9nnn#h8d0^xd($52G4cn}&yFfeHhW*|i?h;VkHiNZ>xJGyb7+a2scOGNCx zx3Av51>G=dunkNa3=Cb-NrXlP0~MO7==1!3V|?pR?XSLX@BMxIPt}ed-tmkv*IILq zIo@Zy?>pz3{U_e?AIg62?=$a*^Y6Q^N1N;Q?K=IC?!A2;;kGXSvFr5hdi~gS`o8z2 z{Z!(3vmSD;x3}x@Tz?;0cjtAV^WdkBbDf>*>$|S2b3MIXKj*sn*!A+hb@Ih`?rR@f zC+GTjyI%gEf8;v(i{HH;ob&1S^X_ZE?f0qJ&vl>7`FR`1epA1HyN{ZFea_42zaN^P zGtM&o_I>ko@(<0^IX~xqV9wir`G0qQe);uZA92~ACeHc&zJBN1`tOJ0xYK`6|2+3m zb6++6^nLrN`~355+;;Al9;&B&XutH({^<7oArHlkW_|zkzjL2+>vw1TamER5*TM5V zc<%U-_tV^uPn`GRbI+3*-<&w-&9o=pH;?ANeBxv0)qLLIzIpZ7efVvi+q55g&T8(@ z9~-}%`Q67pcQtk2L-TOPFDE{BUY^&h=boRR=JBV$epfwtpTC~|dHU^XPyc`S zz>KfXcnEU00_LoBTiVm%YwkefNIw#UnrGvHc$U-XF_x=6y52?|tj+ ztv-HiJoJ4(k9)iB&h>S!t8<;5>+AgepE}O<;azpuyTMcLnC){t znD~GE_pS%O_}yo;9`L!&!+%a3YQ`TP+9%GsmUq<~w>smYIK-Ro{~n4%OuaeR!#U6H zTOTIRy17*cCw~-Vy$rHW(*BBe^84`GtdH<{PfL)v6TCKgBlx_}C5S$S*G8Yhr`{<@ z{0Uwg-3kAnjqxJuVcJ;_;d8x%Gd~2zCT>8#??zlQNPm%eK|gKk3gQ2YaXbO zi|``xgV^ZMAUc$Oc^@|Y#Q7WzNI%=rqx8FYZ&PgM4gJy{B#%$O)FB3$H}KlTui#T} z7$k25uT8uFK5^RMj2{rsqTg)K{YXENc?7S0-#q%cw@?4|q4n+bUo(y{?OXr#qy8$_ z`!D`ue`DM)pRs=G%dh8om~pOYKO^QkbY1@TmFse`>vD0ncYT%@o7cCW*!5Xn?D{M( z&h@!yKe6ky{lu=*@?zI%d9mxXyja~Te{FZYzHG0Kt=;w7cCqgju3i6K>^dzkcAb_N zn?H~j=ek_9-+A4xJ=?o(J5Fqz*ZyMHYk9HjwY=DMTK;Um++45i_g}$xy|$m&^;%x+ zdMz(@eU=yJ`rY-~ezX0rkA7m;Yk9Hrw)W3`eZKGae{AdaL;H@abvyHneFpQ*b>Xl4 z+pb4neDfKN>t3(V&w5^R9eVuB`)z*Si|_m%Uk&W~{hOofda>(zvFo|*V%KwdvFo|K z*!5gq>^d$lHqR?Bb{&@&yN=6?UB~6cuH*98cGq$HiCw?#CwBdo7n}c;7rTDTi`{q0 zi(Q}P#c6lFw%=_3FGoMI>$SYt_1fczec!*lSY0hIHZLqMcAb_NyH3lCU6uFvvf z^TYCD*JpXL>$ALg-#YcVed;c8uG{Y#FS;*pH}iE9ABrnao&6}?opqw?wthPGVX+$@ z>OA;Q|FY}ETrWNpp4X{&`#$#_=f3u5{k=KQJ$}!7vFH2ec3;i==0opOe^lq>I?el| zdZ*WGV%uFW&;Ik}>itvvkN$@9^%uYUjK)`=@jP&yyq|i$dtG=gDA$4bVUYLn1gSTt zJ#oVzaYOjT34_E9;kDV9#wK1!d*X#b;)Ox#jNlU|gcpey!Y57$f5v`4;)ZD_Zb-kx z4THo9X-^!Gc9FU@cx~c?@QDisi5J6bSEsan>J{F%6Px%T{U)FIUu@pr93(CXKid=c zi%lGmc5UK-v8f*q5(k7&956^65I%9gAaOu=ZT6AyiTBYiQpZMn;(WA=#64)wJPNWt z!)rg)`Z@2{FTehy5qEk$5~p7J`xB=QGS7m{+A4osj zncwuwd=4_d;k6$-zkmPB*U#6-j(@6t)4!kJ+xyqJpNJEzy*}PI58Y>P%YX5W=iwoI z+vCr1k6kZj{||~=&-)*tV~Xm|oF}eFF!POg?!k5KH$mdOLE-_lXa650z6+oDE_~v+ z@Y(+di3h;jPCNiU`~P6qv0~S?iT(VpXC5!{T=>KT=r6V&yf*Ox_{0M)Y~sDK>t8)i z;sEp$i4VYQ6W@hTJRsP0tJwE@c-+JR;1kac5+8uq#=pWR4iF?R0G~K+u%(KF2oqW%GHV**>2a zp6&Cw;n_al$1vNcJ>T0t{lTn{neFqrw;2bS&l%13Y0vn_jEBtn<=H;#m}mQZkJfCT zIO8Lezm1!ar`&p<<-MuFK9AJ>U)$$C(EZ=s2cFy2t%;{B9hd##q2t8;-+7#0ddP1* z7eD>ea~=Po<38!%yDjoTtP`PMr^Z4@7^DNPL9$ z#6yC_Mc}oG$H6;a{r{o%OPqv$B5^tTB|Z|I_MG2y9uqHN-0YV)2;;;#pNW&u&-v|h zr#)`sA@moCm(Wj}_z1l7*?MT_x!qP*J}21kllTbzMB*g$OI##KoCIE*I0<~> zB0=IL@ZKLjkJ9g*cnJMO;wALcCQbsMcu0`=2)y@;^`SjZ;vw`CiIdPzTm5jpe_W?~ zyw2y2f4}c&pFP`R};u2 z=iSdauNT@MF3vIM_uKA6-gZ7SkGJYO=Wq8Pm-CnXan2+A<(x<8eLnJJ)eN7SVli_*_SSU;Tg9 zqg+4q9M?0tEl7Sfh@OL=?a^zo$#215>p1dV^uN}1=()5{UDy3ekAt40zc%@<*yuOf zqw9j`wuvYAC6147qu&LFpE?cuA5|HFy#I20z=Q+hU{JXxB!!F)lhS zh;D<|Mz_I7p9Rrt@Y?7#_~^1AIt^YModzFW7DT7PYopWPqtk-uGE=ZTFjqdmGT z$a6eF^cd~YXF+rrd~{b39R{zB4ug-s2;x8BwV6+`Ka@WD;v4Vlcg5Zh-@fX363Lgu z?mowMk$g$ooBwTl_c`(+`<|`mQM>nr{aW|l+1jsl@a-q|zObLz`$Asq zeIYOQzK|EmpYS=_y)Wd&-WQG+dtbafXX0eX_G|rM*G-W;JMD?%28rv!YZKRn zPkby$o*iDB_!oTQw?X1y@Y=+4;S=YA7wb1_lV1-K-=$yTxAYT<=fWr61uypfDvlTH zALK>iUFlDJm+`Hy@9!7;+?3-*^6K!3=LU)I2K!uVZQ{G|iE{<(7aT7V=Y>yvD@dF- zNM1cioEJWRAxNATUYj^CeBxL^;=J(Mlgd|x=-!-5$gwPSLYWyf91uW`?~zLzyH0i=Udn5zs7pPI)3cBk#&0=>-ge2?!L?Q z+xK90{7*S~q@UVqn%zxSWGuDtl}$MLIoyiUT^D*?2Il%XUi3cJKiIF=-|KiEKGg3aejb;7{Hp(X8Du{n zobBXk;IoepvahF~Hv1L$?AwFv@8PxCx5HiDeD?D}>skAIwAs(Yx4ydLMC+{ky|QnI7unCpCLa@I9|NC#e2{%Tyf*uK`0V3@ z?CasR+1JBoA0K3253kL>9zOf{Ap3fFZT9u>*~bUj*TZYGuZPb*KFGcvUYq?3eD?D} z_V@7G>{H;gUx63Nx5Q?jPychfekc2U`is;-(m(tAAbFP{`~D#DDfr$m-d9LKu0-ltwC_KEB83(L4}!GH0e{+lCS{~66&JmGoBeE9O~zsYE{pJM0H`ukM_0eeeSzuU~K$+Z2WtWxP1`+9`yN?^6}&FBK{qIw#Q#H zPV_mHj*H)B+y$=veC_GC@#E=-|E7QZbrAm@#DBxbU&D*|Z+LC|H+=ke5dRIYjsK2~ z-=;l&JBZ&7@?2C9zYQP14IlpuFXFf1wej2V@zX*4HoP`|8$NzIh~I|S#&5&NPY3ba z@Y?uo`1t7{ej8q!xO{Bl^0dc4Ph9)^;+JFd+<%bxJp62rpT-u6htNOkGyO%@kJvw4 zKW^8PpND;0KX6~&=ghah*3agCZ@p*Zc=fZ!l@iw*_qXqhaDDmWo99L1PzTrh-vo(6 z1&Kq^-sd|y&k}!v*Cq}HpSV+yI261#dVlG0`aDOEYdd;BHgPH1<%vthCJq(sI^np) zrDBt>fKMDMNWLOSz5+gRCwQ^zL~ZgF@QFjgi^QYgwYyHpi{vTje{S!6LH%Lc$y>lD z9u*`$6(l|dpEwk}NPG%joA?xb;!{E5Q}Eivr{EKh3KE}!*Csv%pLkS|_!PW0@hSMZ zUL-CRn>ZEyw9)@de@~wS>G@B5DoDJFerLPCpSaa%uT35!cGs7VV;_)q;#jfC1I8wv z6`OcgkbObg$#29at`#J%73}`N?<;m4s$IX=@A-K>dbjoVZ~yXoU3u#B`OrS)wtjxD zs}mnuS7%)ob@LbNDeLO-ynmsdeyxtq^M^s|Sr+4NU2mH|X`aOALB!hRQ?`Mp&bRY^ z#`~bpb9A0wpT{?~Uwr5Iuig{B>GylD{kL8hb#PI?nDdkC#`oa5se|EjooLVX0XMNa z82&ig*MW=chwGN>2>x&XRr=?82JwGE{2%SDr$5{HLHf=1_%-^8_(6E>`agLQzXz|4 z-(!6IT(EwxNFF9g9tOU3^uNk_DUyeQkDr4V@q4kYukZNyH+T`h2d|CagO8sJ*6-P0 zzh}LDkJGyPo+lB1$8ogD$H2$GaU8Mlp{;k6#Po=YoxQ-P!4npQB&v@_RfHzZM&R2A_OPko-&# zKL#Iv1ur(vRU1DBpLq-~KK1(h`FL;VAE)1%=Wo_q&h}YXJnM|7ADivdeyks(t~l!+ z`-EVhb2KjWS4TWx?ho`|__3^m__ZK;q=Wvg{;csi>-Dbv8gaW*^;Vx})UUZt&iI^2 zo@woRnK)h$dujjhhu#;ilgIzy$NkpyYZKp>e|yr;*?OM!N5%Rhj=v6E#GZHfz2~dv zW#A_EJUf20uLGCSei+EQa6NB5Uazm``+Xzvqm%yeWsvw$koXbp`a$AIv8R6|o<#rT zi$;5qxKhyPdb+MAo=yy*YQ^}J~lcY;rxDM;KY=>NuaeBw*+ zB5@~pZQ@Swi8BR>JHcxccY;rxDM;K2UYocReBw+&;!g0|#GT-?ZwwN5g4brh2%mUU zkoXh4HgPBT#F^kl_Jy(855gzz1TT^wf^UAH=U+6Rso!k7anJI-ANu{oxn6(9>-FQQ z&d2nB(;q(8-_7U$ub!*fx?bwv>i>*)>)+VVv987sW?d!!wAb&%Z=KHjH2m47-Sw3` z)Uo~aTllY~>#BYW|Fw7i^m&?J{rVsLoe#5~zSs3U=ehnuJ)!@?f2_lws564-g({kSdH~)t4{87QEeBACmpq`pIMI<^>p(So%)_i&AS)ZpF>r(I^ z{y)86?!PZ?=ku-oT=&iG=RB#s`Fp!g^|<WgWr2zyM7GZ#9jx-kM?!o zGWdh*lJVnwPOgK;sgCeEpl`VzeSWF;zery6)a!O_U+LNOzty!ox6W~*Z-Z0cqHF0N z9Sbj#N2NV_m3EPQX>9VP@X@RABKcDI=u~)-|2>RNy%T)&YLGlB?b=uRHSPQl5&fcD z=_jIJ;iF&SMgMQ6-!D29UPQk#UK{<&xad{dMRY6UqEmzDR(Nf6D|~cn5ZxL?uhJfU z8bq%K`JY4h=u&u*|BHjyMz6-^J;1a_uLjYnLF$;`qf_BU<_-Pkx}`t+;+xl_^Q`O1 z>-pzu@4Wu@mFrBg^Sjvno9$xf`K9gie9rf_&-;M+zIA+`PjbE&JFkmA&nMO<|3|+* zx76dD=ezxFXWzE9f1gk4am8tq4@`US1CQJ1mfBAw9|*7Qb9_BspI2%>aoXM2wVnK6 zu=_guc|Z7EQ@^k6y+6u#e`i0DJR!%?CNCJfanknd{;t^j!|{D?sl3?xLtgCtA@6bdGV<8^-(9f7VxM?}X(N1*HW>M`{kx^AmZ zP{$ERJ(h3XxQTs^(ea~w9k`74!@!(h#}CZ;t?hc?JeF_#-19y0s~dZ^zklp= z8vWiP`Ni1e7imxYG}!+$ELL9@>t7uw5)XyfCa)O#3+m@P4_imy@#6HGMUQj#tF_59 z(qEqXnpgeYKIhfrp8acW@{XguHu=Y3{i*%WezrDwNczi@kEDO{jxDnP2Lf{&x7^*iR2w)lXrygb718~@{aJy zGs27H9b=Psgm2uY*H^3`t$pQB=|9_hpSQpGIZp9$`_Fg1K5yiAx5i8U5Pwj=t3S}+ zQlArlKzuj;;L88*UEi<$E`E5cpKbnAKkRcR`d|F;q8~O7nYixWd8z-!4{x34t<&jz zcD?=ce{k&=-gN!H&%eCsah|k)&U=qnKV0m2=lJWuW$=f_t-|Mg`}qTNp4;B@?D)~X z4qQh2VPMX);|JzE*Y0_Ce9yP{h5g3&IQ6=F{wGd;+S5-@`>Ak#pNaqD|8V_1p6YYn z%W*c(qj7w%H=nzX^Sg+~@x9)Duih{D-J96!UE8>Q+SkD^qx~>2*W2*}bG>W#dON=N zUE*bHufIs#EH-)JAn}7BaRb^D|Ds(a4i=ku0es>D@FH;ncm zUL>yzuT4AvK5?;u^=ssJ>1X?`P9fh*|FdrCc;aV_OS~XR-j{xflhG~`FQYwivLN|h zcx~ck@QIHFiI>4^Q$Ka=@uxmXT!8)}`QO;Y&uCA)EJ*x}_U!j*7kM8e?TMGsE)qA3 zP23DV@v$KJUD~yYm&InkALO}$An`KV6CVp!mlVnC!YAJXFOqkmJ@M{=Q95WDO}p!~|4-E8YJ>ET9h^4nIpea92fGh-UDBqW zC+)27^vil4WPJ~k4}s4*4llC4!)ucdfxlSSWB30-JFfMy{ai3M>wJ*^-3qeK2fIJD zUyy!T@98I!FQMOsz4mxn|LG^<2k56wy$`(Wzt5fZb7Rv_#4pe$w0#b(zb}3w?bQFk>o>^L$EFS_NS^+}rhV;k<3G}l|A5c^AH;tIxsTy( z|5(@6&)@55{QC4yudQF&>VNc0^-tYTQ8%y}PxieYi7OxUQ~Ia)slEFs(f=o@zsmmi zH1@agU$h6izpei6zIWpEZ`I?}7Yr;I@FHcR%cNES=YVj?i9NecrqGN9%oie}rG#uAjtTF2DNq|MpKk&ab&o=y|gLL-y?VUNG0SpHsb2 z>~-aH*MZC64};%(e)~HHZlc$t<45~Ca1o71gx`C;A(iQ5LLg9#G14c6azo?Z|5!TDlJ`8wcmDl%Sl8d;jNhesjKqocADkU)pn?gPeExi}O#voNxMx zMvp^y_n^{Tz|&K|ik#`C$6xywgwge{cG|w7DMeeZI8cOY}L@e(&f5cya0k zFzx7s;IzB%w!hf_uda<=pr1DR-q^ecl=kQZ`ibOw;iC_N+i4k{XL%R^X7gOJ+Rf!dwz@VThswOPa1#HeQEcf=z#s~|9yT`9iSi4 zpI`a+t?P5^o5b!1=l-y0{N4Q^{(d?8{kcyhu6h_cAUt{2%!}J~@OFK?wQu|X;&)!> zPYvhqnBRNa5B=WR?~O3?qy0NCit59hx6BKUvyAq`K;}o!Yv)OD6FWZ~Kib!U%V<9g z+}P#_k2~8%>ghRN;?5jTM3=-S{tTaZbCCFRko+Nh;>++Nac6jK;?D4iD+lZ6iuHS! zHt}ZqC7v84o=m^9|7-j7d&HRs-}dPTslOlnJih*rI5hpwe$wM5{yf?}jyCaV+O^3y z#`b^V`a2Sbh8KxP!zb<>B)m*KUEFT*FE93;LBuTA_IzR%%wyy$Z^ z{e8_N_56wEgZllojsKMIebe#cbNP?Y$9=zgpy{@$-B4d&ZN=lb(jXo!fnm)_uQq9f=Pd%V)p8+Fqo-Y8map=2g3& zB<>vKJra9$L7#K0U!U>gzDJ__#Ms+eH#E*%KQQA2Q$LWWJ=)&5@{Ak!Jg&C;#nx~2 zeo8zc_sQS;)7~dNPj83w{Lk@Ue*NEay!VA~`nj|Jli=ogbDpUSIBw<>xQOO0s^fe8 zd!7ewVs$~=ok!uCxs#YPvv$N$5N=mL0cbOC&H zKoDI3uZT!*Zi_0#UB^v~?Svu@7)Ht%!F`bj+gF#Pjgf2m(4Pkb8o zreE$l+Wq+S$9H~s(f{80-TmxmsdqYceZ26$n|`*z4x_(Y_8`M*Csl-t*k?12<7U)XyL7>%c|qb>R594vrsqwN6~0uX*0; zFTQ=%^+~MXsNH>HvHQYe{YH^ID}0|j?Ku5M(SF)Km)ib){o4pl)?dgcZp!hr zTbI;!@~(_e{4`j9;drtB!trALg}hilAurZX$cyA%Iewoz?e7tN4z-`(=S=(k#rg@y zi}e%oV*P}?SU({zl6TGVeEzh@?{lU4iDLbPY;!x>MJ8ZT!gAb;kV}@!zBVaBw zTz`Sz*gF6Fd~4^a_$U9y>({HfZhh+b;yZueE#Cev*YjTIcQ_xLG)p%jvu&*^<#X_akQ@km(hM0nEB!OfteqzH}3l1 zeVp^8@0BPob{|)}`?!fOGp=!7`-y#Tio8hPnd9_*5gji!uIo6l`!{*9c}@BAK2F~D z?%(9a?%(9a?%(7mUa!;s{@(xB^W=->V~_n^qR(&k{3O3ed!O6vc@bYUuNT|rI6E%+ zJb0139=tYnK*RR?C7&0&@5A#rBKbXz)8~H5i{$rWli!2yzQ5m3bRS>7^T_L4{HWI9 z(?{kP-oy9#OMk_A_SMaNyPbd2er&(l|4nfof8s;qXFuv9m~UAxg49Pazmoq6QkMdM zUN_qQy7j~H_M7Vn^(!1F^%6nqCxX;XV7q?2_-@{x^L|Y|1mi@XlkYg~V(&NVCFqwr ziD2VGZKrM`w$I16U+N|3CsH2)uT7liZ&f5<&7r@X7ZCsi%b3ral5b^$@}8 zd&i5^N5H2Z0$!vpg7)Zn+C|>S9hLF-P-9zw;Z$#=L;I*lTfba9~9WVO) zdykvC2Y8Ws2*ztu4*@^d$=B;XbW;2oI%#128v1Cje^Mu1>LTNleXdA-G|{}b`{?eo ztA~hV$IlVh-urvcy2!jvbkWxHlJ-~qUC!f&=Kn4Ki{E)a|I~2)&gmcLeLr#XufXkZQ|hY ziF?C~#KB_|2Z!%-R{b3!ad7y=E8s=q8L^3X!zZo{FB0#D*CyUQY}cQ}xnukMY>%T& z+?(Shj&bbyNW42X@$Vpc?jZ5+VAny9Bl>)8`NX&3MdIF!*Cy@_pE!4rxHr5uac}s< zxr4;L;kAi-!za!iB<>BbP23wkac+2#=ci&5_l8fL8(#Ez+wzHX!;9p(V-xodlIMm` z{4hw|8(y3J5Pa|3et+?^etf+@`>4;$HgxttDEHrj)Yn{-`odyzW0qwVf@6DL`1FZx{Zz}StW zR3{Lh4^F*6`>t*9b>c9EDIuF|3>kq#UTt@q0 z;NJ7z-!X6#d;J_g+Sh^0Xg>_xd;U6p;3j(h`}w1N9k__r8HCSycl^Md_u8KKjvxMT z>G_Xe4Eh}N=)bnz`_|)heqW#G``T~&J+=L=pG*EdzZYE+M3)57CA3GE1koe#+UOAY z=#e10GR*iUi*2`73q)82%{!b=yTmYjy8G& zJ~|_a&IqD2g6ItR=!+nEc6e=c27Giy5S;<9jn06Nt_Y$t;I+{i@X-}PbOyXOIs-ns zB8bj_*G6Z+M_&ZVufuDjGvK2yg5=lXwb2>y(HTK>2D~;p13tPUh|Yl5MrXiheSjCa zFJjO8_A`D&x?>x<;gxu&Cyr;`!1Y?x4b=&)kDofBegu86sSBnasQzOxcKL70hr@tq@uwCnb`W@m5NBzD2r}>)U|CgZ$4(-?ax!%u-E1WtX zjT_Ye8!yuDlV4fO$Ny*E{;z-T+P^&HH@^7B{%?v89rv~TrvLN0{VD#Reyi=(d9~Gd z!M)d|-*4b1s^2<(w66mf(RfbB_q=xez^&+fe$(Ikq5JoDbpCLDj^p>N1DDZ$7?^qE z?;f~`oi~mj?d!m$>u2In2mN`GxN5Ne+;)*T1H5+q`L~Sg^JP8GwN2cV<0MWBCJq{` zfA_fJ)J?p8sv8YEr{-{%1PJrfs&7sb2Z^)6+s=JKziWT@Z?S&VpS)(BTzcKQUiJ4~kNa#t!TG>n{O~w4 ze(-YecX5PQKhy!e4(7ep0X{$9{b7z9e=_3%)Xn2h`o5Oo@AvM*_3zYCoVvcczn}iS z*mZgO{rdO%^SQrg-@kNR->)+K``-IYzm9+3I)BUukS{ovkH23#e}l`w*yIZi&b#jO zUpp@^+Q0hFdHb&T;w_Iezu&ul{$t1Ae%`cSiSxcMe?GteU7|*pO@?J7V-1&+T=y^y+Hcu?|pu*-%I}vGA?#- z+CEp_&$HeCHSYK9bLDLp@&6n@en0qC{Xe{j--nOihZphtvGM!x@$*6QsX_9o@bT;L zBK{s;n|vyK{Ckjm>V@rd=KY-bciKh#er*5OxP1IOyjZ_q+vm*7$InkY=assY*!X|i zQmsO2ZHDUcx~!a;2Y=b zc(MEc+UNoJ-gmWs=!dL-{@nh_pNDPehJim8SD1PN+^ZjE{-N`r@d0&3;|%o+5 zvJ9Pa82V)I{i`lPpKR3~tp^?YK4E4+HmJkAA;i*WjifFHXCBud~M+{nvrZXg>_xd)|Azft%Rt;`q_N z_Ijq@GTIN?_5Y3^xQWJt`g=zEI&cx)_avTv>N+N}-;Pb3o%Y1lgT&XdUDy1)=41N3 zKOH1L!S6|2EJ%KW-<3SXh0XiMW0R+#UHwD-1pTMpNxmYs?-8iK&?aAz_G$ZmfPS9m zle`4ul8*>d{}3cE5v2YBK6!~Cc?o!J>L1{fhX|6FfY&B30iV1?usWqU^$B^2*i*NV zpP+y86QkYZYLlm+J^2XwiR39_H-6!`hj|h^VfY&BJ0iS$Cko*L^Hu(woJV{<`&}wVNNRZcuByMLu7mk7{a5G9xc`0x-*sJh`|;=N((l>xqTbATc{Oxv z&XfO_tR6K^mh-%pPuy%7?ZMhTkDSk(N8)Iwvp(g#ZrZ)Sea^N0a=zDbUKjPM@$8(} zoKNCu+yiUy?z}(a1%QZ96#FEfy-z=4BUI&I)30Ly8r0s zkM?!oBD(+R_jeuD-+EoA?gMkZr%jzo>?{2TAAK04P6a+XFX;a-a_SXIDFN*aS@*?_hD<6FrL>C6pg|tTp2K_(g^4jP^_~<}*(f31id~_hZh%Stc z9t@%b;njV<7owjNn|>noD)fu)qg|vvh4$#ZAoVHm+UP&{=skFm`jpt{KltdqAo?#z z9V~ow9=wSDgV#p?!AI`}(SPvT=s)=Ay&(DzUfcg??zreZ+C_990{_u#eBd+^Z-LG)e_y+C_(LXdjbAbJ5l>k_<(UVzv3e(7oCpuFuAqrk(*e^-R}i;!wxxm;COv>#=br>RlFX^Af3#jZJ-Q z@WpqDQysLcdoK0QWxR>F)Ap-h|NcMP^?CS@;PgLliq6~f_-Rj^$Gf#>`*UOC2j9Nx zx-8aj)SiB$D6hZpIo00Rw)>oF`}aB29!I1;B6j_V$LsT7uKz{i1Dp68`pMTH*iWRs z0baZQKwfN|ptkRS==bRR9r`(9>lZz~cKw08>ppc2=|BC!i}(ePCr-Qm!EqvSg01VA zcH;%*>o4plQs8zK4E4@hjc~QC_?LLSC%Ds9k^I_`dI<&B*fe~~vi z4u7_k*KZZA&v2hU?fd)~d6iT57w7%_%lI+&mwV$rt>+l~%dPtf_vb#BG4_+$XHb{1 z_kPbl{nYz8nDfm3G4|W~sTbdQ9p4t`^`GN!?b-gm@T+@%&upJKzt62b+b8z-biNg< zllXn>z-6=_2JW3FJ)Z+N(fQ^6)$xO8Ugh`)ZS_vacYXw!C;fbF>od~64t^Q!hk=<- ze*VDBr`p}W7JXi%;|ITt_QSx;FUQw^CZBe!EmnWjrhbF=xUZidV zUYoiN__OZtxP2bIpO-p~Aaxsz)240%KJ^+w>Nnu0?Re@m(oUTQ{Zpqwe~~&3_|#*- zi_~ev_WAXWk3NAHslR~NCZ7S{=hgdt)Fsqm(C@5Q%2SU)|I}XusmGw7HuV_rsl$L5 zsmF*-JqCQA@9gJ^)MLP>?gCz<9wRpY4+P)m*?WFP>M`K8sl$Lz9Y&Bk40vtoFyK>v z5u^?SUc354Kb?9D`iazM#HJpD{slOPuI>7eo75jM$6Wx{Dxn z81UNEVZf*EB1jzuyf$?h@Tt29QilPrO&tb&^9LO-8qe=_>3!ATA%4~=A5f=kV;?(k z>V#RZIrq5}@6!*r``sVthOF2sy-kGt=sF5{rCXkEqB5A2us z#+&>6XxDQQ{jiPpV0A?OLEH5U#{J0?97kSY?Rewb)MqTly=Q#e{6NMXdOY(4#J^8N zk8J7@Rb97+4>SN_ev zP`}r>{hQ%0erNyZLi9oAQ@>Z|Q?c`h@3{_K27eg*ULD!*)$1PIv^y^xKlpXvGTILV z_g=@2AGnFV-i{yb>%e8S9|rEdUL8Mh6U|eo1K`)eFTL(*KWI0O?f71|et+#=ulnbg zYpwTaJQd)|oC(?4a66Y$ATFi!M69UY%M1iVOog7Mnq zC*YHhpj{*{L3{ELLGlvt+QgaQlaC0JpMcjUKLMY-M3B0aAoVD;CqEG+KN0l39OaXT zfET|?T&cG2VuI;IRE_ILNhyICwBc2lfHuVpAfzw&%Ox@%2FzTCGH(Ec2 zKH1bKu0PQ&N8=@Tx@74()aP8(A=bI5JM?D{`;q(lefjmD;fFrs#d%!7`%Rse0yyC8vWweg7`K1Y2(-65%F zn0Rj-V;^ydfin+shnxJZ|GxF()?HbrIQ=@fbibPRgMPm84E%i7>$aQEuiolo@*CNc`iK@eTd`j9VoBv5q*#GV&)u>iQ10-^DTZ`u)T+g2X#c_5aDMZ0ZKz`>$T0 zj&B{hVJWX(Abzp;zKI>Aj_=g_Mg7qDh5KKT`p9GN!@dWj{pLO|{nueHzx?&T^tZe3 z>24DALsbT(Y_8`M*Csl-s{%!12?gH(D9>v9k`74!@#}QrQ-)~Vy~;?>#vh%fp6dURwBKy6 z-l{#@eGfMTEBq#gxcoBR&rlh0wi*tkJ$ z>QUg6&k0hG67;CyYm?uBPd+C|eg|HgIu!Wib%Nw~;I*r(`nwyC^!JPG zThh+`yoen?@9WR_3~`pNe&}5P@mT$Ht9NeojrEH8zWA%?l*7<7yE?`={Dq#`>W^mr zrFD)YKeJZnv`(bF`4ykrP@h=m5q-1OAN9Q*L!TT+-es+R>2nC>)g|bYz4Nxuadh4X zx6ZS(9x*Se?w~GY>3nrvCckp{<*)zsf1nO|Q$O?7clxC_MLuU8{%rBOUFx8Rj`!kq zpPTF7_Uhn{@Ac<6>+na1fqSoCzxTjR>~+^~jrMimGWf&b_v*`zAGnF;+xoeqeI2-n z)uSAL?{)3?ft%>{?)cHZ4qU{>tsLL$*YN{$y=$vKJASmU0~gWtE!Tbj{qz^{!?E$h zwD{{TDs1h;E8a-3H^LpWvg5g4IjKzBjYz z`!+g0`UqY`FTtyqsOPw_r~k+A(>}jP{5!`H@%!-F_51Q7^&IfmHgz2wr|;3|_Z5Aw zM!#?TIQ)e_k3Ic67<>A6F!uEG)Oj$z@7w6{Me0207rzcK;_qYo-i;n7ejZ-L-@|MB z-i@B``1iDbl{(a-@7w73zGtJnIQ>0HKil#9^y~XJ`ujxRyV2vszr&08ea36!_u=E` z887m_t=RZ|`1tuCbsa(cK78M!(eEiz*8#7M--nN%590UXwekD#@$*6aKD;({9q{q< zLHs_vHgz5FjbC=Wh~JORegQuBBla`+yVK>m`7=8H_Wt~Q^@RJK|W(0et*&Lo3}9jFyjzBw|S~A)$iB; zyI(c#;QKJj$N$F<5SKXAA6)Fqn4kIs^lIkSt^d{E41fI^{?;Gg+PBAhD*IhO=NG@L zA8j7uJz(Z-Kgaxf{q#7`%g`%_fqUyh`h5m&V)aSe8%Kd(2QH)iFmUg@>-g%^VCHA- z&QHe=ejT{j@7u%R_s+YHAGnE~pN=2x>%gV+ILAMTjgL8g;3jrnI)1dT1DER8j_yt$8nbG;lv&Jog#U!*yO!vPu?p?-YZDn3qJWRc#%32_-mWI7VVx# z@>+~b9xF&*3tpRi7JTwoLEb#V$BV{0)lY5L?`W&TdSBXpdB1*+r@Vvy z+n!lZ#ZPg4;-`qu#7|x6s=e_L^%eb2!%n;J#i(CuTxaBoj>cEa{}@lH&NAQA=WZGw z>GL$*FB?zseGlp^>p~JoS<4$w>2o&LskYv=en_3=`!Tc|SEp`o}k4@4x)|`~0q6ulIn=i|_M${XFAo`P|j--Flz;E9*D< zyPDq%ZesNc{Bg9e1DDZ$7?|s<-y67zUhnFi(Y_8`27eIE>-F<{ef#-h^@^WA+H<|( zm(hM0xc7Q>{J>50I`{KO`#NwD8&Bc*T<7SOt?QJCPKk|fp*^}Jh+YX!y#mrt-Qs&2 zdYtGK`in1;C#voH7s|)q!i)G}`2LRat_M@MznA%PdZKx`jQPg=^7qZ(bNYk+zQONZ zM>;=yzki?WB=)}M_b#LTFmUhv+WThUCiXfzezdOxm%$$fzxTX$y!Um_Kl&<&t_t$L z4(vX6-Tu)_w2Qu{qvO<3zOSR>`aX{K7dwAylUJm@@8fX(6gzL^Me>U9eQv7$RwS<& zo46Q!pU3X_#KnTmi`7QAZ9RT;S`gh9^nD%WqtD<){$B=O8{GyUofbs5!E2-2;G@$f zp87qsuXJ2^bR7Mn+k)u0AazFY(QEJ`Iu2eN9S0xX7DUIvYop`fquXc~(QmXzr%gO{ zyf*bkX-B`oN3R9ZZ$avd;G@&vMf4lIHu?=ddM${4gV#pC(H^}Qv%?s7s0esjld{LtV+Sex!9NU1!u2)fJ7`_q>jzMrG>R^+{&v8juIcm4N$ z9qo7a4;|OMiQ`4;AsBb|6Xok4imi`uoH*ObpTO%csF#RMy+n}wNs#^jCVITSzoW+& zeg9MYYuAt1PplvD^TqlRd69b69KU%L`-$}{_7m$*2=pOpRjevf{hSbt$Y-rX4=v@@LFl2qdS~jO znXihy8DDW9mbl9+>shR0h<&VnI-}2PW&CP;^IFwa-H-bol-}RbS*NaNB6ik=>a5=H zFaEppKJx8#P_Ntf`TpbjUEG((6Mmw)jr*?a=Fm;Y@jKUn%V<9g+{bx3iQXsQ=emye zb>Jd8|HJR~DO3O8r;jgU8NS zkvg2%jU%-EMeA_j#l{nASHH<$+tlHNrw)gHsc*p+8)vB9_(HMq1^Lw7&|hqPL0+T| z2R?N;j2EfDiQV{uCz|z-v=) z1D|@E;M9XfKmXiboBA61_x&mTKH}7eApKHbLqD;)u{QNKLEo#=TfcR`Wudy{85m)8;++<-3@%-tJ3cyQg;)Zx*Pb^*#xP(3HJSOwW+&- zPrXgBafc#xH}F&UrS67)BK0@))2=R*7pcF2*QWl4@u{~7Qhx)lP5ljg>TQD5-@t2A ze*>R-n;`W!@Y>Yh!1wvSju)xF8MeBv@!S5ssSmZu_tLJ-{T};_^|M{SKI5a$!{+(A z)nRw~3%?K@f?o*kUGIB-2X5kTUJX2s_I2Pg+7CB2exk=2I%we3Pt`?y&cwmr>7?Vx zGp(bZcTpeR>7rddWIaT5(55aj?wop_qxz@upT>h)pUeB!4@3XNkC10N4gIqj54zJk z$B|!J&w7S>-eu^X!_YT-*Zm7!vvpp#&bRYc|M9Q76M26){j|wPz$YIO9cO~T<2k|pL^%6`$p;^H}{cUH@kmSe;YR^Prsb^jdT6v{}>KqJ!Rgze`Gz~Tu-}> zHoo3{BKi7ttfx!)>>Ceb9o;*BTt8Vyx6V)3PwFBwzpBTbZxgdly!Cv0+j;sE8OOYR zi+$o)muLL_UDxNvL0mt?#y?p9GGAHuGGF0$*IDBnx$c{`em?8&aq#QFW$*{_ZP(?; z>=*t1U2mP2#Q)dM=e{ROtj;C>9GiN+AoYCk$u|f2f3Sh-X4}a_)1GyI>G4F?|Jbbm zv}c_Uvi=8I|KV+C{fE!`A7uT9*QRa(KI?ptx&?S`)_wS_(?Qm2__=N;-@JC5$p1ye zCjT7deE$w$L$Q%?w={Bw|e zG`u$X=-8M0!}cRDO~2%&;gc^2HecXzMBn4o@ySQSi_{e|UYk5MeDcyk^3?F!)6z_!$%(n$+HHD)4}I{|51Efo$v|zkFoyF zb+^d6v-G-W{Ry)E1X+Kky_WBLbb8%H)*t$1oe5s9Ki=OL?crI6K<|I*P8jF?-v0;i z_#*dzc&t4`Q<(%y!0Q9SE{6(5}t80H1Xr$hrWp z&AI@e`#;FK0I$t@0H6Cj==*N^y|uaT;d9>yx$lF%=ceB?_cy%AeGjkAeGi}eJji_y zuYGyndz{?o;kobWr%gRdZ0`FY^~CVG|AXB3@VU=}-1qR>-1qRg&*4Sh;})Cy9zORu zyvYB|z~?@P7pYrW`#rRq7c9>@K)>AoLF$TwtOM}5|KUZ}0eEe7L64LBmj1W+w(G#> zaSz6k(2E~#pK}*K+NuZpJ;WJ5YW{5QcfiGcPvb+D<~zyIm%w{LXR-8@>xygCfr-G4rH zp0jy*=4aL&&hy&%bn@R^kHm|)P9k|n+LLDtQa1*#&HqHfC*K&PZVXRnY2~|5v!BTG^YDFczPv~tFSgIicl^{{$=lISB(E2nd>;M#zMS??-j04E z`8#-R@^|pb*9BjszN^UpA_U3X!6#1#FS0*_PhJjQq^>J=^_ica`Yrh6>4N0z;I+xu z!6!c#q@D|2oBbGk>b8R9>)?~O3s#r;`QnS#Z^3I*zZIMMtsr?i_~hw=)NR2hFBc?F z2d_<@4nFl+LGpC)$KkBoB z%-@0KFKv&Xb&&SCetgC|o%Nyh)OM|-UZ!#`@bkpLzygSZMMK^sazk_-HaGcrq6lT5H$8|mp+{790xbxFvKD=u^QlG15-P(sA zJ`LQ&w~a5~#haPe{ry9K&Uw9#`Mr$x!@zyc*MZFI*Xv4j! zpZ1{dAL{4N^AVktc61ZGHo7S`bx`opP4J@c7b+i}1b?BMVxyOW)I9~!OZ1CA3Zj?b zwb4uP(Mdt-o#3_6OYqT2LE_u++SE6}M=u4bZ-UpRz6n11D2QHy*G4bFM;`^LZ-UoG zFTwYHLghu@E7ac?T?8*u*Ti^j>YCuAkAmnWcx~#M;G>U%=p}e<^b&mEBh>L?<5;!P zOYnVUle@bBh>3GqL*S**90GZ1TUhO;I&<6`Z-mm92 zQ@>~OHbLI6$@kD^-^b@Cjyw1w&ld*C>(DMwoEJWE-C)1}o!;APKlD8x!Q&@>n|1Q_ zd34wR>W~rVISt$z--(Xc&T*LP3D;Zm&g7%B-csKj^gVrDZ_PjZJbCr4I-+{QdW*iN zr|X6B7wVOluFEqHGxui~*Wpv~%b)7^WS-O?nuouyp6G4$#C%@NdDiQyJ}}PM&mDT< zINH~Ni}I(APv3;*l`>89)b2C11G5U+-xnoy1w4FRRyms|~{pWg? zycGRK@>BHJCO-wAJXDap6udTZ5BS7Cg5;s#waG)lC+`#_4+XDH9tu8rryzMKcy01f z@X0#`$wR?wlZS#&9x6y43SOH$6nyedLGn=W+T@|&lXnV|hl1B84+Wom6THa(EL_;+ zq3D;q6YV1T=h)<-;FEU>l7|ZNKSJ=yJHdRq&@p>;S#^teS5JK!_I8a^=S-aSfD><@Q@e|YEaP(yH@Md?y+${kZrV5P znNOSfHvL`3zZ(6I*J!;~=Ic7fFV|?DcFx~njANhO@6)(Y=Xv+pBJri{yJ-(L&eZ*P z+ues-m)Lgex|7FSJ6_~DxTWJ`2dQH`jQn1ZcvSo}Pg$q_aR1rgUw@waV5|QY(XX+ogQ7ipHHdxR=-nW7SMb+%<5=p!=w14Y)M3$I`y40fe4Xo7@7L&I#);@+#%WWZ1s@$8 zL>C9q!xK-PchSMI(ZxaPv*4qDgVbjR(Z%q#ql@9AgM;YeiKiaNcJwj*qKkvnX9dy4 zLD!#wryKj0zqPOW|8|_8r^EZ=N>jH@y(1b=qQ2*-4zPY_`hWd5^*h6VTb~pE9lu@w z-8eITd++&4JHO9$>67%+ck^}5+m9SKzu%*E#a`Xq`*PqW-j{cJDnG0~uAVX9^szkO zaQA%tW*+KwbxoYF%=e;s{{D`xAAOHQ*Bh~ZxOV-p?ILw7X|Era@B5BAPORUp&2#gN z?|b)poW75!?R~FN``b?biT2sA@82sgPJc^175!`{4@JM^or2_<;I->_J&stvTif^Z z_50{=i}us@{Y*Wc?bKCeT>Y^9MBmTU@9FPq{K?}dk3|2zPpQ0EKP)dc{vz}%QeB|rmec$hi)=Qrc&pL1%>*zXg8SCjmyo;|ta=-Fa>*V`*e+cX0(RK0e zxs|a_Rv+B1m#m|w&Zo?ut@AE%?_+JT>soE-J@gVCNyf*o8 z_~g5T)P=%plOKdXuV)@7`EUA()D_Y%dGH{4ad>U&31e5MdOwN2Pps{IUs!*KSY7IU zCRUfqi`Av_V)dxJ$o~}Nc-5n>C!Wuq*Y>-_m)q;@IqtUqkK4EFz|YWT{rGL>LD#?h z{&nCY-o``k;-FjCgY+Lb>x}Q~GTvyNTc0~Z{51LMWAbPaXFCg`aADUv$Q?_d|c@xNgCI zzPhjP_Zsocd>(aoOTU-<9p3+y&tu=S_c+EUiDTyT$(!f%`#pLeQJ-{dzvR!s%kR_A z|7<^-j@UfEGjBfkN8YdX+t>VTzr$tlhk^U>@27#A_|U%TUF-JVRS&#tp8c`UgIqob z!o23b$^0I8xo>jb>z6M5Q}to$0Z)Q z_H#tyl(AMVjb7_hqb@xd&JtFdOF65)Y&mkn>suAzAvobN92EdV^e1b zpZyWM*nLrL>gBG2U-f%k*y;b~_O*Y!^_QQ7&H7*c)AjqeIZxufdX05H{aEMw`(LlurcRr9m#1Dv z{~L7u?{RPR*=g8Mpws&Ms?&IW;W(aOSchI))N9pgJioA4e?_02)N4M6(D#RpJn?E? z*!P+yKD?M0_Wd9;-<$aGsX9oTdc&B0r?)AcGtl--Dh|lkv!wt-ERtu0Pd*V|B+nRo`sHGI@{ROMelbYCk$&3b8{v~*gctifq2u+#F+&$?yDRA z?d;!Xof!V{=YpHRcj|+Cb-~aB59xy2xX#oEw|J))*4OKW8Sj~Ko{3XGOuWnE4*g&~ z%n#!|_r-l~>(nmeK2uMqo75G)S2Xh^dV;#N=!w>&wSJpAwD_49)fM;|^#t!}Ux%(( z)D^xDLR~@K+1|KLpPy7`OkL6E9IGc9m!Zz=D9$*|#KxVeH(So}A>uT9@6W_-w%(V< zV`d!Y9GA)c^PzOa&-HV;@4nA+USYc z=n48oN6=41Pryenz>DaK*ysrO=mmHY9RaV6j)0GD2==`M^)J*f(a-j&BS88`M+B!$ zJrn(BdvpZ-MDzr_HhKa+dLoFPfY(Mxz(+R((Gl?4=m_}eg&_I?UK{-YAH5JnKfr6F zAK;@Gg6Ic$ZS(_t^g|H+0I!XXnD#n!L~L{f?a>uMbi}mRp(kRaCuonZ2%;l`)bj_? z5%AF!@X-tKB02(IoB2z>%;RUl-~Rmc1MByD{N1dZ`MiNsw@jSzjfoHGnY;ML={nAF z``+`ZUuK@_LH#mx&0XB%aIJHuewlcuV@_Rf`}?lZb^5GpCO>t}#Jjru)$w=j%Q)V^ zS*L%8d)Mp6XT&=lbQ<<{jjsFsK4aYR8m-gM?^w_6)cG&tI6>aibr|uQAbM(VT&CZn zI%vjcI=_a#+D3b@@f-7LqVF-b-S=>1{M!ENEZ^%j^w+N5@;zLM*KEdds;9`y9o1Rp z^OJ{L%!Bznd7mR~zu?|=$$CHDOK}?Z)^$p~)jU}DE7S)Dd7gBw|H-%@_EP+QtRFui zP>>wodl^np*{5_LF!K6Q$Gi9J9TvMeSbs8 zr``l!o4OPD)XxQ}JAv1x?gYN?Unt-AkoEIL>P;?e-(S^!sW+irr0yg(^>o3;2j#`H z-|sr|Jn_=5v*hjg9(_){za#ngV0CV7@^?YUVv- zc^`ekc%vWRSTAnsxv2-IKD^U~%Z=U}`tME;?n95Aeq86>>9_SB{k9K1bsD&dx4P_7 zhoLVQ`}w{u^;UJ4`LN*7SyNwCPmwQ+o~q6=A7;D?UA0#qMQ5FcuG*UaFmC1hy+&Sa z9lC0<&go81?Vay^ZnF1Z>z+EFXZ_GwKUFWGo0jsfvp-4Q^h|#02mbG~K4abNJXary z?i;=z^StZm;CJ(S?i<20&#P}ozVA5rb>K4E4+D4CY4d@--){5>_j!+Nzso!!^E~q( zWd6IpqdWHBi(kq85UlPfqC05sd%u1!_pgZFfRE0A7pWVHP2CWDbRm4-U)AG@Uqm;0 zybImPIBoPJ{i72ZFH*NmKW*xk;rl+Xem{}-e8omT!uLI0znAqv^!-NV`+lzeZn62w z+SQK}^;^-2^b^sK^wUN^!bdL#(U0)j=qv1b9-^n{FQTvDwb57b(N{tA6}&ceL-5g4 zLG%^8cJ-CV7tvSn+UP6BM^7U`U<}9>FVc;=qvcXpR4ChL|?^5U%^L5!HeiA zcx~#5;G?60=qh+^bQOH`R1jSSuZ^yPkFE+nWQ zd%F(x54KZRM8D{%AbN^^+UP0xzVD;oLqt!-W<7YXIM;(u5Z{xYn)>Mn`M?=pyGKtw zwT^23k9gT(;NJLDuUq3w!L2%}@v-`izQSe&bNSe`4sU_>bx+{fGLAJYf6>_1WhyBoVS#KOKTe|v?;e-m0Fc{&{(-e-NqHicP&%aN54VtbR6iT4|?li+b2lgpB1ED3tpRgE%?-B1$kcuyf$@O@Tt!VQdbABOKOsq31&+UkR^Gz7jt9$sqYkcy02P z@X1dG$ydT_ldptNelkeD5?-6Q4Se4(*6||sPO-^T!Y3aYBtIGC|8C%uhlCf&Pr_?c z=LDa8WRUzMytem~=ehiw*wrtW{cr6zJ>GTydA&aYWF4*F?fgt!<0w8l56JqNaj%Tu z+!xoGI%MYWCf?=oHsdujZ}(jKqxH=EPS(?2pP@stp86gwbx8Gx@68%IWEpv~!_Xno zALPkSLx*g}bE-dlFIM^F$=0DmmXRkr3>~s}{WN~#d#}_X)gRO$9m|{VLWe9}N42R- zIvCgKyroWr`JcMtyZhi~y}4a~KHE9J-{*Y2<9XT~@BI^he;mhK2QK1#kJa6Ky7r+z zPS-lb_-Kza+Sh@L_{Q}~Lx;>drFVV*s`pR6-~MUp5%UD|K1n_)_Y42~7o?slNWDGx zQQv1(UZkE1ezr%?Z1p1|Iwm%{hW6-|AbKW+U&%kS= zXW*k>g6J7|ZS)L$^h*#u1FwyqfscL(qG#Z>(KGPTDM9oK{M0w84?FeuiPVY3rcNwK zy*Yg9!h+O^!D~||2A_JcAoXGJ+SGx;r~WHQJs7-p<2ru6NIh71>cGIx(@Q@;{qYmr z_os1xzi+(QSMWT^*7M)@CiT2Kuff>V3&Llf2btgW)23b!KJz)q{D#-29xyiV@1@_x z^^VQ;roZi6clzi0(qH7d(@&f04xj5BoYx(spY2?K`sI4lPvkj+*z@{>^t+f3v0o&Q z>h}q(qsA!;8H4H#RyPKDrxT zvz`9ogXnVFqr-#fa(He0D*bYwJr++r?nVDw`?1IQ(SGy(|9J6Tb@)U1)mt4t_4l0~ zM~CM+yzh1GsXlLWU4BzNHse8eI&Ht!Ws|?dP5uXQqoLExYv();`;FsAt8t^3bG?7d z_|bfh|EHkax;|X`^Tw6FebseCtp2K9{bl>qS$&UL*T1tKt6e=d+lzfJut=R2{ri5i zu5V)FO!CRA!S_99J&x%6&N{yD1?uOC)n&DPzghXd*Q~r)T_%5RSD)EWtUj}!NL>@h z>2v!19%B7=?eltivEFfi#2z@;n_2Hrq+a1P_P1N{VjsF1?|!+B;8V$;m&nu?)N9oegDMU`dsga9GCmzw*~u1^JaA@r-4(2YoM(?bi49x$ed(MBdMH zYTl&JcaM0-*0@FMhud%FTSVU%YJ2N0scTtBekRB~Tt@rEv{N^HknjGEy5YU|SKqVK z`!4hM)caV(-pcoVKb@x&zyEao-pzgZ(fe=KpLfsSO#eIcI1j~7p2`o;yw02EbEZFj zuJ}ps>#qB~pYfMR(YpN1@7%ZWhr#c?Z#wS>ZlZb6?-Pd_?d!lrysLlA{pI+9xv#n} z?R`Z(Z?N%|+TDNJE_VN^AMJZg%WJourgr`NZ;m~#SpQy|dKubN7Zar3I!L|Dh0Xuy z(Xa3IYd?{?nb_3L!1uj=c>cuhziYQ%S-$Tn?QulvY2dY~ zSBCF-Dlgs?=fwEvHNP<``*&Fi``e(ZhlL??=3B# zI+|ej)$$_s%J6+}Y0szF|I=}N-&@*oqVF&5`RV&gdt8w^<=DQrw0z&oQ(o+Tx_0-| zMe35_`yR%&i`_>%?u;+De!g~}-*aO6msk?&j`wzkcqxHg1vgGjSRA!2A9;>Aw4H=3yt^)!DD(zFe;HE-rMiea3?(&i&dQ z5+~~QbYD0B|7h;-=KgK&>+be(xBIr+ecI+e>ArgWyM5R4`u*13{%UhyHTP52llAXUtv7j}7T+)P z5?mhE_wCntN!>j2a_afMXS4HFq<%g&_4D*o-=q8K7duEDJ^i$+`(Lj0XCisk*yL4d zPaH2uJTFLI^}_c3n;oA#D(zzb7rQp~VnOn&@X4nJ$*;m|lV62TJ~c>w6<(YCDtz*( zLGr8c+T>T^lTQtjUxn8uzY3pxYLNUYyf%3^_~h4u)Xg9J{na7V&By-Yo4#MOyvTEj zv8kJfPn|rx*!OwWrfwcSb@D;#=7ZJw@~Myi|Ji%rnA^7YtSbg`UVAVpMiIkmFf9~G zNijB2f$0wYKni?7%O7K!CEzPU>YuZZ(HcKI{EO&^N)!J*NtIn2Ujq@Eih*pU^P<7GU|2xeq*e)p1Jor&$IXQ>~qdO@B8V>J+3k5nrqED$9;|a zzQj=i9&gcJ+Eh)+xT|`LtQ52;coUd%Yrc^s(KKv&Tp8$EJ>+_SDG- z`+o%L$rHzBT}XKH!?DQ^2gwfy$qxs~55p%v44*tOyhwf+-shbEiKSoi z!SoZ!6Vp$dbs{(YyyS=JCsMabKW*~G@W~SgsoR9trfw5H`C@pHd~s~*HsO;Wh8L;Z zgijtAUL;Q(+x_W!eDc8XBKcu>ZT(IA#V@A)b=ddyb?w*sznk`p@qqW}Gqjg64($e_ zi+Vlk_3b?S72Uts@1*mOBOf#L`_%1QJwNsP)bmfR<4<`JbkprAU-C&h-g(lf+g!|t zbiJYbp){^(o`e16qT{RQtK;48q`Y|z){jKTllRySJ%6nJF<;RU!3X@SHo|^1R~7Z?8jp)O0#{`u?Cle6YU%D$x0TF4a%b z<4eb75nUb|T~2#+c@SNGVNZPy(%*j5MyGRJ^m&jvNcw4`)8V7bgHxx2^s^nkPQU2$ zAbK5M8@&!6eI7)w!)v40;iJ!k=yiB)^g4X>c@Vu0uZ>=ZkG=__cY=&phw=PRjNa<+ z+UJbAxjX&t_cQnXU(AfRzO5g)7SGxGfs?)HPfq(|@m}3#Jn#4H_Zi6duCCU0{v3Wk z_+_;3HhAp3x#tUh?t zxj#J51Mgv;i@b-_N$34xKFfQQ`D>86f7-Q~ztW!hYLNLWy!MPoF>j?`=Be}(nYYGf z-U^?2Ymj+ska;V7=BMx?^Hz9m=Bx0TuLhZ~!fP`hjXme3jkkCmBJ)!C%s+$7OM}cy zgRCEf&wMngPI+630$EaX*ev z9Gm{4`|kDg6URRaGbuMnhOVc5MM>Re(|=R$k;;cLH)3mcs6J??e<>_7Wm!`bhlc;DyUJ>;5&J4?3S@Ub#B2Y@Ct$>6=kUu(yuDxZ-(!+4*Ga zr|VbU2e9vV_W|sCGwTMrk4<^!lgul5uk@qnB6P?5r!!9ah37Zp$c^)@$Ii!$mozRj z;)*xoT+cJ(jZe0&=Suu>&c~*nnso&q6Bo(%+>93#rx_C9y<@S-ld=4=e3_d za1|d@H{A1mk{(2l9e-XvH##hcE(^|f>Vn~;$7mPPXR*;`@X=%NBDxG-+kNzU-srNl zqs!p6FLjsaiOvd7JN>oYSFi2rEHM1kUm*R%2fyyeMCyd;*ZuVRJwIWu zAL(=B`}#_}Vc-9S&iKUji`1ELz0vcui`19Ic7MkHF46PwB03*_w)?%^U$Do`-yyn^ z<3#GAIZhj$2_JnKq)y_(MrXz*-%NY-WDtFMVWTtYH}zvM_H3Ve6HNQmogn9#{YCUA z?a`a`7pbR+jsAp>&V(2FpHukgOnC8wuZZYP_~=V`(R~Sfz1q}Oz;{2weqWKg3XbnS zgniz{52G_{Qy&W-Jqa(OGvT$XGv!6bb>`w{m0cbwWF&--iIxBWg- z`{I4%J^3_j^TSV-N8akWY2TMWessP7zu4bvqx0~O%{z?t8_|7h(|;N5yLnu7T+cIf z-m1>C9<=)tj(XAk(0PkGPyeXCbAQ6dAEWc)AFK29kLC-=FYkxWTkh&T<0k4m_bD7Y zZ&l~%C)Ic4mG_-rMdvN$)6R45_^F?Eyq)9j*YJsdk9GPp@f974KYTgnRl#9DIuE{k zH~H_WKd0`Tc&gW6T*~)&&vEMOS9HiS@*$7Z+wW!{?ELPZg5Jh|GLGmk$)g3E&f74N^}Ktd5sY z-2l8uJQZG>dII>=4+N(Vl!$kbQK5)Jei8J_;{ReOhcg`KREtsgI<8@=-zZQ1sJg{~Y+lNrU90 z;I)a5!Y2>ehNPMs37^NAoY;&$wR@5 z?2hK6M=Ow7zMzer4*^ zQ(ep6_E+|sIF9<1fv5VGgYEjy>dn#bX0-1IE~9<7!Q;@ShYhaUZ=zqlFGI&hzjogU z>mWOSA9a$^uhdCKzfuRY8#?ybc#iQ&bZq=hb!_!(b*y!eGah-NXBTyBQO z?sM5Zfbq%3E303rkGwHnX}yd3l{%Q+(6Pt957W=|{di*C_Gz7Oy`l^Ewoe^6b>YO* zenh*w{bu`iUDVtUVa73M-15G7rO$nSU*3bp;YMBLjrh>I$*CK!>8h{BxaC$yHD0Md z39fy-<5BKA<5Bfq z$D8u~oV)+JK9C^@9^5_KKSUpAoVox+SJR?9{oalbXgEx7Hs^r_S9wM z#p!1|`iy?jWAqcJJ_G50SFfSlI4(LZh;E~wHg%xz(P=?+8@x8U4L&+8h;D<|Mz_I7 zuLaR<@Y?9M*i*lq^{&4II*$I@&3}6y5k1H8(QCoxyS)w(9S0x%1}~ELj*X6kk6wcp zKdgR(ztC~?i%y&E^w&nm(XNe-gO6?tqT}GT(Q)w6Z9(@z?Dc4)Wygc zINJX2E8Y%2`wkI*nDY<3H@~pd|3$yx2cuueBlP-4+;ZS!>z?n^f7f*2N&l@w-%UJd zKUfD2{dbPD3>`T1-;8U%jSfT)uIj<+K>j!Q#<-?+-E)Ps#Y|D-N@Z*}3}J-L3~)9S*ZLvO})?*}fUo%b^OVRzR)=~Uj+mwE3;-10`emT$jL zw?36#{pdyC(_HtBxUGMF(>(jTj{CWOXn0`p@G<>L5A3`)u}l#OB{UzWZzT{9^T=$BWf} z@*;JQ>EF1W$9EsD9zXS+w)=FopY}Pf()%~wv-cFQ?}yR*)BWQ5dx+Hc#%^5McCqt| z+RgVDsq5vq?ibhdi0&U(zWbT=yyCQ*-}gMTz5ANApV+vlyx4fCyjUGAFH$$k@!i*~ z*C93zTATRiDteyoZ`S8ZbicFm-Pf$wA%4hyXZ^m~)Q7@%f3qGhRzKISe)f2=`nfjs zq43@BtmhZ2pXJ5sXL*sjP>$E8E|lZDk5xZkbpNw{e)l))`9E<`p%TpIWpE`NqeLC5Cxc)wkhxUFAT*Z%GsFxcrrQUNt^zvf-)OybD zuiLn%I@$eo>wneBtRuV`bpZRJmzVO1o9>2Qj-Q_TnEj*TuiYoNe%N>^^`1AQ4q!j@ z@>1S>fAz9;FwxJ4zW2ek?~~)II^aF^Bdgbaum0TG?`nLM=ey&~UHy4)oOHxR=lZ*? z?ws+_xz2pzY@h4Rtz(XEI}V-6{P1P&llHZ^>D~N$`x~G0`Of)nM!ar6a1rm*p?$v5 zdwITjKJt8nJl{F*ZtzF-yY+C$_vcb)fL6_YATQCrJHg zkor&f?hD(`7peb*?|!g7zexROZ0bMZQ}+okQvV6B-MFK?NIfLHc6Czu{?7Wpj*EB4 zjdOf>Ja2g(soUgpQ+LGqMAm81p1RE-b(`?o)NR72PBTc|CcHN5e`3$;qCOLTUT62K z>hB>^p9!x`T_$|$GK17*!r!&4<2;W@UYmZ})LU|%)LC*K(fzA>eW|a67g^`S@!HjI z@?!N{ZR#z9tncCY)K>bO}*u?`&@KgPy0<>NBt%IZ11>K{)>Y1J$M4dpWWvD>U)**?Zx}_*^F;K zR-e78E}MF6qH&U5cl}my5og@e@u9y{$A@6XhvI#DOn-HIRgYPJ89x4s`poz%bXoir z`~Tpt)MMne4?~x qGocZgsK678rt9q=u%yD&&k1t;tU$^7!*X+Cg=dFJa-n;rW&o|c%`TpfTETerl z@Tg8a#V=RwsUN3qocZ>Nv;9rums2mE^y9M0zwd`V+UNfeJXTLme}12yeC+z6Ph($F z{f+U_%C#T-2u6(|4yGZ^$HgQhcQ(qV)u6bdTkEfqJd3gFIju|BX z4zEp~8$S8$Ao*>0ZSvdj$zKQEf3(-3O&%LQdFvo~>>%}rLGsw}$y*1>W5a8c$A(Yd zI!GQHUR_x|*>>{TqrEo&I}jwVO?&d%LGsz~iECci)t9x&_tTy{HvQCZN+Ie-yApasy{s#*LcqR+|SXT{&nJvhfF-Z*IeJr_i)@k>vifnxDUyv z1*z-cKBRtwc9FUccx~!B;8VvD?EiLn{ItEV?0dp--f#EoRHwH;^{4QuTL@Bj8svW^ zg48R(r+(qWcHfisOPvDkqWf|7JgG-WyZdqWJlgDgl6LA8;8T|nq)s8|KAh!Kj{q-H zrvR@_odSI76oS+#z-v>d0H3;qAax4x+SDn)r!FB#odUczbqesQO9)b@0IyA*0(|Nd zg4CPBYg4BHpE`vg^$GCWjCZj=d(3H z*W^7|$NMl)ectQnI1(MOlo!zhvC#vx$KMCh0~a=WfPV7m0s6)N2hjuY+UNoJ`2Qe! z0A3qC03ZJ!bbrHMhcPy`G=rPmpooY;SeOoS)yT zD>gdfu5QTrm!Uf*9>)B66GM3FA8m95?b_&w*yxBLIs#rDLH%QFbi`~Aq9=l^ zTcJI=B8Z-VkB$hUC*ZZw6Y$X!LG%Q?HhKa+`XPv(fY(M(z(+p>(G&36=n44fhah?a zUK>3DAN>$SPrz%VC*Y$Wg6Ii&ZS(|u^g|Fm0k4goxUk*lyT4cTMB338@Y;;0vA?)@ z9w$!o6yBewZ~u7bc(KjDp4P1#8V~5_4qWfz%)?GpU);v8jeh$LF2f#pZ9msn)@g6X zvFDrdY&)*K5+do8?Kij# zd*B?0ujPwpd~)LDILv*@INW$;;~?xK6m;M6=7)0~$LgG!NA7)XemM3z+JntAS0}Z- z=)UH*tD6$X+}l2}?X2TjdLHAP)Nk%=cfC&6tv8M-x(|BenOz4o;-KiP#6yFPhgNT~ zUr~_tJ~y_ze}C5d>}_{_Pwb^SO{DH~XZ*Br8TU=^_|tXo9Y1CsJN*wGZ)QGQY&_LG zgvh%0n~q0`y9UXB?|WS4w@c4A@nz2U`Sg3A`|Dc$-PA`f^E-b&=SwpldYU)wIRDdrCZt_cU>)p!@Uo zeb(lGX5bTNf)`m=gq^(quICe}2Z&8Q0PV@|2j@JEI)K>Z|3`ay_wVd^lJ}=Q^``U_ z-M_PZ_wDTYMCt%IUc2)(dC`42dwy-|064z;L-jgRf6DRN)B(UJ{~x3d0A9QEHP0_n z2LP|#`I@{)9RR#GbpWy5hqIrb{6Bo^PlM#!;S zw2RbB#CCtwKEJ7Vg-_i?ka`LD)JFuVmw?x%UIIRK5<%)E;I*ljfKPoyka`JtZR#c9 zQzsFmUIJd5dI|W{M+B*tfY+wp6+ZP5LFy&owW)W7Pkls?dI|XMi`ws(I*1FKdDGJ0 z!*=Q=;I$bKIWB(a4bjg_UUMAxeCg+(?Rmb*Py4aBJ>Pxy-OsxiFL-b7w_lm}tj<@q z^P9J=Z+K;1f;v(FmM&O^NCN|SITknZoKA`<_mo8oG%=!^ZPqh-v?Lc z1#>=7olhO=e(3*2y>FfAS>IRByYFcA_=S$YQNN#b`=Va2KX<>;KIiIj_Z#hVcGlt5 z-PAekJ6=Sm^Bm6c>*f1DPOtiz&szVwZ*KLfx^~tL%sSJlb01nCF!k$IefyTW*7u^< z+4m&(e?M>$ADd5jY(0VdtmXQS<`14?ofO}59pmo{@s&7r-iziHK01DLei!kBuZZYX z+M`#4=+t2MH@dXl&-C1mUZsEcF>SkuUX6`jg^xZBqE~~|t-?o_!i(rtcy075eD^8s z@gjArvC*sW(WgQ5YS4X4%SV^Oi|AE&ZS*R9^l1>i3V+u|x6&_qHHdDdpEkM`KKe9> zUWM0oKhIuI?)$Fyr{k$Q^r5=-YF)t_>DJp^-*|uDW8KR0e&zZv-}}z*y#FG)Hur`4 zVD49REcZ)vU)S={uka$eHg@%_?a{BXsrwC{@8^ZT$#_E^?@&H@ydZhJAbC96lcx*L z_l+T{1(lg|s1--FjCzXzXuUXc7Ayf%3~_~h||YH%KNBQ>1Fuc}2Ym80w0qyE&p!5d$$TTod?UzwVrGv9#kKDa%P z=zh5UeKW6s7u^T9?U_%|E;7%EO*r&h;k-KU)s=b1DZYLjaqkV@7iXXIju}rk z&sSYG&o|}^hk>j3d7oE2wod77;^#d7nO6`;Kh&Ql-xVZ|7<8Z3wkMt*o47i>Hg%n` z`#)LoqWiSg|D64HdFm|apSp@5br!)(ziq$ipS!PA&wuvgwW+t@IC<(V=$HD6AoUjT z+S89ycR|0@Spvn5u^?S zUYj}$_|#nlsl&Li-A}aFle!Dq#SgNMzBd1_9;6-vKJ^zt>M`K8smB=h^!xTp{RQo! z<6+O&@%`Q4*?+wL{P*$i>bmZpw|;TV@9x8O`00T&t~hblO-ww+8TaG3rG%iGYkot*3<3!d&v`(UR5VQx~-{1NP>rlHds_m{5 zOWnlYcx&;4)K9b?g7sxV>L+%iej?a9iPk~T9`t_z8m}<^N*s0_?ZL)lTMxni3A@tR!tgGgJ0W;1sakf8aoJpSM zMaPXd*I93>ueQ3%@u2?UVfyN^@!I?L6X^Tu?;!fV=KAt}($0IC-|6^v@!I?9zc1^) zdEWPZU;6ptDZiEXf_T!}_apJ7VB@z%;z_h8o)jdGbYZ)1ef!J1PixOJ<3vG@6KRi4 zJSo_CZh7KK^h^9GNIVH%n|Km@;zvQ^N$}dlli(9S3KCC(*Cw6>pZHObcoMue@g(@f zkAlRL;I)Y-!6$wcB%TDXO*{!c@uMK|BzSG&N$`mu1&JrYYZFg`k1h?OPlMdALot4E z`g`8{`|A)WF zjdSXmC(}0v<3ZMy_j`@_(9LMyzuxveO8?#9k3;7i9;SDU&sJ}AUea-J;3~fF>)r0t zJEwY`yf4$QR`-1TqPEyPTJ7o{+mk1YUENc=d24yGdZxDfeU{g*uJQQp<5^y;uJL%W zx<+2Cu8|k3Yve`hDs#T(soP#%BQI9hc)VC$BQI9h$cxoA@?v$3yjWc$FILxF+V1b! z>*)TI{hng=jpq@m(}V9ml>MDV>h$;?-PgUxi^Shzv%V?F`X>0q)q=#?;I)af!6&X3 zB+dq}O?(YL@wFi9nu5gBXixksNIWg*KJLAq#LHq6Kciin_*v}kKk0EI|HG4Z;%D%Q zp9TAWkwxNW@QIVbi>zaU*CuWTpEy~NxEZ`QaWnYD$AYX|g4gExj{WZNtQ$UUU3ywa zbR6-i!$8LC>f$k8Po4Lk;hdMw@p+Ed#p=|LU-Y>Xt5a*cziivPpKPB8(fwu5cH`n6 zFIKPCcAwdvr~AMb=l!jpcw!x~dcIHHpYxpL`|zC9@A{lv%LiSpH#-bJy^62+?`81& zfzuwijaxi4UUBl@nXh~v{r5-FyS*;gOXYXokGMwkZrdLluXvsRp5t5n_(wN=Zbj

    rQ&$ErQg6ob+SHrDr_PMy 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 DZTd(E literal 0 HcmV?d00001 diff --git a/tests/test_load_environment.py b/tests/test_load_environment.py index 0e1fa4d..4cd35de 100644 --- a/tests/test_load_environment.py +++ b/tests/test_load_environment.py @@ -1,9 +1,12 @@ +import pathlib from openalea.plantgl.scenegraph import QuadSet, Shape from openalea.plantgl.all import Scene as pglScene from openalea.spice import Scene from openalea.spice.loader.load_environment import addEnvironment, addLightDirectionPgl +filepath = pathlib.Path(__file__).parent.resolve() / 'data' + def test_addEnvironment(): sc = Scene() # A list of the coordinates of the square @@ -18,3 +21,11 @@ def test_addEnvironment(): addEnvironment(sc, sh, 400, {},{},{}) addLightDirectionPgl(pglScene([sh]), 1) + + +def test_load_GLTF(): + sc = Scene() + sc.loadModelGLTF(str(filepath / 'cornellbox-water2.glb')) + + assert sc.nFaces() > 0 + From 3fc6a72c1fab4bab3de298e17864febf166bbced Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 17:14:59 +0200 Subject: [PATCH 22/27] removing result directory in test --- tests/test_simple_simulation.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_simple_simulation.py b/tests/test_simple_simulation.py index bfe7d0a..cdf834a 100644 --- a/tests/test_simple_simulation.py +++ b/tests/test_simple_simulation.py @@ -6,6 +6,7 @@ from openalea.spice.configuration import Configuration from openalea.spice.simulator import Simulator +import shutil filepath = pathlib.Path(__file__).parent.resolve() / 'data' @@ -84,6 +85,8 @@ def test_simple_simulation(): str(filepath / "point_calibration.csv")) simulator.results.writeResults() + shutil.rmtree('./results') + @pytest.mark.skip(reason="Segfault with pytest") def test_visualization(): From 2b84b41e88d3421726d2afd7c86762330704b01a Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 17:26:39 +0200 Subject: [PATCH 23/27] setting minimum mac version --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3374c41..d92acc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ endif() # apple newer C++ features with old SDK if(APPLE) set(CMAKE_CXX_FLAGS "${CXXFLAGS} -D_LIBCPP_DISABLE_AVAILABILITY") + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") endif() # Embree4 From 03433fee2d9e7428f7685d0abd70f949e4078f7a Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Thu, 9 Jul 2026 17:22:15 +0200 Subject: [PATCH 24/27] [ci skip] adding missing dep in dev env --- conda/environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/conda/environment.yml b/conda/environment.yml index 02e2691..975532f 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -10,6 +10,7 @@ dependencies: - embree - make - cxx-compiler + - tinygltf - cmake - tbb - tbb-devel From a35dbdfa2dea76dcee9128a8414f0cffea640354 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Wed, 5 Aug 2026 17:31:35 +0200 Subject: [PATCH 25/27] Cleaning some code (unused imports, etc...) --- src/openalea/spice/loader/load_plant.py | 2 +- src/openalea/spice/reader/read_rad_geo.py | 32 +++++++++++------------ src/openalea/spice/simulator.py | 2 -- tests/test_simple_simulation.py | 4 +-- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/openalea/spice/loader/load_plant.py b/src/openalea/spice/loader/load_plant.py index 94462d2..bf117b7 100644 --- a/src/openalea/spice/loader/load_plant.py +++ b/src/openalea/spice/loader/load_plant.py @@ -1,6 +1,6 @@ try: from openalea.lpy import Lsystem -except: +except ImportError: pass from openalea.spice import ( diff --git a/src/openalea/spice/reader/read_rad_geo.py b/src/openalea/spice/reader/read_rad_geo.py index 01ab62a..e09c256 100644 --- a/src/openalea/spice/reader/read_rad_geo.py +++ b/src/openalea/spice/reader/read_rad_geo.py @@ -188,12 +188,12 @@ def read_rad(file: Path, scale_factor: float, invert_normals: bool): if type in ("point_light", "point"): i += 1 vert = [] - l = re.split(r"\s+|;+", lines[i]) + line = re.split(r"\s+|;+", lines[i]) vert.append( ( - float(l[0]) / scale_factor, - float(l[1]) / scale_factor, - float(l[2]) / scale_factor, + float(line[0]) / scale_factor, + float(line[1]) / scale_factor, + float(line[2]) / scale_factor, ) ) shapes[name] = { @@ -209,15 +209,15 @@ def read_rad(file: Path, scale_factor: float, invert_normals: bool): tmp = i + 1 nbCoords = int(size / 3) if type == "cylinder": - l = re.split(r"\s+|;+", lines[i + 1]) + l1 = re.split(r"\s+|;+", lines[i + 1]) l2 = re.split(r"\s+|;+", lines[i + 2]) l3 = re.split(r"\s+|;+", lines[i + 3]) r = float(l3[0]) / scale_factor x, y, z = ( - float(l[0]) / scale_factor, - float(l[1]) / scale_factor, - float(l[2]) / scale_factor, + float(l1[0]) / scale_factor, + float(l1[1]) / scale_factor, + float(l1[2]) / scale_factor, ) x2, y2, z2 = ( float(l2[0]) / scale_factor, @@ -237,16 +237,16 @@ def read_rad(file: Path, scale_factor: float, invert_normals: bool): } i += 3 elif type == "cone": - l = re.split(r"\s+|;+", lines[i + 1]) + l1 = re.split(r"\s+|;+", lines[i + 1]) l2 = re.split(r"\s+|;+", lines[i + 2]) l3 = re.split(r"\s+|;+", lines[i + 3]) r = float(l3[0]) / scale_factor r2 = float(l3[1]) / scale_factor x, y, z = ( - float(l[0]) / scale_factor, - float(l[1]) / scale_factor, - float(l[2]) / scale_factor, + float(l1[0]) / scale_factor, + float(l1[1]) / scale_factor, + float(l1[2]) / scale_factor, ) x2, y2, z2 = ( float(l2[0]) / scale_factor, @@ -288,12 +288,12 @@ def read_rad(file: Path, scale_factor: float, invert_normals: bool): i += 3 else: for j in range(tmp, tmp + nbCoords): - l = re.split(r"\s+|;+", lines[j]) + line = re.split(r"\s+|;+", lines[j]) vert.append( ( - float(l[0]) / scale_factor, - float(l[1]) / scale_factor, - float(l[2]) / scale_factor, + float(line[0]) / scale_factor, + float(line[1]) / scale_factor, + float(line[2]) / scale_factor, ) ) i = j diff --git a/src/openalea/spice/simulator.py b/src/openalea/spice/simulator.py index a8295d5..29c7684 100644 --- a/src/openalea/spice/simulator.py +++ b/src/openalea/spice/simulator.py @@ -688,7 +688,6 @@ def r(): light_id = phmap.getIthPhoton(i).lightId photons.append(((photon[0], photon[1], photon[2]), light_id)) if mode == "oawidgets": - from openalea.widgets.plantgl import PlantGL import k3d from k3d.colormaps import matplotlib_color_maps @@ -774,7 +773,6 @@ def r(): pgl.Viewer.display(ph_sc) return None elif mode == "oawidgets": - from openalea.widgets.plantgl import PlantGL import k3d from k3d.colormaps import matplotlib_color_maps diff --git a/tests/test_simple_simulation.py b/tests/test_simple_simulation.py index cdf834a..c03da15 100644 --- a/tests/test_simple_simulation.py +++ b/tests/test_simple_simulation.py @@ -12,10 +12,10 @@ def test_configuration(): simulator = Simulator(config_file=filepath / "simulation.ini") - assert type(simulator.configuration) == Configuration + assert type(simulator.configuration) is Configuration simulator.configuration.read_file(filepath / "simulation_2.ini") - assert type(simulator.configuration) == Configuration + assert type(simulator.configuration) is Configuration assert simulator.configuration.KEEP_ALL == 0 try: From 91e53718f13cc9fd830d5a0b6021cefe3543265e Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Tue, 29 Sep 2026 16:35:16 +0200 Subject: [PATCH 26/27] Adding PIC flag for libraries --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d92acc5..56443d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,9 @@ option(BUILD_CXX_EXAMPLE "build c++ example" OFF) option(HIP "GPU support with HIP" OFF) +# --- Setting flags +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + # --- Build setup find_package(TBB CONFIG REQUIRED) find_package(Threads REQUIRED) @@ -48,7 +51,7 @@ set(TINYGLTF_BUILD_EXAMPLES OFF CACHE INTERNAL "") FetchContent_Declare( tinygltf GIT_REPOSITORY https://github.com/syoyo/tinygltf.git - GIT_TAG release + GIT_TAG v2.9.7 ) # Bring both packages into the build tree From 36c94e16cd501471c84dd7e006a2442742907baf Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Tue, 29 Sep 2026 18:56:06 +0200 Subject: [PATCH 27/27] [ci skip] removing unneeded includes --- src/cpp/include/image.cpp | 1 + src/cpp/include/image.hpp | 4 ---- src/cpp/include/material.hpp | 1 - src/cpp/include/primitive.hpp | 1 - src/cpp/include/scene.hpp | 1 - 5 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/cpp/include/image.cpp b/src/cpp/include/image.cpp index b201008..2cc351b 100644 --- a/src/cpp/include/image.cpp +++ b/src/cpp/include/image.cpp @@ -1,4 +1,5 @@ #include "image.hpp" +#include Image::Image(unsigned int width, unsigned int height) : width(width) diff --git a/src/cpp/include/image.hpp b/src/cpp/include/image.hpp index b6a50d6..b2d1785 100644 --- a/src/cpp/include/image.hpp +++ b/src/cpp/include/image.hpp @@ -1,10 +1,6 @@ #ifndef IMAGE_H #define IMAGE_H -#include - -#include -#include #include #include diff --git a/src/cpp/include/material.hpp b/src/cpp/include/material.hpp index 0577d70..cd1eb39 100644 --- a/src/cpp/include/material.hpp +++ b/src/cpp/include/material.hpp @@ -4,7 +4,6 @@ #include "core.hpp" #include "sampler.hpp" #include -#include struct Material { diff --git a/src/cpp/include/primitive.hpp b/src/cpp/include/primitive.hpp index fad2b74..c79c947 100644 --- a/src/cpp/include/primitive.hpp +++ b/src/cpp/include/primitive.hpp @@ -1,7 +1,6 @@ #ifndef PRIMITIVE_H #define PRIMITIVE_H -#include #include #include diff --git a/src/cpp/include/scene.hpp b/src/cpp/include/scene.hpp index 3ed1e18..8d95613 100644 --- a/src/cpp/include/scene.hpp +++ b/src/cpp/include/scene.hpp @@ -3,7 +3,6 @@ #include #include -#include #include #include

    lp_?ED_OJcEumKBm+s>fOzpV0$=3)MLDG{^IZQrQihd*DPiTZs0C*b4(?2CH7 z*}!-7rb7T{eMWtIAXC2(o{HD82lHr5zYz5L z64`LM2~{>Hb1_%d+6w~ogs>_P~a#D3l7OBzMB4(0M# zlgrLNN~hd|x#wrWlTPoYH@kz8I}e}s4LfMXq+sA^qR{V-hE5B{Z-iRTWj#5p3I3CB z<+5-!*3V$Js1F`{kChbGEts!eK+e>=rL)d_2$&M*jG#qXfouy*W>TI0KWvO2qe;!>N9zhF=)5g~R zeE))$pLF`5{AlmbPj_oMxWql>yqP~|&D8RmBe}|(;cfXk=BL|c9aF|Sv}F?;%vBq2 zR@Qy>n~}u__cWr&6&uvoc}8#=>rvO{)SRu1a$iqNZ$Q8(mg^L^jq6lpd|E!``dm%O&1b00>iYYyUb8ktbm&Vg#$ z9B9&uf59BNm-=EHd|Yq-rv!P$sqXW!r)Zxj)*dmc-6(LChuvk$X)$>lsHGEbvUJ&?tjcG*g&87}I3=uK|*(<{3#+pC*#UQ1I?D&v;fsvTAM z(%2nRoOV}HU2?OyhjEt@QMIhP09eqtQ7Ov)cg0m5)^H1-^@?-3uc8?8%^OE0!}GR4 zEbWlR0pUv&o46Zd*h?e41?DO%j%SG6kW41YL8X@01;umR>~R=T@lT;eb4UkA2R5b-B7-D;VU3)~dNYv3>4l(t4L zUdKtP(|w;Vx}uTKy4O>t>w|O+E@XnASykCLXU)m`$=Hv&lvY;OEvxCjIFrpIK5Mc= zwrHH9;A!K0S#$i=ca1}j%tC&k#=derWff*y%aYb6Ig} zno4VQ|6({P8Xv4jxXxo!i{Lr+h6d71c)eC?l&2eCEu89D8hL2YSDlMV6paM0IP*n0 zaqfLAZ8?;|vuti6m%cl-UX{Ta2n_KbP-ho2?=OJGe$8i>@C z^JJ|U_{nn{u{`V&^(zT}=2mMlBE^?)f~WC0w%i|_q2pKR1l>H@$u>fMYXePvjWU=o zg~@~9Sf1-&iuZVj$PM|Db?75&Jqnbk;L%sPP6;l*zX3eT{#QTzcMtlVM0nzL>dnJe zxk6)(tV5@se5t$}+lD|-l+~>WCUD8ojVF1b2fQ2y9-kY383;Xo=T3aFT1);g02vl9 zWBG0ha&nQ4(sM&J*Ryf|Gke-UJ(Alzcjt+Y$Ro~g#{uv#H?06%A~cNeerv`5eaG6K z8C(P(aM}+Kw42c5lnCTfp&rP=6MVcB<|qGP1zz(!SmUhn)eIl_9e5y$q8B2D1O3nb!tZ=zjdlc zcYZHYyWE8za$Hq9Rz69M2?T$yePvqGWR5!QXcpTfSD>#aXQ;l-G1H$~mc|dCrrz$7 z&C%6M)BTm<%E0oOy#MMbP2W%Bl#S8AdtW$eOcNIG79tY^jY>gs}80VP!;_D zAsuutt69;lU}zA!%+R?usY>Oc1*q76t?ua1+EnLQCMPvNsIytwkh(m`WPLrUyRy3} zy}6&s$EM^LSszaJafjb}CQojDQ}_KjQ-@kcw%h+u=laQyvYd^W;r`bByC%4Xgwk;b zBa7h`#lP#r&cTsnKFG*v5e>wVeKGV5uYc@nF8)3KW@!hS58ti(J!*)DH9OJklHjN~ zXv7uw?)2Uxle;8&ix>I*=`DJS-z9y-#K|Km_(eKTzvU-7TP2d~%yiyS5GYoxn@;P& z$sF}6SS*a4Lzna5qqQzdobg&fd1DRWsC5=!+AXE!t_C*Mb`o7`B-8l>Jx?=jCe8&W zQ|-HYaQwQ6sjJq3KcQ#SjorkfkQ6#zN)Mm!t|GkNZfXbqW( zP1Z-y`{{X{MJq8x9-->v^*mu6)z&{m8}zC;nu2DY+jBjT1^qcc`m z8xN4!Ww=F!KA#oZy9<+1_vj?D7~br05hJfXrUB3k@4DSgj7WM(jZKizkmew^y?;w( z;R*It)))1Lf2Jm=jraGhB}}h>r)oX)h5BpZZ)O6&RXtlTtt2d6Ou06&uNRi3g$yXp z9r3!ss}kbBuoC>Lr=G*>nTqa8T7xdGV@00*0~~4XA>EN;mAM4?>dOag)HwjNcnYknaBuqe_`g_LMq)M0 z^1yF&j?u;KvF5M~SWogCboQHVc+rSIc(QH{a4;L-U{*0Ux~%PW`PDnYH(OfiRsf?J z0G#uBo|SG!Vnfb{-mT72OWjW7_AMU_p4HJW+JFH~*$+5R+Jgt$ty#|O`B;nm1)+W2 z&=sEC(1LB;skO^>XZyKYUeW82R`c0|Jr_b7&RN<;5yah4H~PdJ*WP~Z4K1aXJIdAC zh!4KJdWx1e&seQ3%+gf0X)>_N92p#!<*8ihN6- z_qxj~@CjUU;Uz70X(i?*P?0F4q>C7i|d4h|qwK#{n z9ezY1NzJ7@{FFw=JfvF{o68>1iNADxPz2BU7q^+X+F7>RkjoDe?$N_v&Ex}c%xLUw zy5`VKw%P&@zkURecj#G8a6q8W-qZB}e(VVGi5s z&Qj+W4)QU0Uzf_AqB7R@^5M5^{xm+Dj^1w|=b7g)^jCD>ufD8dox|trWsokRt}M(} z7;bBz@sDg}+(Nv+k)(fdn<^%@G93J_wZ&9Ayvjz--)ZC?;aXZ-*IHT{;iaE+oOZvf zBHemsa^J6qsAkhj@-Dbo7i#XOIz7ru?U4+g(qk9RdSoSC7G|*1sjXCTv!zt~WpL<~ zO%xGdLOul+SG`~@{R}gc`F-3rvFyE1vgjj7b@)l>Bu=CH@dCsNv=N9q#P;hR4v(8vw<)#ly6p_(?7YAJWr zAJ72C?d?ZA^oBYPJ%!KXZsdC9irT7DHtTF-X^8VB)v;YR_q`oXl{Vz7VbHL9RSu!m zz0arxBcX?C89-}y<*1hJ!Kb?DR|Lb^e>GEm@d92euY8K&IWG?B)f{{15I++&bknIb zFBth=pO&;XAr0CnXnB@2rJ7TYssb9Q!afwdP_>za&*ZCWOn`|-4tFKza}7C&WU}7shqZbEEnWDbN4#%v-&lPM^tOh-5P)c|8_VJJJg(= z+*O|bZ3sM)TsSxudEb76_|``k%x_elbhbagk7~gha9vtF=nLKib2OgKv#p)syUh5$ zI!<}sgx^GYaf@*9ZGJc6J5RlM44&Ca&_o0b@n-1@tmadF)U|DpD+r&cTXlHy^fvse z9K4P<)nb!kK5W)N#}}PyK*NezPB(C&t*RBlZECmo<lUb2p3ERO%XDW1rd;R6xg^gZY*d_Od?Ds7GWlr{0D}Y5k)j z7)}{rBUzZITxboyNv9CLdD!m9LjZ{=dVKTZQ`k z_z^0#sU3fTcgi+-fJUDV<6ZsWqtaprt+fs3lcD(COKu^*k74Wx&+08**3+4{VVnsL zTWZQ``i0jO4dAw&U0LLH`mHc%cfcJQwv0;d594z7h5noisnWVIwgTo~Uq6=~PYC1f zz<)}WpGm#ShVi3~g7-I?LJdcR^6*iZs}_u=GA5yH+go6-8c5^kg@DTp&7)NhI(jFV zw_{$=dt5Aaj}7JqYXv7phtY?s!F)ay7>-$6>R2h5M+(8P(4#UBgRpl23vzI$@=t;| zDNyi>BTlq1F9><*@I0AlM{&D@cntQG3)^eZ&Ws>rE+LO;L^D&{Fc9N$OFU0`Hw z>K_C@Z+J&rB`Jd+2l4=Lb-d(IWk+ft>lH1pf2$}4`>u2TNgbC{KQ&~Lh%{Qfg&7o?6O*T(9yjC*cL)F0q zej42#D+$}Xt7|S~@x>Omm3hx%)o@$j?HQMf9RC+@u@8+@4|-@*mui%YEuorbpY4zzIa9p3RQZl_w)phU}!BtP1}m1|7;` z?b_K&llc^-@<#VXZ9B)}KtSdg;CX-*@nWt$p#!?Bx-eGrsH_~D$x|+RdKT7N zk*Qi<9NvoKFEj*4;D77+oPY?f_DQiqu7qt~tqF&2#zcw+rL|o!VS*?;U66lh>f8 z@QKYq#%msMT}QbMeE3KOnMVT~$%2;fNpQ}ho>T2*wX(>_n2jv>P&@gpR1P;-Z=jo% z8pymS*}U?(EK(ySeXJ|(ftPC63(7xIM;7+itG;N-YKg6MZlG3aVN!%C@<#^%isy|Tj}vzD|rZ7 z-R%=M(HEno{AGn%Rq|TeKc$2W_>#{1(pS&X*J>b=8!-S-5;y#GLUc8c`y}U z3~y3AcY~hwrBYk&s9(XaJ`~@L9Q)l+^3*TZ*<5S1FRf0@RUhofTJgynS;R*5=WX=hISQrj)T@Jl zh9 zrF;h0<6F%s52dx_!Kg_Vj_!fEDX=VG6+SB6c*<3G{#XuwJ1vea8nxnL z)+%>@){*;eK~A3?J|`{~9+s_mJnFRZt)e-wZ)@%Wyesc)d+u!I0smcihdvGG)gL|h zUS*Z(P$>6X2G5X(@Gx-;<_)DZ{PdpSZ#@F|!VvJQYr$t=u^(43YS0Ix9!T_I*Rt>t zfaWfDp*NRlsqhEP^|n6XA~@K;$2-ndcu_0lF8LBa`l4`Jmf-SdJ$c?9;?%*I2bm+I zuRQa|W&$&*mOQW=bK89Iqn5ScTb0jUx4 zGJN;~j{A>p$Ze1L@Ck4;y7|`U@!;0Zua0~Kmpa(n{P?&Pbi}5$kazCK6)Pd5XP-4R zxo!W{oYw-X!rRrKEmp&))VvaRdhgHX)dXwLV+}kUz>_f#I#;C(Q~f}miTTv{;iZby zik-&=g4>H)sBXz3b>qMFfZtw4#^USq!Mp?fnagITmS3af0$DzOw;5Yc-VUZd#WLOxtL0{n1`c9F0 zQlA&bw{(&n!>>_k-*CQ#`u2$VB|7&$9N!n8KlL1KOlZdmz>B_?KSQDABiI77NdGZ8 z)P79_ZyF45tB4F*9N3lMmD2r;+f>mi+Dz z@=pgvaq291Sf%Zv6JG7Ptv&wlqs??9vOU*yMCR1h^>oFpJ>LwI+`rfwdi5@XQ}Mc` zM=}+E62ay_kZpZ?87U_txD+%I6Fw}YIl2hGzglIVoVm0wBjOMK-1F8<`n@EA$KqKw zZ8Vjdw2k1ScwRzhj-?;F+p+c{W{x&PFb8kP3&B5sSE@Iy+Y-)o_aRSYLnq8t!;u$> z`!=^7O*VufM;AUDS^hLVB#e{yz_-f8i}tk$!+HQN*>!jNQZbos%03YW9t3)s1D}+dm%?}g z=GPm1A1Tf_?g>8m@i*s{)u^8f@GOkns8jCF3FDe&fO`b)RNPkXgia@eYwWZly?2V* zHzk9=M3kZ3Wj3gbF@N!LDMM$*uU0#{!C$4k6-BFy)Y!9`?C4U8OoQgDZQDTW-Nlk- z#mrV?pg*eG&w|!2nyzYGvbb7Lb4pr2MNL4BcfM1xB6GdVOw zyhXc~(eT4G^5a(lMKIp3!5zpBGt-fM+KGozovA{Uk*_xEAZ`xqK^wq@9=^Ya*!+F~ ztpuihrtu&VGItc^_+)VWgi)gL?nGLWpUztvju$iA%%B!SfcJKsBC;apLd%rSBj!#Q z0qvJkh2aLiv2UhGx|U3y?gsdZ&k`g1rqHjc$fln#SA^&80#>Z&HK}t%iQWfj(|qI+ z+?XX=RX9qufX9}kSz=o2lN6bU_q3TUwpbZyPE!L12G10`eRJvQ2m|*jJ54-adxjn+ z8Q5v$cv00YpMC>dKASm8G%tCHEZZA+!^J`3wf8lOZf4+aR((XJz+0%{44h!-E{aFp zquZ%^^xJXb>z2o~0+{dyuMXnu?*eL8y)fr4Ql#X)rP~gA_Q?(tSyet$Tu1c0`aoeZ z;X7SkspoCNTWpPl8`Kg#AFJpgdYhWUe?iYv%C->Y?298iOV3uOj^fl^bFP4MEODZa zIO$Z9ZG*stSXM=B-Bt?z5Bfs>xmaAe40Mosc)VDOJB!NkICH%Jvze&%tO7iz;mbPn zgDxH(`c_zDH-EZW1e?9nstR~Cg?#B#x|QbDcy(L&m##Rjb6X8;b`5xFtM=(`?6+Z; zXq9JdO3__#v*ki>w5u+wb^XrOI{$!m2NTEW}y1bB&0 zQ*@Iw#SA*2u}h+-g==elQAtN>=FQ&v(X*!IMKP!9Q?pM}FVhlPyrgoc$5Q(Q`aG12u+O zeiXO2*TAb7dh>?u*(+Vc({j6dVYX(rTmYZIUf#T@26Omml~<)Ro3v+e(BNTsOJPXV z;NKv4Gp<>oZ`lvHq$ECFs|?zUeME)C==g?a&iuE?3^*mx&fhlXrq?Pj|)}~+lO*Nlonj`n#%Ul zp8lou>X6ZsZ!@-zg0o64m3-i7&qSM)~?-tlG^F+=&xUl@cOZd4lzG zw0URU;@dNod!I77!RzL_93H7QZk5G7H{Mfb^c<+x2nTl}@rLs9b8od9>im)=@)ehy zF6u34WR6zNQtsY~Rt-C|kaeq9#;D?dZm?idplSl#;Glb|@_CuJ+HeOj z1hYL#a);LHuDRf!1Z`6?jytQX1GBjEgpJCRTsyS_bTQlWS1W z$p^v-o^PuL$19El^2OI1&?d_$rS^6q+$I`%z$dRFn8S?3?IOJy@*Q%V73XUU#Bq2u zl^kQQyxBQi44j1AqU!aPy}M(@k-gCGjH{tMb8!>jaQx%j^2)4)vSJEwjNK>Nwc7hjNgIAh=afzf^NxBT|gJ}=*G|BE3y0|Cs$hxyfvv^CGr_<6*)@+=rnLBo% zCUiQqKMR~Sp2hMsmw-hmlW%xlTU%WjH#(DbXG?hA>gT1*I-Q9;H)rkUkX}j+a0O?+ zcv56fk376X+2{!!(}g*@E}6%b`Owi!_1UR2$;nk>asS-!Y1B=Qzp1%x6*S@FM&EvZN65 z&BW)w?9EU8qopmAzq- z`1kmoXT2ykHIqfLSt8@gAmoZ=!h>|a@aU327Hd!stXT{@&?ywsB7=__SBTOjXVR-H z>AY^pYSH5ETspER9o``8M2FY~wBe0`y$mzOgiQ;`J3gJShHMa{?3PjnW>SssZ4e1R zk|}PafxA@OAiCUHN9%6uxuJ2km^E@et#1O|$Ni0B@U9fP`bp2ZwKog>xLxG-Ru7Ml zO=5Gv0UB1I=Ov9cikNFhNQ?cwvFCbGx$8;#WDmcfhik<7F_M;aL#|WV)neS3OsYE9 zz}wSSh+K-Txx3 z-(+CBv-3osq^oo-(7!9b5`%^{9(QoM^>YvlWi6YJV6P?|Gb4ed5W*+=Tdw1!%mqWbh)EITeet4u$ z>LDD}V!UX(9vQ)1MYT0%{BDIFS=v#e;Rti?8;;Kp4-}_QS|Ep2kIW4&Qg7IU<1+Lr z^bXHjh%xW2*yOQf8(&A!sdqUZ@&*1C_6^Z&^c#kP>bb(VEW1f#JhEJb$^)j3CX7tGR zRln%2dpBo`Qkb&@e$Z8{>c;gyX*n?MyRQ8HR$LkS=p)ODiN!kj6oJEU^|-j$IRyNb zec&0k+^GxRPdqrXFbm#7bh_fr*66QeyI6?0J$_u>9@&4riVFb_YD`b~7cDXsLpO!6 zZY4Zz5=;c8CQ8pFE&3LhKU#^0;1pS`1lPrNqI81)`KDIj0#}+pr|L*z6wUS>*khuX;ll z0KV~EYp!G8PpZII6QZp7V4Xhj*?<;fMOEfUJ>>pr@VvFIjNH<$^3wzz558Z4uk7n2 zwQr#TxmlL)Zi|xU_vWWoe-7c*nrqm;Iz~Z~bNI^YA%AripJ=KWSy2&IwgN(vOGUa!b#2-d6rU z(k&(#X_3LpzrCOVvpr?YPMMgqKcRk0TFaiZjmSHFOcm4Jaa$-vvf_Y_* z?*m%)!&UZsmd(E!-=kCaTgX}PBnhv5rwBHi?AbylRL$jDdu~ygOc$AHpUagl+#vn) z<}$KQF1z_%qucq;a<6SJm%4F@=Ja-!4I1V0_mStJWo#zj`Q-90=dk>7@B)|3_c2E>ll^a_nT_`)uU- zsAL$?K#p1i&b&ca1Z(w9tS7BH!z0D|Bqc7ciySd{#YCsUzrt2#VNSiH^D)|8s+Ob) znQSzs($KZma{hx1Hdyba4tuJ~az`_`jOz~aF{v!eVLeYsPoa!;?|Q$Y)$8(@PKME%}kE$mCl|SNmSX}L{0>+!1!n; z6(8|c{e;>tD1S0N`}9r~&?ekY9ZS=Gzf$|R&IE2ZlHN6Vt`_=04(c+1+8lYJPTy+e zq+7kH^_quj@zX}`bfpX3x45hNn`QCfQ_=8MzM;Mcc3L%Qcw>d-iwXIu*;`TCN& z0Q`jaQT|2n*op(st8eaOc2mcPj%~?PYrspV>kThTYjsNPD2@E3x`rymW~r$Lc)v%v z(&$u!TId_OuvjCye@sS|ExFPZaAQggDT1|bUD%T6?FCo7&OnCKH2Y^GA9iX#{`A_N zpP^52zSf8DRrKY{&{U4B(2N(H@Z|x}ZJqn<2%il-YV>z z7WjuZz7QOuA^n0l#S0$V7Uhsb8^rIylaE1Wd*rxazS{zP!Y`IgmLWW6y2_m#qckDWx$LUEoK8_LtLfB8Hy1#X8qDfY^n1B+ol3FD{O6EEt2)A*z?b~~)+6L~-A z#{=Md;91R>{FPF?!g&j{y(i*6lCnCSv*zeIwDQ{`SfaBw9G>@j@F-qUY2;UJUkhDf z{TEc@ZaBB>1kTm$C-g6tXg#7GoBH8+wFk7XN(6^l>iJ~IZEDmtg5#iHc#wLPl=Hyf zO6!6DU!d4k?fDnpzxQVzomV3H8hZRYr%us0vnZ~Go_+g~ELwReicetw9osdXqMJvf zUxw%56&*!?i{{2Tk{d=Grv(#ZFdu*pG2jrrtRBnWj^Nhr-bW|<#PXFGJ+G{{i$WI0 z@}*VS>z8k(v5C_GLND~6blbznp~PmeeOl^C<|}{&caK4b`&qh?EC%i@nkF(#ai$=vnLOy=sA(B z2Uh>Uqc6F&iRACL;HmbGqe|r?xhs0=a;w|ZN6{Ysg(}}~8$?;aIWI%s>OQ;;9W_Mo zIn1o5wQNn(c1Q4f%($JWI3wdVg1@*3-ua**m3$n*{tvO2ovTR|tF-5yH=&maFGrR9 z+hc|!c-^+*v}JO8egwR|*3(Z)tWSGBY$tej`cuWnv^{$~gD3giOG+X>=S>!P7oVk) zvM7SLtb&g3=^iDwLj?N{K<3V-70NpNrmeB}#cY_Oz(<#RqhDTgG)h_dvK>#)&~onH z+KS_icEH21r*FNj>3*smd(Fh`yNZt{BBdR$1>hdbqqSovwBxa;ABMP2(cS4V40+}7 z-Z`AD+#f$moe8g}xo0mZR*Uuo{Cc;#A|?;;t0yZGi%<=>uhh+Ba;R1W(~%`QqEt6M^OZ7f`Gm4A=RfE=L# zzWQsbi}I$OS{K$E}PRh(ChY#n<`b2h?4H2w`p5CC z;3jy*A7*Q+TO@0r&C29@?miml6Hh#Q_Ce0a=R!O%za~J-Xicl+E}ss{Z4Wc3x0N|G|$@? zB`aYTreAK!Gpstu%cli@8Dt4wOoV(~7ITCN7JN?^B`pW3n6sDQAp^r@#x%(zBFwpG z^Y(H#-ZTDgajtkPMA~@kxz7Sq_-KdAUnek+us3D9lEHFrBLiPvZo=&%LS@2MtVL$< zL5&WU$)gP%Du0kenj`HN6$a)7)^+Wo4 zYM8TA)j%VVp?j(X$bD*$s_E?XCg~8SGvASR?CAM z+a%iUOz=BpBXIJs{cS|}sp51A{dm-qhQi`vdD`?nlP7g;E|zbtNiEtT zGqj@1m1h_Ay z9_`b)WX^HXp~fnDdDFmk^G=8{H`mknod(V;k%s;>1$hPrV1sGmxZf^1gS^+eW@)1J z+Wk~2#K4uN9YwzkZZ;b@yLYN+Q{p5=#Tf8=9T4pvs?-d<`L+*x#k-XmG;1le&kc5o zX6KsO{S=)7@SJ$g_5HpAp z{nm<&np>0@WnlLfYlLg)Jz4@xVDiUR;@+mmbo{cuFmp|eA5=iCFM_{qy;9_j`44*` zyt3UEisdF+0ox+2hEHvKuGL-m-*GF7Wxh!J^9$D<;$c)nCU6^Dkxj zPA)vaMX0dOE)Q;>WHppU^Vb!zUZNi8>0YEypZByfyN63&YTI0-wW!ADuB$vIzNuKH zw`N)i{MoXp7|_m!pMV2tNNOZpJZ;$=IREbTbw!&}_23gBxXr{mVsJ4#c%(DqQT@4)O3aU0*=CcemIX>BY1lAdZKV$Js+p#FLRs=bBSa)bb{`g zP58==iE`f{Ee|c%n2$9bFN4ujr{X-$KOG}WY|_F*%np9Iqopfw?{gdLainI1w8;Y} z?UF6edNM@DnZg%0u@+`~gXGCAI*#vAlU>UXlwRnyHD8hc)vKR84z8v%=IoE{`^d(_ z;FEl`5@$B-DIYA+@oHTKzUkammLH2em-MpWQv^zz7Y1aUd?l|N{xb9v`q|$f;GgLy zTRW!n^H*=^+BI+4JUJcSi3L=80?9MT_*?h&G5M9#$Vay_`AEV;y6EB|o1VkGQr@Th z)vaVCcw+Up+@ovnTFSZg;eS|g2RI_KkHN>@zV;S8dt7A@+M5xHF6>lAIj&`ciA&w=(Qn@amR$;2VZ+pU&Kc1jaD+5_l%V*_;=)L8z2b~2A7 zSq^cK8xCi~A5ur=I~w9Q%H}QOwKPTBK=x~s&2=uHpbg#Y%hGnxKL#A9e|y{1YV~Av zl`P({>L@k)X)C9h7$=;oR`qAD<$Ls`*eQj znnc4^n91Z?>G1oTNqqxN!+%+XGt0xx0cXzNi&7E{XJ<}kIzkVXJYv}JmU4RH_x^WMD176usiEC1I#4Kj((2CTpr%qjY z2Vz2N_6~XpE!)9Fp0VDA z8(6AbXVL`Bl-xLSIr5$kj^RafTk(`ef-m`_w=LG1&({%{!w%zaJ>XGO7x_@n2J`NV zt+`btf!x*se5Hd2*YAV(pNQub?>zX@YG@n+`tZ?6PhNQ#dN*TF{?FjaacA)PG2Pi} zw1&;^3GQ{Y3unC5aBuV=t(-a+>Pz{jQ{harBWLtM-s>lL8|q`&-<-G;dgRsRqWINE zVt4e;ZG9uKJ}~b^R@cn&VSId|7hkRiU7ke*H@;CmZJpig&q;$e3Fya*WP zqM_h(9rNco;6+>ua^RPPz@h!A<=9eo;0FZqf|AH>KV6smX9NP@0#9;wZQgM(h)eq; zH)>2x-U3Z}KKMu4}^A>@R|?fgnP)FmL-bx?1emPi%F6@+ZE@)O5yM(f*00M(<1$Q znGxZ9ak`!@f0}UK{%~*>^z47&7uh(px&r{Z+*Dm#h%x|MN?5^jL z*YAO67|GAjkB>IFMVqXnkZYvp_q(r9{Dvs5jNZR#oAcD)G#Y$)>_~Dm3zyprCtXA-VW--vAdBLYfaFeo;;F5cD?XQA8H0_Wb)rRYU zvp4ogD6f9ohMi|XTd^aUPloyY@xEvdPItXIKEPPubdKYzG&g`|w=UBm=%_xZ61&hD4C-SMcD0 zzP_w!F8GnoonIvTauD!sw*pt>ry^$*dvVjT%{jVCC*%Se_(PSgbf62e0QCkw>b{A# z&FaLpe;bhZy`JjN?8JA!8u&oHwe)3IC+>CJ0Iu&U@;B?icZceEclYJgIzN{4OTk~R z_hK?#8_V-EByV3okGhYDh0dlhhh-*h>=4UK;Zr*O`&8OECYFcH!5n1xL~1=bmb+G# ztdt!|XCq>H$ra4~xgQOEAHxwU2KzO-Qp(5}E{oUpx+t2NAI)p`Kr5FMLbGQ@!^;~U z6dQesx{aCyFduVQ ztfhxDlo}aPyz7pR`y?Gu?3PBc%Wlk5_ODhpg-3A|u5+HpbY<7{D0Tp5;?X5W30oHh zUrZf;ZQf9M8WV*qMlFY3e5$F1*T?X>%+MIkum%rN6lc)6gk)pmqrYd~! zly1k?|Jj>-emIYvnLfh zjX}vdj9#*!yy*4nfO7FVIP(dnVxZqZ)p;uLiY=){@SOU=ebu;qMpoWzS8g@yrp`0?{4jF#9ZW4U zH0p$p$W8k&N9kY7O>OcHbN0nkm83LBH4J^C>4s5C_Vos8y9Y+@zptNiu$7J4XaeTf z4SFjrc2!U<7@io_yD6JLn5)`GMy|FYR;k&ABKZ z;Cr^1XIFT>;_vw?IA8Jie3f!-Hi=%i4mb8a*4(`}UzEeS>rBsU+=mPo{mV{9hYHxm;a*Ze)M#rrjX-><{x{Ly9Ob9DH8!AF-4g%Ll`Fni?t{c2u|6DhL>q&pFr@(clzt>sd z`qSU*FYvq2-`}Okar}1l_qP-HP3iA%D)3v=-``r`9-zPXfWW;$fA0-}dxrkrGXnP# z{k@mOzx_V$H~M?O72cEd_ns909>@JmfA433`<(vX=K}XX{k{JMo(uZ>TnIcb^!IrY zc#i1rb0qM5(ckAw;JKr}&z->YNQJc`o=1V_l>R=ah0ii@hCk1;z_X0~`_Hp1np{0h zbusI=GCw1>OiTl2g4wz@TkLmKsV3&^i-u&1BegPU1=i=$OVY*A_1WOa8aQjK6b{Eu z(I~5Q&OdfiG@`RK7PG>;JCBOqr!UZ_wFW-vd`O%Ox=L*(7{FCJD3*V`N#D8}II;ac zQ5U-GM!+1dcikgata(g>YZ&x!%T|do&3=2W-ya zXY~9oZ>1RLVZmRv>5)5}EJj&aayegQH+)zktQVH%pi7cVcbO}y*p%ft@Wg&NcZ$g9 zTb_%7d)#BeNRg0H5xI7fZ(SZJ2Iwktw^EW{HSR5{MpT2I3%(G#ZerF`Yd$;)J`x|| zM5jhJJg}_FqgHkl=Ar0s7YnX&D@L4JP>&xD6+EFzM^R;j9iQ$GU-ZCE!n~aWyfp>C z*%c@DdN^`z@W!91aiV(%~Z7UaXOyk7%wjMY0cj2 z(Jy!JEi%?=xSa`duk3q^k-?1b4BzSYy+m-wHk{TDeB&~4qV)woHlK@ncxwl7rcod- zN=N?q!DunHQ^=p$K_MU2FDU$vcj7m{K=`}1#~dEI1C8gO-v0nRpHBxM`}fdf8BkNp zH|I6t{=X*5kMZESIocyPYP{^fK+8#0?D%}a7}F_t+wU(o+G3i zc!@RJ7VY<4Y=+81sH+Qh)?oVzgQXqjTqe7#Lu)ipx}Xj(Td^u9j_4;npgEd6s}if> zedL0PI&P_{z!Tf{lu1E4?s~0kky-Y?IKZr@fzs=ife+pIK(xYN&cXd`a_SA;t>TB= zE@-h|zaVGfEg!v4XM6dW(gn!`^tSJ#A5fp&8fj){WVj1Su@-`+nwuen_N82K7)isArHCe7u!Cb_)%V-AHs zcb4OUA@tmwMKK?mLGzx&if;y0o#7;_4$Q&YuBYC4O=Lu~9Pk(gy)N!3_q>3Y;96}F zOyIR$BY7k{o3Ht$QN=KO`Hr*M-Eh1JK2Y7qP9Ch2&Bo}X^uBHbX*Vv5JH;QN);*9p z-q*+r${r-6dmT9tyun)gc9UDLTC&h@*^0JNo6a@lwy)4=-``BPyHu0@3o_tCxskjw zD#@PL(|K@>wX|V%d0Bj6I(!ya((1Bhq#62R=e3LJa>G*pN7q?LRrP(*UJUHU4ipo` zZnFEMseRgw&({i@`0>j=-M{qbSroF8_X9k82IN$ zXw$9(z%A0)sw(Dpn|^$4uZFAy_5dS$bG^$NuNWuT%oN2HcK1M56~3J@O)x7t@Kb!9 z8rX<4-a7JgXy4n0HsFE_d-B*0MmFnH7acH8VETf6>Q)=M0w?5=j6CH)4K6*=nS<~% zeq$mydm~)<*k1Ty=7F%Wxy>)bPP?$5uf?ZNRs;&@cApVWDZ2kzML&h7e&+_VR@ z9}~`$PgK#}lS>#(ym43-Z8m!HBzt(~2frqs=f#<1;o`31lig&DBHT&h(sfXBnn|83L^ z>ifr^vw18Fy{FK)AO2j&8NU5Pl7$Er*29BEFO3;e*-1-sJq zx0Y|PAAg09eQ?ZM%{MplC^i5A1}nYY**^A7Si00=T-wt zWY>Bv|9f9vy$N}=gEKVCGWdN~8L_AH)Xbdyc+Y8^abFv2pKAE=J})EREB)PYROnV`#E$psq1JObTp}JZ5s4Asq1lhoY89q$JUS<$iMHh;SQym^Z2^|d+)t$5CkSCxVwMW zP<+oIJ~9#er8le9V1uu*$=1lEu90cb$fT~3Y0%N6uA^zt z*QBnmY0%xIuDfZ_NYbU^uy)#?W z*K|!Ee4$iL*YUG;PpRvn8gx>r>!cd=Q>p8xd1g##tWwulHE6Fw*IqSfvO?EnHE6X$ z*J?FrxI))(4Y}t{=)6MLdGkEaJ%>Vn7rOp#fG#g|UETn_Ug&zg0Xn|Wb$kQ#eWC07 z2I&4qUH8xS0~mEbz!~@iVs)QDEc^qux_`h3Ux7jQ6&T?+Fz9{*BYX&&?n5xbpP=df z1S5P4n(kXL!q1@Teg-3a4w~+B5b#21x)(y^o=J^Z#bi?438J1t)G$$&S?L8N|ZkRlD1XD`Q;ib5?8#Vf(1<+{pf^f)#?*n zSIC7$9T5uxe$f6o(5c595Cb~=qo%3YMLX{m?J~{4BSH4fbB`EwssKN-HGy-u2mXXY zxECW&*JYoGY*?7>dO&B7+9Q&N6k#9CzX5%A=6PP@c`-I>aoqImX3UZ$c@i?YL;tK5 zv)`8n%TV#KiOa?8@nBS8hFz;I5|a;F@a7hZkFK0A*0rp}bP0W4FXxE$Gt8=~1(2`2d6b)utf_pCb{mvQU$ObE(h&gd+{4|laq8{?x$VQc)B2MpU$U(!P z7vG*N3LkHbo-KGOJ4_Q(zc%Hobp@C7nj!j(X~~1(EpNJDj=2844Tm%q{Or;^5gFEj z=XZwptk+y|*JMDq6gY<#v&G1EoYNzAY|nJj+`0>QxrF{Bm#OHhw9DC1%gphjP-_R? z>;OOKf1|`@CnxTG9Dn9+Lq&zBF8uDTca7y!wXML_9j#tY1mC_d81=y; z)Jk~KgHo#FzCKjlhOS+v_xVvzb(5M8?8D{=1$15^>5#Tm;huz$<`Ds_U9KQt=O zvo`cmi^m(elCcceI~1*~M`O+%SPJ~C2(_q>k!_|F=d@xWsxdVBA&ZN1xi0}K2KVaU z9f~6N7@+J=2=?D;{mtLyLLCL+Q7UZ-*4|U8RnSzUEy!p1PGKXI= zA?q)-Hae^2xI+$D@Qaqm_EZt>Xv(m!BgF60@GU~9pKPZu>BxcgQUYg41gT9-R8Ps&Kt+K?v^k}EM z)S+=lwRITSR!Mj0(7yI+fmI6M|9y+f+qY9oeZlOFxk+~2+p3T>FnB$$<(YqnO>LuE zwNAy|<_i6p*;~WZQL=mbR&{wr|GVH|7ZCo{Qb~)>XGf z5-0yW03W-R%CZE@_u+1u*|wJYy$e03pSRKDAvIJ+81}UBo5`$SRdoejMfWRhq|Hv1 z)RwGx-1m5Jrmfk~K)pDxGuq>Qqt1uxLfMRWoF@cG!qjX5`mj<+eMmf-z%A!{1- zO*U5>ia_?%;R)l8shU?ezgZ1%{r1+HTx!atV-ZM zZvttf?FVVJMQ&?}7nyB-E6b%PvdbHHavS_oHhBwHnC3*IuRM{JkUMJ_)twrp-j~ZG z@b7-O3pMU}PflK*#8*~Qp85B;Tbj%V&3%GTc8=<{T!CEG-HL5!x9Ntg9GvYjYeKCC zUy%n+BUheOkIKcLm!sSFV-kYGy5mW_{@0T+`9mk&N9g^@NZZ> zc(36skosAmVV{ZnWX?WQgU3ng9w%*Y?G`*F-~aB1JLRn71uvTB&DL61bX_8|gFI}3;?Ur5hhOjD z%Au>eK|_<-U0q;d*zv!kVCGx&~jsd+JO$df1n+@-SD35+8um$JN8SK+_A15 z+f1_KU;8A#Tm=@|VQ}d&%Y1#)Igf@Y{@C%>rC?z(^0I#RT+tOf#+3%})~)t|nZ#ST7@Hu3B7pjVpK*_mC1=!=0*Y;6H9{MwT};aC58!;F{0gFX0d z9B0(e$BP?!afkXQuC(b-o*91}dNHfi#NPYT56U;!i!-{wcUL3t>_7It7pq1l?(g`K zf@gX2ITy^==rPYd`@7WlVOtLq|H}W07C!O8`DkKabT96?>C2sFo8aqzOi`F6Pj)r& z^6Qyo-N}#NS|gi}9`hYBe!LjDyqR-v(8N~$ob9z^ze}{xJ%H13&spekmRef`^6bkd zE^ePh)r^?y&9F}kjiX8Hg818rc(&A~y< z|6$m{Lo~Q>2zo8!xtZEawL69Igaq`IS?+=#AcSk=!_Vx}t#s~hFnnYQU|ejXgKvZJ zzCmtr!g}ghFa+L*1Rk2WhUz^J!nufiV#XqJix1)t*qKa!IhUGG3gYmV(3F#AfW;KV z$18!cnLdR|l?mc`x8pe8HHIqJ3*snb^u{@Wr5zB&$410)RPBCX)&{X{+c;>{;dFTh z=Dx@1EST#@eTM~cIqdmkvRtV&_7&w?;a*hSp88J-;(d5O6#Lc@FxepNt-!^a-<%%c z`RFYCyc}*o_3>+KVPM&(Haw6U&k-D8w^6II zKal^H!aXWsrsjDmkc(6oJh+Ir_Th9Ok82Lyd4DtQ>gzx@zis3$NAhX=9t5((8SrXm z%s2E|8OY8*kRQ43W9!sEkS#)?Wfw9x8d~7@JcbO5?M`FXkN~i7B)fFaC-y7kZ8HDpeuo;lT!QI&c|HP7r1f2`DVtQxYeQqQ_-xu56W10WllletDVRzqf1 z>X}&$xmsj=a&omA^0rdX+iJ++NUmxbIbW&gd@*bPzvsvT zOFav$AtNmHjIf66u+X!^2IPx{o-Z~acP#YWu>pBxq34ke$SDgwr))sBUFg|%1G4Qx z&$b(oaTa>U*%sMnp=Y17GtolNM8_g4ZPc^UvB*#x^$fKU+3Hw5TWv(<+Ms8yjmTmf z^ena!d2NH9*ES;4t?8L=fvmTtXT1e7;F_KR7s!TddNy1jGp^~Gae-Wbrf11T?l~9P zb4|~l3uMwYJ(DhwRoC>add^*XTcucjI?0+Jw{6M4UZLX^-WU)2ZhYV*JP$IQd1p5+ zhuv4rDxuuqYd4;OGcIj(-t%tLBXpixU=K4nfbHO4*@rW6SzkZCxY&-z4is$p-3uH9 zdoGK!@6v2{9v*7XCy;M#uoX9z<58Lu_H%H!EA0Az>r<#G;xTrjIx|_{7 zrAY`|evapq$t%J84dHB7!;V`^Y2r6MSXwXj!aPIBKz!YwbZlK8nV?= z&sJ;5UrRlIts$2!^<1`w?6%ai+Zr<6QqOd2$a+gX>#ZRVF7-UPhMc(6bK)BE<5JI$ zYsi&LJy)KcJ<)VtfdJn?)A_j9ljNM|DmFcU~;CJ3+;NM|VsFcxyM@L((muop;Y zF9qNM|?*a2`nKJc#?5-lX#%1h^2Sb0GwH5v21X1UM3;b0h>D zu%z=P^6WRjrXZb7A;7F4omnBkvLKyhA;7pGopB++zMyf?u)w|$U}BKY#1LR*kj}~w z;AxP~(~#h7kj~kV;BS!5-;iK*kk06kV04hq=#a=TlAd7{@PCr-{}j-ANY{D6u?V?jogW7 zH*6k?sAuUkY>SEixMqr-=kBBL$HX=Nri*IRpU|>?&;@SY6x+YQpqt2QS4zYfccQaZf5<&x8(BDOwgR z$iJZ@M7Nj1esv-EwQ(0ZU=&UNn)AY)Cf@S?v?%3RgolSAU$Ew+c`--79zR79F~vR|$E#;xXHW^>Pb-JOpg9S(`)`(4Wn(@FHco%J2D|%FG#g*`WGf!VHX4GiQ z#V=!bk+ELvS>J&PIlJc88$_pR26hI=c*V+fVt7gBLtq_8q^}fJEYZ0fEYYF3OgN6W z<3Ihtd|S3ynEmR(*|U7{BJ;)9x=vunDGsW9hkvssJ4wz~Ft^;!3$=|TkII+1tFV7mU?zaT1XMb(J{dKG=-yoJ_Kh#7A z)M!<`8xUHy)wy5#2vvU}x`akoVQ-6Js(VT-XIfT*w{@`cw=nY2OBVd}%>ZPepaUkC z<1bGARliwAZXH#I+u!Y@UamGmJ1fP@Z-lE?hwwgpS%j;V4^d&3*`8r@zEv|sIhO-> zw`5UH-X5Up;d}L8U_mY#=d0ojxFa1gLw}F25*;Ml4lRhj4==T+3HBH({t{jCQnT)W zBedU)4|ViVFTN>O_CKjfn1_nQ-}lnazjUv(o3fn^&VTYxs!T2_(-QoLG2f_B6(^NZgGgRZ0c1FyJqnVWQYYX_C|Hc?I&O(O$`5F4O zpqX0UBb5g=J5BGvY_I<-g+rR0B$s22Rp*l_Y-o0zR&;8FF4q)Z=W-;^?!vICq3VGy zxsT?Dz#?v-+^U29yK+DE&Z?`@mL*}Yx0~!QS*f}WFw2{5r@dCS)Ms>s{MfLWHu}_1 zldTf@#Jh!?x7}@*+syEmsTPF0TM)Sond=Yuok{YuEP4Q`ufU$HA8T{c5r-c@T! zHW7E^ok_@Zy>Cnndft>#hZA_skvg>HT12=xK9<%%fOJ02nEXPOa<9l8WI}H!s86=pN zRpzIWp4gAFOvaCH#B?12t~jR|?? z^xX6N{D@$Fuo+pBJ@ri4Z64`eb*nq-uW2A?#XMf0tSmo@;b(5yH{`aIct|W-L5D zm`mdCB{RwiyE{Sb9jEw|dE0EZq}17x8rYIjXG?0}PfDFXsew-=buML|SsolqsdFsz zdHSjs5 z&gV3M+bMN!rvW@qsq;Jy;Cu?5^JxJ8Q|SCp1Gu0<=Ykr*3l%yq)BujC&^e;E;EM{K zFKP?sxzL&C9l%Z(Iy*fUOm(3%)nmb07dmU*2nM@RXRsT=W;g0=b|aYWr*&q#5iECu z&T=<`@ovx=?*fc9gU)^zV8UxU6Fxi3tm&+H0fxLb?hg2(qe*}*ujy=g0p`4>Gv@_Z z^qS717hu%m`l@gYYckpsxPH^Q^L4;&jg;>a}n)45XRvdm|Kg@BXC5e&JoqX5tTYe zR0C^N>a0->JTa;B#5C|orOqSOz$ukFr&I%@OzMm>4J=csvrIKGPNmK`)xbWLI{Q=u z6IJR=)NJM+={)~De@F28NN4^F^a7CH3n0)JKzd(*K#u_FJpuy#0;Kl~2=oq+-a8=B zM?iWXfk0;g>74}vodu+K83=SAkluZe=Q;WjNbg4w=uIHKH$k9Jf%HBFfzAceI~N2x z7fA11z??OSbS|z0FPC&)t^`MybdIhBUzc>gt^{|NbndPM*O9XOT)=gdVDpmB=9OUf zlFsavVEK~H@|9rxlFs;*V4IW9HkV+Vlg>7mVDFI5-jT>Hf~As^Ta@r9lI~HI&}c~4 zXe91Dq~Ceu+-h{FjbxK1Ci8U~oe z!Oo?5LX9|XTprfa`(=6WMRfJXpTaJ}g6BS`+1cihD3nl-EwMLSGU|XRSi_p9zZRUF zxmT>4V}tG*!P}?o5r2^tb;V3NY}!6CYf>vNU ze5>6d@hA|?)w^KJ`0f)gZxesP{N)B1{>aCjdHE@1PHXQFrTW1w=d z$LO5A`NLC{`5%u|b>SzEiK)nwM-GFp8#~GF7Hm8`SoQTXa^H64_^RbVRSjBFlw}!S zAJt#oJZ!{1p(Iz6(Q3eaBbS|59KP{rmAn=CP4l9B<9)C)FAMKMrGo5tz*i0H4V`HC zU%E8MOWm_p=sWsJ-72{$wK@)Zz*qEExTqf$OyF^Uq)$Vg)HwYA%;=IuLkc*mH}_3k zV<|NB1>M!Zka$kL_<%-dbyK&Y!`}OJk0v^IQDq+|z*CVXsd_NT{b`?n@4 zdT$E)mX48admGhlP)bf8>~?mpk9NAv-!&|dXZ6A zbw;MCd;9I+WLT+w<&)SiWi!=!YpEWC53{1^MyhR9L%qhF?mcZS{q0&+wLcRNrtu02 zPpqhhXz^SpVJf4kb z2hslT=IZG%EPS_x#%ow>i6}I3_O~^#ipWjdB;uJ_bL1s z(Us_O+!Z-44)0Q@Vubgq)ZeRweW29$ff{^JQuje=$nr=%%cFtsA$7io20o|M`J5WK z-%{s(Ya{&H@Q}U#y8~=*(vi>BklfUNJa@UE@l4!HU$hv@Ddmx^ZXme-+L6cxcjH#A zkSq5a%D2LxR|RLwD|h-Q5=l%u=;` zu%!}Q{jx9Lo!NtTEfD-;qZcQf?7B>pZ z9ieZ->#I6}E!mU1{TAp-Aoe_mj`De6ZB;e!Cj)xVtHCGVu>-okoY)K+!IGf1ydV7M zZ042mTuX4W|Hs?6)|&ATXLpW;clS!8#vA}&dN$YbW4DGpG7f)-FGf782M@Xj|Hd4B ze!3NptnA4>FM_36(31Ba@#F>Y!{2FGEzeAS4_VQ2*jtuBPyN?$Z$3~)^1FH!c$KRU zSA&P@+2L}$`-=}(#94FUYH5Bo!WVus$xfMI$DIS~%u}&l$zpsi!xy~=V5Z$HjQ)6E zjwlDu_QpbdE!CH&MI)o#tN@?9=F4NAf|Xj*jElgZ+!8xvn@@jf=vF^)Q*aiGU+78k z=h2}i&Z_yH3LNt1ADDB!<3CXY#{ix*2|M8lS!9(Nz@0Hi|5x}mCBuvU2Ohs5zvp>o z>fE#Tm8?KygW@^+j_{{^5PaA1ykPkQnmZ^6EURo5{XObcF_=3k6IbxNLziX;Gc7fN z>v@e1TTSAj=VNM4t(r404GPeomL%4T&j+si)Rm1t# zKNAm(A5SZBpZ{_OXV%4GG+k+xm2-_?zeRCuS*j&%35(!j4(N|=YE9Ea zBiN%<9M4&337>xiUrR<_dr}3mI3La(4=U_Kij&jBaE`-%yZ*!c=!c3xN0!2F;iKkL zHUjx&bR1XC(B3qU;CtBfpO~Ja)m;_AV!{9B?%MkzxM*vM9rH%*P*Ma>s3!S*`V8%N zN(A?w(XzWoz6+O=Vke61t&{T1H~(iF*+W58Hwy}2Vvy&z9wj-TM;17MX&IGkO@ml#bwjn~)`$bIQ21V|Wgqu>BV^alc|1I(Oo@ zoUyjJ)jkxt@;F{^?2+B!EAo^DFh9Uk$y$Qtt)U& zocH-xJE?aN8-BfHsdp0_&{-_?&SC?4jlto}=`}W>?^x=6#|HEuOT7o#fPQ4D_aht7 zn=JL-WCQw?rQWA(K+m$!dzKC8Ulw}*GA@lKq4zS|qOV!#ea+cD&N;bb^f;eJzq8Q$ zonz7aEcD)IBl@6)-Un?&kG#-(P3^` zw+a&}WhQB@zb0|X#{)%3`XX)7R(RfyPY~v1cWX<%(N|S$npl1^K|4DP9>0Y%@;t8| zl&%d%X52Y#w)j!uwYCIY!5*%QMf1`>G&AT3jl5Qh+%xQfj|IuNB$*3$T@QUNgy+ZP zOB|bP#S)`7VoIPjl1f!HI7GLc>_<5lL~}?>3rE&G^vNHdiW-exBd5$ z{%&wm!yK}?c~5BR-?r>D|9|%oQ-^l^WTxca?^9?ti zTh$5qLUdrQa%M)4(%Kr(n~FK{OlK!vj=rJ7;f}~&I&psV2Spv|!3F)C_(>VX$G6+_ z`|VB~{#UZ^g>K;NIPvK{$erEq0>2JA*+V2>?%#=@w{_-Q)iFmDBtDAXtnvE=I1jd* zJP5vJu)p5VXpi&PmFs4K(>0|HJ9cwpyG`)FS+?ZB%Wk}6i4i>_O}W}^*(V8J>%H<)caJ9+qw2$k}tDFB)j_K`=S% zrHBZlJzaW?E{U5LMOsl;D$^N!s!cZpIwh&zaQKIZ+!cQAR+=kZqWV0%xXv38he%P&`^eix*ibukq{I0M> zXFam1Ii2+qUG}7R*(2*Yi}a3rd7{ib@^MJ!WDg6O`EMZw-%sKuK^0~1am#43e-eLa zT1iG;Sxr6uqLVSXlC0vrflfm&Yx%FTTwflkXy{WukyT`HgW=Z$WO6X9e>rfK21MoRH zvxEFS=Ozv8gZ{p^MdfGbbo6F{tGuj;Y*RFo92&>-@`%FVU_Am?0X{=(b9jEA)0d6V z>rdpD=jOg4KYtU~dixKZ1s|zdYw&Y^{t_LszEKrF6FTO;i>X_G)9$`t4%mGGiy$96 z!4EL}>U%NAzX0E!oxNjuDPn92ap`Md6nuCr_J)}AC1|xHMr8=`t1ye9U;<1@6C?j( zCeMoFi;829Jy7UKfVGZ{duzR|7OX91XxnXlEkBnR@@h}4>Sy6 zwY?rU8z6bdTP5ySvF1CCaZjEgM3YN4JPC7(Q;JbsUEG}0+e_|OS&9#LTJhJ3k{^^- z!na5}?tELK?_3Gv;tqVXp5ovcN_6aG;DId^zieO>>CcD<_<=)M_)N~bJ+oje-}q?B z9u3>^&^iBm?``z+XaG@T1=NWaOl3^*CX?7f;Q=yB+MQ zMa{f1*Psi`wkEFv(|B$rh0R zdLhPrh8N>37*PmpdEWr;^gE8%#pMG}CxE@Yp!?kYLodn(qN@t`^I1Qs@r*zozr@6D zsb9%x6~uM1_gh=*BkhKMaR7ICuPX1Tlyfjk3*@_RzXZoPn0F0~M^5J{ee4p#Y4A|3 z{_=<(n?iUN-b*R#?vr<`P;Tc1egFJjN?jI;p1XMd`R*3EGz{Yxm>1Tzze;z)!`S2r zO|8s%nmsOzYafb-)|gC-$A@ut$7LBm69t_QET?k zIy%U%93!^{5j+=}2zPmi78Ho&m5&nf=Q}{@wIca#EWAT6_L7zr!NZJ+JTGb|JzN{X z-!l@qcEDD;wj+YiTO@Ipkd1ln^Z&hx;Qh`?{B_JaO6eZS2O1{v8`m}Tcy}avl@s|& z@s)J0Z4_Ug0;aC(68btOiqFkV#LjL3E!`Of7BV~x0dwhC{zyIt|80%uGw4yxNd8k1 z9G*5)X-|Vlu;1c2asv9w+ePxWc3{Zw8cug?B6;g8%t!hAQX%I^-t!T=)|MgUc{CCp zWbm3sc+(+66pws}y;ebIDzPkz=k76a`+w7gIXI6d8dobY#2i`-%74!(<2KFS-t^ zp}kJ%Cmk9kfYDS<%Ua?m=emIv5MEVlna@iOgKr`6RcUQ(C0ALiDA>r3KMYob9OQJX zB(T3O8gf71YUnD@wZk2C^kKu~aU|b1PGUp(HHIt2+sP5=HvJ-I7zT&fNQd=_Y&pHZ zq4BhO^31kG_N?b<$l6y!)(uI_&c+%>x?9M6)e^a6auLIl14ZSV?+LhHZL`h4@t^pd zk-+!Lo$lB&`MLNLm%yvL|2^}k=QXh-D}ir+3y)2EEkxkU1op5w8GClmF7XCz#-A}3 z#)HRKiXRquUM^^1C?l>m$lG-Uo@cKkYLN2D_C*#K;OVQjZ zk%P<%iP;e!jYrC37S3Nx#8+NytXu@V==K)k=8@yE&JKzEA)>a(N}ggHz8ybz&)SH_ z1A`2^Qt)e+bQP<6oiThZmXw{95F7Uw&<24o6dL9ul4>;5vc1jI%_BsqS#Fx=^CXTO zH$c3&H$XdAC7GLyi4pxvPS^HVL{C%e8A8P_*RDOr_x9raJoo&^UVF8GO<+LTtq{!y zCTKgCB=N-FYekEbceROe=rcOJLA?2%rG}an>2$RH-Ic@gAt=VV55B zz8JsiG*Cq$?{?UuB%4p{uP$Rwne?Fu^zS~H7qFjCHfQHsQEJs}BNwk*kkkFb)s~ak z$=5XF3T7dyOMu{%&%dc`yFm5u8a#MSf6%UnzG|W?c7v@yQ5ipPW%7VtKj|G^-r%V^ z;XE2cuW6gfUG>@oW?-!sv~q;28VZfZ_VHs{!;b3jbrW|Cd_d}>lWLFm)p6JRdHh%Z zzukE5efZ3Kb(I(Ts^;$6Obh?BQZ=!YnO$UKp51kBe^l04OZDtB_WbMDQn6dr)li%- zL#wQ$6C0|iZ$9zNLl)7!=<@0wvK}v5qQB#8X;p2SiHnSkp@j)0)NI_r20R{=XU{xP zA>V}e=eYi1+NHMb_&VmJY!CL7Cmr~P9p;_&6WPDH#;>jjHeQGUSFsbX+77no?J?Nt zb>*&pf{(r#0l%Gn&Ytj4!J+&j&K`Si!4A^~V(#hAcDDuRo7bP$fO{#-B;Eskz#!<( zZ3;`SUc480?(j%AM<%g;BnQ24#C!>lM87aD>(P^2pT_$(IT*R6o?I#oJJ&#@8*sl!1?zLWxdWa*(e8d_n!N&D;hj&5<~UW zm~V>#zCGxMeF}TN&Jg}T-Duz76fW2FiSQ^EKx#t@Ux|5_XVwTE69)KeD(~C>T{ymt zrnx^-xV~3Dnfv+g>Vqh-L@K%?3xWeT0?e*dK0cs`j4e5q{-Td&yK8Z|_z?~uxG z;!DeJ7E{SoBb8hCDkqN?pFvsBafUfmkhccUrtQcf&ih(f{xhFXg9-CXWOdoA=_0y; z87kp(4Y|Dda;jV>nXQ*t%8;lv)D!Qqll82m=kg8o?jm?}Kdj`som*&P?<6j#tYitZ zT{H-M@=ZxrGIP{ETKFK5R}QHozgId;eU{;@IaEhhn{+%!M|K=nN1_Xx^e$|PeiqXE zStQuDq_b@$I5wnnY$S4gr04h~d~u}v;v}>T(zOhEe|8$lw0N%gqk`=EJcG(&?;8KL zyzEu>5zSr$uVCeJa)tRbn%V~XPWdwOfp|^+_pqxBEh&%B{eXPE37oHDGX4Blvb$;G z9`1$Znv1`vJicDOu7JEaDj$Eig?`dS`DCMi`H|_3M~}cCareK1Y=vximpb2t)%`*| z51+aI<9(jzxo4Bt4-0dZc_zNK@U6IWqbN55yG*@*B~FHyU`rW?IpUe9IIR>EfHI+1~ata zZB=iH{O>I}1iOWZ=o=z@yA`wu^gf4O6_t9`}X`ovKbgA9nXm`jhnEI z4fK(!=de?1!Q)3mpDl7hbZO9|3F+Bdr->K*EU{XKTA1ulvn6%BkH zU(aZFUbtit^i^oM?Nfyp&X=hs^jbP5i+P*7p(7FbsUZpC0C=Ns;3-=3Qeswe$UbS(RsWt?p<+g-)Xz(I2>G5 z3uN3DZ-Hk!82l1^|L<%Nue5M3bJWDczO5Fw?@mzu-_L+yQZ*;9z5L@DUSF;{cYiTX zy{jFIj+ILMr|(2{seLT>)GG05uQAFUoUw7S75M4+80EGnmiw4jz+Gpgy7(d%9VO-Y z+u1Q{;on%?`O9;&ZNt>5+D2&lWpUphsWJ-~xpY)n^a%}7&-}pN+=o7$2g6i$|IX`n zrE$j`f-WZ`Tm34*B~!Yqn`4lrZG4a1XE>_r?@e4TJsq3?J2k>KfwjqZz%%Hf`k#vD z`cH3Bg?wGrp})}b95932v{OZgfcv!J26?>iq)N_7?sATTcNx?tZ}cqVEjVgQ2UT+*xaHxg6yL&DUH_5HTm6#h z!20$oc^kT%o+i;l`;Mw`*A%Y!D}jcpc52D_6u!3(yr5nkl)%2l{z@G6yx3O#xPv~g zwTkXcYOjvmPT@rvg52`8Q9tpnODt-nkM-NBp?EjOUOPi?r?yt5Po?I3ZFaYfdOHM(Xh|CS!4iPLRVVY?Krdu%^Fnb}k|@1DY+x9y{^uN$cm&yxAYroCkK z%SOHV1}=K|9_s6Bt)@9*7qoL1{k3nbl13!+ZHry_-ZoHaN5T2Lxs94TSS#o6xD#e> zqcN5Z)Wlino0z>h&z&LgdR_J3t3-}Y*+7Y5R%&?}=*ZS<$@+?=a;uiWV=PzF>*3Ya zeUEr9*MBi}USCmltP{`2f6k#3<*TT5m63_|n2UeAimJ^q6Z@Q+PV##>^?e|GH9um= z{zz#xPGKKwGl)8WDyoiP|6`vOMJra8P;*^ZBJ7?`2C%bZ}=FsCDl zYf|5>5q4`*->nh6Pg3_jY4AQt-TR~=za#bhj)we>)bl$U7$#C@m}p>_NS$G#fypU# zCZ`4_r_`C88ag|q-r1p{vqS2g9UA&KrQW}(p?_2A{hJy(zNOyrt)Yuk>Rp`LsbQz( zs9tfr@o}UUcHw}$TOoUg(^}h9<(Pb233u$m?X?o4JMcL8h_dgTWeym)W<}&-$4+GL zrkyzWJ2I!8WBBf$E?gCN&dAPV*igxyjYrTwA^D@}G=g-&fAutbziY z*O}!HXSN=vSS0lXThoOvL!0~D(h)ko3mZp*g|fc~2TXF|k6pon8*0zPC%7Q5u6WS8 zZtT3pg%gnl;s`Q1DJ;^WWY-ye;CN^9x49tsW>0shW%T+ zIAkh|Vy6(u8<)nh$N0j$7yGxC3*-1UJaJvR1o7jfIK1=o^Vy|AyuG=JlYH{=`j0{U zdya{h#s8-6BZJX1ZsLi3f6(!&(9M%^2lM@Mm|>@O;AA;bS~k+L%rc zZiRDz5kG4QH_6Bmd>4$bkmgs&brdw>XJB|9I!7gUM{tQc=*_v4L`5z}aIY2#@SK>a zoCS7hli_K1jHReWk?3HA{$3w^j}lRA1%J_(9!K-+?sD(+lCe*#QznUhM<1kw*eEVD z0zRce2dG~h_FCBU|94?8otPBG+o~k7sJe^l1x0ZJKA)}K=icw--uva=@8$l?8HXr% z(Xsan-I!YXa-%nAH`EM6F9xrRPuZi#p8p( zd#N{p0vkr7dj}nqg@;rA3DI11W<0li(udxwXm;-#k6lVIHEP=n{J(fs6FtdqQ7>LM zC!SXv>`7*-7jNhkkN-Q}D7t!YFfib?*xvyjw%%MEK8^2{TF~8$-thjwE8=KPeb4sh z#+Z5Q+FR0}wBB6J3B2)_73ssL-t2^XqhD$X`Z%@^Z^m5TwWb-3F4dQf@EF`U^HwXd zurGh}i{sKC)3vF;`f|w**d=aH(#HDq}Cyn}2}c(qW@kBefsj~`ycy|+YDEwDj9&VJX~7yW6tQM@0#{BhiD$7(~f9esH= za*oqaR5w_4=*y$wUHQ-_(l+d1A09Ij{Rp-*W8+@;=3CG&cF*!OmdB3K4&I6Lla3nQ z`}g80z9zPx@W-gVM`t8{rV_3<7S)*vPJtdASt+&zE9G@o>i<$WD^!i#x@J#u7 z0hm9pYiZ+yrpgQWo);W$sf{s=mrkzn+|#d`_T@vEbSRyGcfx(ch2Z}31+<}fQ>Nka zCttbcNCMBOe%BBe;x3EVPvi@c7Y(8H9c3Bp58Hp*n`ig<>71QhQwKXni|K~09Xd9ixP?KG~}jn zPpL6tmuDj19QD`u%_=~6#3XXShmvBVMH|dNiCj6jruZ3IRhVr_+(MMn|sGbpxMn?&B0=_!`QJ+tk7IuTj)5bYy+EBrbM`Na8R z{?Xam+v3T5FlL3Anz>fzm zH0r2$lKx&Rp(S(ez!PG~(0^LgQgqzEJ0qI+HYe-R$^6|dKF{;r70Xfp?zD$3&SG|} zMyAEde1Gm`abaQcJZ0We>#yEw=|0S`elO`lXD_uBXPFrAjE1)HP)En% z=d}4_@{Ms-hws6Avo@28wsTgi@pD@4XByql?2y9{%f7cvo#h1GRr0r2p?UUHpA($e zD+OM}Rl#|7R=Iasm28~(Vyff?1;9*AcFxJ=jb7u&j$K?h$)cieF51<{FD#c{gV8YEydhs-3Rvf%ngU1s&No)s+o+o;j=s zSAU0lNI%8%gYCIzZ8zL4;Ex*Cjkk_)1NQ?vw?6P2Tyg{39A0tBTxEzm+ZTsFD$T$j zi+J#}v$!WT=*UC2d+?Hxg3tVD%V&Mi0nrQmq9Ls~#nFow!rM7vU~?Yy1w9nV0M;}$ z;n8-xTS*q59!pK`vUGWYWlRzqmzo>cVFl#rFL zj-*u&Qn}ZcQZhCwhN@+A#!8fvne8W2!mU(vaaWM@zD=dzZJ1BbRhAaPGil`DRIrw+ zOS{-P^s{j)Pgr0n^Y>gpMe?U|m^pTC>5HiSRLq`l>&wp>%W3l4WS%)H5*H-w!0|VgpR^3HnM)=KH9zk{fu>+NS6kO zX$0;qY35Dk+P}wWB($NwjK<0~>^ zmy+12lHBU^o-zaCc~2t?InC}1-Rc1D_oOoDo&HI!OUJYGw34z!p?uu#5B|?Y6_+~~ z=jUYX2D3dIYpxc6_7Kn7s)F*>l0qDu0T$EJ{CS?|-uwNCEzFO1n|S5fd@|quqUeOe znO^U&=v<-%S9lnQcg|07%1{bjP`E!l`zq$YE5oP289sdflPKKDg0}`@?ilewc+aZD zrJT`6)90ss;zvg(qS5Q?c%zC0E9s{Lq5OB6N)vhrnk${LKSV z)T18P9f$0{_5D1%KD$!Zm~8~B?inIr9r~|9h)61;l0Bl37A>VxpS1VXP+A%)&ilS`hEdvk5A8j*{jU1@BY*t6V5sB z_x-wF*Y&&{Z%ZyydXP^7r}p!1OP#m%qL0WYTB>eK2M5{_O%@avcw73CYmXUP&^C`7 zQeAx+y}p9o(9~;^{4%3wH<4dxcv*7Hc0v!Hpu)!&q!vq^(K7`NbN@L>-PeWIH^3R= zS-B(&A3_&&3aG>CQmNH!%vad0MA|APyIsTRkJspYpd{tm_|R5#EH1S?Avwp4gb$$r z*QukDPKY16yKsh)A97}iZM*WZ!!@QemuHIASM#Ynu?cqb(}j%*IN`MnsloRtBGynr2`?H_(${#g z(N{snIRYQbZ z^!kg&&|6#wpJAhX`iUR-j0|61#vZ(4!t}J7EY-zqyont9CJog&rDA@U9fkK54g6+B z@YFbnd%cQjRwZZQdJdw`@?!eXLBZTx+l$aU#dNIn6l*ibPV_W^p5N^RoBLlMF*UFR z9_-_+$IISg`<4>)Lmy@7_j>*15QZlnVVk9%!o#J6s{C`9Lx8Qgy}g)Ljy%LBtnDr? zdZTl2e>Us-sH=F5et~4|y{uqb7g4qwJHa=*(FJewx2Lar>Q45wm9?=;H~nMWZA-=y>zVPe}2xQG+S0r>jMw=gT89jg*8lj%@xpLZXmz99$=n>y07w1^P*1or!dCpc_5?f$T8mm_;+)(5Vg&q)9kk zKjB6ba2|MT8baN^xseR}K{KBqnuIQ`*|Q~Tc-@*_J|0O0IBONQw4$}kMxnO~T1`C* zbPRyC-VB{qZf$8EI=t3;qc3k=YwG#Sj}9FNBe7Qt+S$vWu3-n^|GX)^p9iMgQBGcl zMr8feAACVUZX+AR-!XQkqXzWU%A4~A6oD9l+>74uv@mV$E%sVBPX^jeG~Z{*5- zepa%;{BiIe!3&i7k!2=~C$}j@l(yt8t1KT+k(oubZShOiq7^*z-*CU!{FI&VA4HCJ zO6oYcf{8&v^d&$EzWsgnWJM6g`74p#xWn=dCeWF&N-DL#!IrO|KrI~6+qm#DE4B%y zzC)2k>UNHmCk3MeL`h>Up|LB2$>%@h-z!us#x8`)b}6aSuYm2F8$uVM|5pX(F{_;+ z;5K6J@XBQa;c4-1gih^RM`~ybUQI%gTUUc=3!T9@l(w2`=-kZ%%uNgP;}bP$m1eV} zmZ4zMsHw0{7K>>WO775;hc3uu|LOx{b>Wl2b)eL7YYnZytSW?7A6L_*?Hk!`!%#Yo zGsCu~>)5xjP-=c2*Nvi8%qlaKUO>Cvwr4r}ay*pU&QRlL{*P@v7)rN#psxySBz7j0 zR$}*kOi3lVGg+oi7)fzp4qTYTve$;u=Wg(_ zdWEqCwZdt>IdtYUfA%9F94tg74KeU$FPDYW?ZHaCenVKR#u4-ujKO$Ce^wS7LEEpw zk6PZBy-11xg9JH_huzp*bp#E{DWVmL9hre{Bqff7=8)Bf)iRAlcO3Gb2b!^#(UG(> zy%4>b`fR@@l7>Mif7krCe06dZ*qep4Xu~skd`L8O%|Z%0aaI0ZKZe%geOP|BNS?AJ zhGvg1B&`*P=eb_;RQ_%o+FF= z>dW)NX|#-;EnCvnlRrO!xx1gQY^}Eo|8qWcJJVA(^xT+EOG8=cPR4aQfekw| z*YV%yd8j>Kg7^6^@xtNXud&v$<%4nl+|^Ahzh0Y8{6GQr1;_T}PoHGYT~Wa@UeV?YagR7Set}|&&u58WSEBoMtzvH`yrl42RIbcX z9FH!S0%t4nUN2Xqo;)I*O-DAz?XAKr1|8MV0q(5VlS(e8NuzP!v8`w>IoicYZRV<| z!oyl>^?8_7v`7V3h@-U2(?)u@QbpS%T%{ek4J2*6=SS=wB^k}Uq-cPgb-!DYQk~9| z6<+u``#hf_^$)Pf4pTO^q#mC1HOCrJoe zCe`U$Pd=~<`sTW>miBe(CFi#26Ti9^{?ajWeRz|8?%O1t&YL9<%u|y+7zP15Gvr5K zsEGw;NoGqk<=uXv4=&+ojpsj%&y`Q?u0hwPLK-lsSiZ5XhF0!ZO1m4~ksoM|IieC? z2#@!2t6>_dT6Nb<23s z-&~?kKfbUw+XF=z?ngJ5e_%F0`~<7ZX`S?n?Tv;$pp6}OlV|MtW?yju8RXa#6|6l1 zJI~-PoVNb~%irWJx_K1PqV;#!lXIS8&x-=ukaL~24;w0C^9te9xXkWvmQhvP|J|eW z(Yxx6`Pyc|Sc*&XpdQd4672)1?rRS!gg%ft#*faWdD6a*obvTY(VFL;q`Z!-bjgSs z^Sp*=XTKJ;!PI(bYwKE!rrdldBuG+3ZV}%W!V_*qLT_3Zpr=K4|xv!w$X;qeJlW%^p9EZA#z6e zsrd?-I(t7Knu@;lTU%rv<96^Z(eg|d-Jn|Mp;2{R%SWuZ6MaMy=22@=!X0oCTC~+goNoBaQ!=-BRBVmo3Pi$Jb#u(JUfJ_N+?^FWdu`oibXM znjgp3zLg9e`m!aBipgQ*r@!yp6Pxm>({f`np2m<<{NHpK*o76*mY@-ixpRH_JZPusS&JO~Er#;n8swHRe>w#b@JcqWC!g&d>6F(%4PHO z|GiF@d358aaXo3+t)AlFuX(Y`io1bxWq);`qTkInd{VrM3Lnf@Tn}l^hghkw%ga=Z zGjGUU(7(C8QlmK6RGVKc!kK68U4_ShPtwCgC1ua3P;A8lpQmB(IiXU~@LRFu8-jlA z{rb{_S=nHbV20XmD%Fl!Evp1E6MRRHJJr(UcIZ3J&TU)yGTtzx_XG;}BB*mXz3BLx5q))$m6!J|fI@@}M zG}hWJ?;CX2UAIX7Cu?{VH8e7|P}&=Mwm#N;;(($(Eml_iTa|U+F!L z-3BA>x}h##To%gy_$4wA)UTmUWmQD8faayh4>#nlHzvc2P)b9$G~tcgOl6~omXcww zW;`Y#gW>J-7t!T&^i!`S2t5 zeAs`PwuE=!8(W7RiepO?E{&*SE=f2$6&drvqBi_aMbx#*kiVQ%m%fD*(X7ITH8iO4 zUfQ&`X%RY<4d5@(B}-&p$i6<;#x8b_KNu!6>hYHM^udQHpo|{6+~2ApolGbo)hli8 z{jM?1#SZtWi8g%M#uStWJ+__}FK=%`;uFFIOZpi|^EJ`45~22Cj|(FK3( z@Ah7hit~q4QY7|zgU(2fJ|n6AP5A0(6vKz?_t$%DS5zcv(r`b{#hkc{OY@J6!;D!( zU*6{7TsMKP-6|sEcE_bjD?(|&5+!xsc34V28-ZL2IA#eOq}R?7bgdbBZ|$=GUjI$u z8Ji|I{_8ipS&~n8tcDJrfPcVS0kFmMQ3zNj)-4n<< z%3Qd^7v!>ZIYVEJ`1Q3A>;mLX+O!acG1#*hrm#k{nhLXMye^tJRy4GUcn00iG&`6D zMK%)F{lJzt^JmsF1Cjfw2xliBmMiIrvtH6^D*_ciMLa{_|5YRHZYNDvX7}Mw3McFEFN&H47L?+i!SL*=?L5okvh;s5iYh&1o8W)2i*>Gz5&D)j^&#y2zW# zV!^Mo9!gt|;Bh8=@2+m-ao(HyECYk@d0!OKK~~3ICb!MqM)H8s9R4k?bk7q9*!X6XXvMEEJIer7c5oqx-IQ-c86bO z0D8~&^{#Q=%l+a@gZoJItcz`pv){jGLiN&-RM-Cx52PzOP8>z5wGwT8Y6ER$G(F6a zs8u&>ia}m%dYpuASW9YwU7FMv?|E(*wy5 z9^Fel^lRu*lkXuvoK`?RF4UtoE@P=b^2kRmb!uo+0nnN{4@M_c9WCZ4V8mtNXCmwyj`plY^=ETIi@@_u2EjV0wec z>%49=w->?G8JhOlX4l!#fDp>d1Z%?l5?g;VgeF{8lEsH|c49&(CA?PB2fb3(_Dv{V zY@wnq=aejCZWyl3(7@XY_DB^*2ay9ZvB_h(B8;32)ikd3I6JUAjP9;Pj`eB|`!ytt zOsqAut?D3Kf}E69n1;O44%E=5{(b(`B={d3HMHG5n@MqD=q}RGTFoBTBqEGL7{ZJZK8p&S}QydNt*6+t^6D(T^iVQiU6 zBprpeFeJ#8`Qln&e;gU8dHvX>%1HRl;U|1*$98p&A|_sW|)cknKY0mSj5tp(a?gZNcP{siIfI! z)iBLe*<#0u^ypU+t*vS-^SBU0gYfgmJZbEhXdgrUitul3zL0^7{eM%s zq>1wA)whJ&wuD(?e-4rU(*Q}Yyl zY+oU@iM-`-Ejp1uLY}dyOxw}vU0)XM2S4!jx;!Cp0NaWEPG7FWKTIFS0u~h0fra(C z)%?*c9(&vW4mIGnPmKfDsf5nCHmY$ZpAFWZCC<-JTN(0y&*WqK#j@TwlMgv&T;qK1 zwIh+eO(>+Rmgmo$$7=moN^e%S=bJJYFjIW} z#S$y-Q)e+dHo26>uD0Q+otCmxmr_!8=~m;c{`qPKdt_INP83_7b8jWnZdytm2lVF1 zsxh6<#T0h32VczAvTOISpR(-B4To=F*YSI`|K`Bgj@-ibJV(}kk0UqI-^rdQ7gOy_ zM}Ee7FZ-5OObw0XyjkP{mNluEdaPzVY-|q8h}2Nm)_wV$nb>0`7K1HGyz{1G>`Qt~js*vQJjk(DjJ^GWEU&5R4-&gc$ z%C`b?zGcYs+~C)ojh$?{A)oQRG40bY!2QOMKY3zA_NN5B+tG+WInazYB0u6|-+<45 z+XA`>`fHl#^IP{@)9_cwq2JWw&7?N;Q_1OsRXu(s$()+6=k%(n4lg<0fzH}<=uX-^ zcb+x*;%qZ5NsBv9>O!do(1@E6?Wp$y4I^bg%e2{M4?nT`V1-j;{ zq|!t?YPw9&lxDvqzkGXo{YjAZ%I}if7(05jSdi0@SJLZujuiS8tbXNJ>FiHNO)v}G zboeSgOLL+*1pnUgFVghI&SZ$};oFLj(%o7v)MzvK6$bC5>swsu$~1HVbb2YZ|LBgq z2+q1Yo=B;mJ!$r)0y6Y{BpECpPK$C1=-$2i(u$|Pw8k8N+xOU&7mudsBzRMyVVd;` zpe5G}>G#0%Qi1SN28hqa5?aSRMP1-ji2^cN>jtLRi*2|MgNP~3Kb9;IE(+IMjhRRLgq{cIfPvaqEbLT5Ha!lp<>&i|yht$ZGY+#4WBZC;;UyH-@gTdnq_?ogwRh0k zL+sKnJ29|p3Hjw8sPXkSp1p+DzGAx7>mX+IKH_9fF<9dJ*`6u3BD){_Kj@>6Defg! zbSS3j5BD;kitgfP?PAOVdszA%TTy{53_G)%X(o0P#^*IOa`i42;N3$^L}u{igG|=_ zdKaNVhIhI;lfC-dO|(ygr|$3$wzzgz(E@*SyW!he%P1S6RZERb^cHrwwzVkpLeAQ7 zBa1Au6lbR6Y&K^Nvy8P6@4n)`|008J7+@~0f>&@sH=WIG-C8ujPU^t-RA>@y#AVF3 zHaAllZ`N8ohKEh_U?y|@(p_g4vY@v~s(8Kda`Z5-LsET{w?0QXU$I4W-MX6j#JqvoXUtfRlKbm3i=;TlCQUh#@Nt?b-(hH$2P%!Uvy-+-ty|}EyMMeS6^?D5q!g|br=R6hF9w_ z4BjDL?Hyw94)JR55JP5=S7!zpGK0K2GswU*;nh472A&D8=9%DLcb8Z5X60bX@oL_z z9Gxk=x-&(N&J>0;o$X8!I$A6zhHfQS+`99}T{uKV< z2@U7UpKm6RHyhTB_a%gG1 z7j%IA`@6_}6{mO$>D!GH%mpR*Wmv|00pa#w40s+np{c!0^8vPdmnW zkouuS^5i(=fIX0-mFR6&4Ej<%$nht748tR7NUjI@IN;tiFAVp14+7$VBvmlxF;99l z5j`M}$D^y>pB^p59-&i5FfGR5T#Y&1vjcsA7jy6;30)rM6d4gnur5)fv1Zi!Vjy~_ z;KPh>MehfWCBM0xBK9^%Mr$mM*a2_n)TWr}!J_XV$oab=v9{yr%Q-ORG8)kz#`P=Q zkI10`Ee{$;XJf&Z$*B*X;&|{dFarkGqaoAAQ*HRq-Ir)nmT3@qPDLl(k2>&w1mX8a zSH-tl@MKRwA0%>8eSfhPPbN^>q9VH5<{N9VKN$X2=urbcv3(Q3zKF*z_0cw@ekWq#|}fJAz&#zi@qn#8xCkP=~2%nw@uw^`8+zFV3jx>F(ofuX_Zo z>IOzxz!A3PQaJsJ#;mvCP>tDe7_#CfTfu;OxgUA!a5{EKLxI=#v56v_o{!g%UDY1e zdrdfYJ{medFq3tf98O~gXy8rV!oKH*(?nu024muIEwvUF6$<{J%7(stJr?MWb zWdF{9I$y%+ePa#sHp|gn7=c_7I1i_nGS7n%*lDZLGr5Qz=@d!j*gGi3q_UNJBmeSP zzV1q4Wj&*4H)FCQJnV&_It6HgU&I^fANPe+l9 zy$ZW#7v^LDZ-72nE{?>S42`CcpUCJv>CFP)N7E&|rk$2`MaOFlG9yZw8f3{f7RS&V zDp)!%>PCr!h0a zuhs0!F@;muL}VhA)Ur@VGG81+BNoHEHMXZ@f|)T_LT^h>khExAH2uVm>_YnmQvc^s z^eGFxti`LP28*I7<-UqOHQyyAuA0CL;W=NB@iG6|r)a*vWf8Tl*I04x`ba*1W)ZDh zcp`sA!cg9@GjfQ?2sB#f!q1$ZHau>eiq_lAQ>a^8@Kw+a&Q@hB{(b&;aBIGGw2GGNpH)!YHh8zxG9BmAVZ zU=TG}G((zV+gF;CqoU1VtK=w~OK}&$6Wg>{O4NF%_|tVb-fOv}?6OtS721f?$MsUz zR;G%QH-9{kJEgnr20GNLQqj7!{nDv>?PSpd)L_mXk$Oh2k~MWuLu)t*M$0qVsTegn za=8?;tg-wNd`Gnsl~QDnzVeL;U<=$RmX=$Ol}Dzj$+a8u>29g=kpJKpYE~|dGF>mf zftm21NK^a z_~esZdzS|Mw@-lnYO#vj;K;rBE{%GG|N34-d|s6_xdnQ6x)#&;U3GZkVKeq+d@&6< zr^Q`&Sh04##qbJZmQU`%R%3?Uf1n<>Yvss1R~A#at^uFWAPW7YYC5&+_}^W?BtHdR zjBf<4_jK{=RzB5_(4!^ulElYW3UKFi>G_2OaU7ceHSBXbWls`obkGC76InU!Sdoam zz{kF|DB)<7I0et@FOMJaWrYjJz6!d#^fSwE7$UkADJaA99sAWiNHjE(;J19qKHU!# z8=-~v81tBg)EXlarh`XXb)WUyJzD(n6^CxW!xo#35~jt_GplZ}-<^F$i@w+seZ9i^ zBn%gshYHAG)J2xNb(o0og1)i+Eco6YVkG>TQ=QJR^21KF%=CZv_kVTi=Z(Cu8-)J6 zDUb~JdQsgZco-i0)AtlGhru&Uavx2r8w{tR*TEvVh8b(!a7x2o=}Mvx4eaDYA9Mw@ zJa1aq$cGM@qn~SpC#`JlLxB`+S%o=!~-~dAp7P8%B^< zqzlE)9sw_$pi4srQd4Nre|A+y1_Qti_oXRV_oJtYl7@_=D}J2bDdjaZYL}{!w6{Ba z4l5n$^}JD(0uFPZr+w+t=TYQ~-gzxqZ;A^TO=nHuA=%S|ZkCLuMg5Uc)$2+=ll|z% z42ixsuz@EaipI{szJ6~cTc8z9x-(T|PrBx9KCoY zJrpZWr}3r9g|y~O4@KO7RBpN)9^O+CS>?JGwGDRsnsWNQZy=!AKvvf%IF8U)$|O zBgcU4v#>6IG1?g(MzHIh>u^akh^&eV$gF2A^gz1OrX>aBQt?9yQM*$(=5F&}U%);c zMzszWfM@+#Dql7nOakyZr+kzgrutI-xrOi*zmY=m{x}W)O!1Xx(yq)gG#h&6tN9P5 ziMPhmj!oz>*S#e*EeoPb2l%y+*QhKHp&Z;FkM}$yg{Fn$J*Fb9Vzsp8NF-H+VPC(i zP&%_NMQGtO_%cJEQYO2LvG85YDk^2OOooW<#^A8M(J<2|E}|ChM@&nN{n0=X)>%cC zc16spa)9WB>)4_5f-Mj3FFqmfaB_vj7R2=v*XFA!&ODEOQ!r6)gogUp&xLN!#Kqp& z%aadHg@#`u4FK8%q z+YV%udWa}o_e>MEvpeIui8AZD1}kYcX+w z5?#h?SXq{(SoWicZVk;qXR(EF`LBp}eOb&rbTaCG7H(-S8U;f?xg5%l%rO=nbc?8Vj6WNF*HAd8gB_hTf^EOvP?W=0X{YgE z$Gr`N=W}RW`mSvCaXpcabBp>>e>ShFuIL4=tZ9NHE0=2t`6--@OM9}T`gO#VyEx~F z&g{*aTB0@d7E+4$0r`Z$Yy9w}LedG}C?64ViErM99=fxO z<;{AZ=T$h{;~XeI6vhEo@j@E;<(S!}#2Z zynQmu)_L6JF{f>PI>~;-=kSrwImKC=Kec^Jf12FjBQFja!5 zlsb4iMa^=f%5r$IER#sLy$4M~-tF49czO%Z*sOaJod}4ddr`x1UzMoqz8El4hmrLe ziKf8^YB6INjl<5)0=txd=czk*{!eaw$EIM~abg(luFvVf&OglW0HQ2(GB&cJCr<S%OTUooXChsMF@#mS^=D{#2LFu%x=?{7}imX9aj zhJxDaH>L2?<0*dv=BcNKl>Tiz>A!-%t4||x8XQE*t_9S!RRhXh5QHAg0*dWgA7|wW z)c$$_ZJD7T8pyMKGD+eb_a=4w>%`CUslvN6c!`Y4;EsvlM6G20z)> z=kQCzk72yBl8s7)CwZI_JgE=t&e>3OhAZj!?6+(Hc2BE%fFqIoiftko4`n#GgD2I zixjLEc1D}A|N2>Vl1<5q#N4VON>KEk%eMS?W~Mzs16`*((V&_9yg zA8P2;?)~hvVI+ElH6;JIug2quU&uZ$(a_G~J?P_zAa_rksWLK|^SubNx50VoQq9@w z-x*SwDu(yoR^7>twclYYZK^ zuA-K|!rAJX(RB0#{Aq1`ne+W<{GC)ZGsJ@(35lT=`;q^BG!Sf!7}^Lw+jnQi*qDiQ zrz3haihHtc&0;~b!MV4u4VzLF3+^Bo`x7l#qYBVN}3(on2nr1 zi9YpIlA9^ck2fY!2F~7q@5?^~Or}qJl@#9Zj=cB#$#nh{&fc3#<=JcFsVn?)!+dh( z4I3w*vqnWZ-FM1&uT7vi*dbbMS|cy5N}zmrB<^otD1Yde2qp$*hkJ4Is5yxg0Olc2 z9U|{CHIY2qs^~?%wsPNwiL}xVzhnO|vL-{}IT)*=!*)5cP0{gGHyIqc4dJrzqm#*h zE&Rioj~qvIpG-N?D(tX+*tLw91l}6X?I%nWZx6&#L~CS?mu4yskBp;JeZh)6`dQKC zO)SmEOgg1!d+F%(Seo1u?{k-t(#ztBR2OrB!Lnp2|4j_(;{Ca@#WE>3Jcfj;n#TXy zDxLivjs1d}dQ~2l9t4H(hoGb2Pp{rjgPf<9FK0MV0yXkuWDcXPT%GVyi%y=|Y@wJ5& zKZ(!m)lo%?m3D1;TX+=BH7^zAvKHJH8pz@@9cj-BL;ksuih}00lv=mf)*_o~#aJLbL-{!(3wJSo-&^QZu z4Xs4yLhN?QBKf9b#BIEeYqO*v<5Y$IdlfA;I3l@dJ<6|VjvROYQ&R2bo{nd|@EK1p zkk+hnlo@SSlf?;*v?*(sED4Xhl*5zm`azcR0IY^Fm!v`dP37-DV}?q&E;YMpFQ0V_ zbCcq>^rU?J-wwFhC+meTL{U3rCjIxGHIO5dmT>SQU{5e~eb&N{YzZYg;O%eiXJ7M6UZgeuSU=Vx2) zWQ7hTl(EwpojH5iZR{x)n>%x<_CdA}kJsII=5;z89G*-q2tiuS+x$&p~JIk9iHQCM%8CC{^x$YduBi=F{Icj)vyW6Dz=Hl}-+De~r;a`(MP zG^P%iGgYnl$>q(^#{<72wc;J~TTqVyf~+E2@SCNrNxP3ABP;OIN3|h`y6`ehH|CXc zb9hV91H03ZuX);myx>{-8P}M5yLS0I&zdi3#OIIcf!T|b^KAoOaJU!Mc@GY-dwt$z zRWx=KIOktb{GIDRfH`1V((vytPc=h9^N+(9v^zx@4hM^1j2@jcnjsE0QIO+(9jbF9 zNo2wM_xrLI9k`Vs3~MRqerg?bb50Wa$SG{Fs$#lMvEon%1?hbH&X!z{5_*{TKfL$^ zu2i__KOMcdRc}~9V2DUlE09@0-+^n8i0=fRPgw=??l@Nb=_0Rx{Vr=Swwo7=5Kb*sapkns2k24(rm+24dV3+4`y7LOGp`OsoFAk@6(Bb(|f2uO~p&1J} zUEDv4)^9<75@!51?!J_3G=i+Yaw@tvoUW#iAQuMS0$4{Kua2Oh#>g5Zd(zYoBj^MC zX?j`iWYN+0ZzlRs`4F6|d@0dSkhyv=aqdgn@TThh7(`#t!H|sC^zKt~_^mcKx;eu|w?y1srCH@o5=Ml-&EbGzU>d#o2uLnD+lz4aHyD4en$L9g!qfn_I! z)8-*ymG^tY4!sDc->1NtF?b2?cLZ79Q_)ECXUw&6Bqe>sS@CWKTh=F%c6~+OaLog- zR3niURgo~b%RbD6{|XxB?*TW#eTt;lm(iit=PH}nI|_bF+|xrYuro8GX!$y@T*jPc zRR^Q!Fz)Ytzo?kmuP9oWs;0FL1#DZ3X!rz>m0qtvwlo@Eb?kQ8Np@#oG%d#d;)3IG zmXF7pdm3sy0IzpjTaSh#kKhMSF2S?cDePyK*dw?&uT~JHM~SU%>)5628(@ourW*Qsc%GuZE);^PzokS;~X(z6Tkx!0HqOzW9aI{_JS|gI^?Qk_Y_wFE%H%ub=1niHJwB$2V zr+|y5rm+pq%ML6`q#gb7*lB|-WOo9s$Bfe^udOVEoiS;O1(PSE`yB5>*C&eR{U^h(q9WaXt)+vXCxOe0T;cU0l3lM!bjKN) z6o*Jj85Bp!f#47PNRzzsW6{T^CZG8AQhjM688w18<3g5{s56lg#%jng{iM`zM+i?n z1z-1ryNbOSem4|@ zmoPqgVG+H2@=zfQ@5Ary#lG_L3&p-uo%uNIh7#(3P-HA<&-)Jmv-FCtgW;neDUktyHUJh+N-N1Ml!h z$!1rYybgAnHeV{G5z;1kk{dEa&wopoLvrLP_?+IDQJWvGD3ecEi@nDFx_nmA4Y^y} zVmkO)n@|1lTt3JOOo^NIYCPX%<}dl(1n^g{=<^>k9hSctzM8m({I@|P_H7GtLkkW0 z)1u~VYHl%kd@$mRR<~orpB94+)QoRkWzB|FfzkT5IUoDdmd*YE?@irS9IrbwYEVLs zy;}2=6@%Fn&k}mw(TvwN@nL%xmCykDc3f|-Kf86egzh-C=J#4nV4=pPbYMpt-f~wI z>lIQ;v7O9$mUle6akP}=E*88pemeVXREB-N6(6oO8@~TCs$*cozcrnQez-D9Ht)v$ zljpN_i^|BR(v~;8v5@^3T}DMed-EaZmazA!WfZc@p2r(5Lmzw@{TMCdORZKgc`zQs zTbO-pHFI?@qw#&5__I6fnA)t2>eX@PCmlDk2TnNumlB`bdJ|jrsFYgn9>kAn?_}gq zN;@A7;kRyQvAo+Q)PJ2Dw`g#Xl|L?_Zol04gK0Ue%C7{xxPjdJ;!!po^T-ZsH{Ng2 z2{r`xS)uR7Evxcbag!48^jy(RUBHaq6w|=q!F)wq6>9*mQAOn-zHx5}(*vW!=+Z!L z-n$&#tHorR=**i$U0`n?;4|BH0N4{!mukAIiZyW!1b>4&EuN=ACk|GFUY$gTs5ns=YTH-W#g+ z-heA!hpIJL{%W@tIfa4acc>Fz*iDy=1|Z*5+L4$0>w$e-2;O2xp4`rW#wDPyC!izG z*wTPMZzk+%e6s?|@;2gQ^<;m4o*f&SaG-tZsdoX128R4wxD!1D$EIhmhTO@<8F_{R zy0J>1J1!eUrf1+Qp0CHx8M;y;IGJ9?^|{PVs>A&n`~K~+{GnBg$G#s$jliiu=Ytf`bPT;81YY9%&r*`{SXu~ee7XJ`X^d77 zx>=NT$iG4=u?(SzVq7OvZ%OOG^60o;1vcnqY4Wg03W!qE&8)N1L3phT+kpFYs8s5k z4=zELhG>NPe>2WZWUIsU|IRq!(-hFE>eK4MDPk6~NXsg8s7hUj3c@Hi#8Qov^#~`NX_0Mu~nN3bF`%!z#=%mX8#atW&{yI0uQf@yL?Ay~8qYjTPa@Xbf6?gSDR_+kHD$CIr(Hk`CY@vLyNwh@;DqF_J$$-m~*6%BHhE;!H*{5;I==W(lKm?yRo=45dOMUUsf{CP@Er+ z9MeMWP|D*cBk?0u(=j|N!0<*(tHFmhuq4}>^6-*wNy@`V-(_`Rx%KZvz|Ba$U z7dTB{GKh-NA*+R%v3_S~@_96x1|(oU{ptj6uOEHu!71IAYRrk~4IwQv?6OzNXyZQQ ziST#h#ty{%#{BIj4kkM~S}y=SITEch?nM?S11PPBM1EhoQ%X9zPQEE<`lHUI@f=Gl zkVRT}y(6{kK8_Z_3uoEflG5*uLxvGQ+p_kUF~FG#17l}NTPoQwp0abm_?lsgj^bGC zD3E_o_F;GH#*s~-ine(Tsd0X8_9K%gH4(J3)^UaZ%zfM}lhfpwEXDn9Tln)}a12tE z3ahlWe92Yp{o`&Z93L;|j{CsLv3;PJzy3cSh>U}6yC({t$La9R7gA8_yBg1Tu~^8r zmY_>_=_|#zh*We=z+c+qnc|koZ2s*gbc2Bv3i-7pUI)8o&5q}aiFX26K+95kb)!Ac zyB-YAZz(+=V8!pdN8^51in+p?H)iOIx>$<$m<`{rn#mq_Dx*yEt~Kuar-sd8W(&*c zPk#O1Gr)0=RJQb38D7uc{6gI{_W6AowXSE+FY!f8dR#`qr7}Kp^-?yV_Gub;g7Gy+ zm$6?>PLp<|6Q5SLf-OE%M%f1k@LJ2)uvvv==&v2f`OWpL?$I(boiv!oJlyp6-!*H2 z`?%Q39xW+F@7`d(C1o31*B$@XtD$`1yq&Bsw837DhVgw3_p%8%!!$_ug0J%cGdWdC z(PzClTXmQ%+fxb;p%)L_e3bQz#96}2i+4ju#z}2tE}Y%?&hNRbV*}`u+lFzo7Wr(^ zi4tlP>d9?>aCRdAnx||im(Nu)%i1Mm*2@hYO2w>QSuu6F;9BGSus-+K!g`*i@I=jVz*poo%_v2|Zk!p#Rsig??{9(_R!(CkI=u4Nv?=mS zbd_%3+JZk=%fQhtpmycR<}`7FE?Yo{eN6c54+E&x^#Uq=+LXH`45HWX(Q7=)m^bL- zO0BNKhqK&>dx0)A~kkbhy8+fGW)T_;Z=#HmlzDoMK@T)X!6xdTr>{C+S zNGm6YQ7Pu5hqWL7%{c$*dC8UTNI%M=D4_#1f$LYLWWN}C2yfMecIW?|6W&GP`qoR2 z{Bwth+g+68Xs={b8+ZuMRXCGa6|&{YgT;~UN_twWkjaL*2`l*3*AEe_!f24_i#?al zAkL0yxr$NC{xF>stYoUQXnqbmFLwnq+dD|e8(>$mI*+}4*k4q(QIqxQlT7*ES(t28 zk*50z>^J*~D~Hwah8|;kyA2RCjMNl%;V8S>mxS3~4cN;^*ny@_;_E}~L~b2s=kl1C z0EXwfp@-Sh<0L-dcj>3EmWhmO#Z;`= z&HNfWh)Ji5>FUocw)Lr_XkCua?8MzQzP`_yz9JAFl6ebuvn{y}VlVt2w;S$ar5ScY zRlk_@19!5AzV_mHD|~P5OlFNU z$VOUp6**pbZ}_ffTif;!x5JTnPgutuT(%J|*o!^#Ud;wg16Ob>a@LWnSfQh}(0x@z zeY<3^W7?g?j`~Vkad;WKyv0%+!+WD*$6_{L*IKllUPL@%F}r%eQY>*V0;eLCC0JRA z1I^&^*ptlWCbScE%h5wID4ul;F%$OCA9M^O@LIPLwg;dk+Ky%I{7l6EQFYc)QMGLs zR}otbP*GGA3k*b21mxToV1SAkNGP4sAs{ITc3>-ZcVS^M=RQLXDcGGTHYmnp>$l-$ zt&jO{)_G?65W_k5wXeN@+wy8QJ$vty6QDh2n=st3r26|6!~IIC zzh5!TK2rVc!!Y|u^|KGdzC)_tcQEWbr22gad#Y|lhmHPsW^1T-HPpeT#D#;456wr- zg4JrXi`-?eqpk*P^ponCIJ<@AtFZxT5kI9fhea?<<@s(D# z6TumO#QsHlNmJkniEetA{g~(hpCPB0r*5zV9o?h^KZ#bIy2`rQxk$qc!S%Jj0 zNopmh0LLO`^Tbh#hy;gWM;=?Y(Oz2YkPWRPo0*o{Nfk|zUw$Al-3!ws2mEZ~LpVeB zO{&knF>o+=JqLq<*UIa8tqk2v(1Pl^nHaiad3{%`kU6c24}zYYr}I)c@clJEG#ad) zqt}I4y-IF79{=BmlF&QqDc7THy61LG*k$&RC(VGyWw=%FU3rJ!g|5Cec8M^o#ZBH4 zbLh?+!NT(AS9!iMbn?051*?cME`JZs@VUN%=kj81J5OHM^ImmbQJ0livwy#tk#jab z=8kUGPP%5(?#X!wJeHA{EKH|pU*hVQIPJYUT&7ocnn&YVqn@NEix_QP$5gD{rvxY_ z!fS_}!i0HrE^2aJ&)UdyaqxakLG~AC^6{+*^NOa!YQ2_E0NA$xf@Sz<= zqw`|r?htZsIfESLBWv#-NbSH=t$nQs1Y2PB3{r6yX`ZtWsbtO|DH%N!e~{+Mbs%?F zkq(`3rT&K;=w5~hc8Bu0z2SMjsFx$nfai0|Wk>Y>Ibv4~Ue+Fa8f4%^_w6_h01N7K zniEaJS^C@>@Tl6)q+#dL*Jf%9PuNWARnDn%XB!%51m?zDHK_jg|8e#ONP6UBj$J0(H7KLbgA1nJz2@fV1g^TgURr#sTqlX zTqzzu!-uIR^m)A-ZCed%?^Yu)+T1AyJDt~43~6e24=SI8?^oLZJ$4?@Y>_b;JQ#ix zPwH?8tg7LIH3{Q^tE8N_+1`E^D#-7}bkxy}ij|7pHETJ;<() z5BWaD`TSj1`f;zet5m`nqBC?3Uv&Q9^B`BJ>_&cdoZDT!I*{b+M+djb$u?7s4y5{# z1D@~4o!Zc?tA6C&61g7lmNc>r`U@5#*W=xc3~kX_&=vFPa~0}$ayC`tp4lh0F+J_* zPm15jP&fL^8tzJZZSw~M9X!J?-6mG&lj6hKS;z<0V(!yeBKpjU_B zA@QnW@BRi*bYn1|7r$ZSuLq(t1f3M@CF{H-h=xE%%H02)&4VZB)oQRDE1t3!2ElY1 z8bXT=kJzBlV0c5o?O%A0RqYI>QzrQ|c>FCE{w5e+*?iZ`C~=Cw0~ zHV5QGm&;?1Plb>N{M$PgNGzo`8}5Sqg|m#U#Vi^Ej@;h17g;%U2^-A<>ahA8Gsb5< z7G6rjWoMLjC`S1A+j)S|{V;=latoo_{Plt^Cy-YTq1OiRX+Jy4d~`zSeKz!sO4 zP3$k`DrmOvKJaNnXjC@^`agCuosl7Qs;L5J^)0Ld=NyBf*rEGwWY>|uh|ve%Y3Mo@ zq6ne&FObX2TE%AChSEd$F_Mgyvt2Jj>7`>n#ok!Nmh20w``#~w&u8%_;nd$aAFPJC zYznd%+syK*caKoEv0VhU#m{H@WgoVFbp*}mnNOp;y0Fkk5n!3({y*Q2owb;QGin~G z542_;r{|!rB#(M_0TAEmuX!|R{k zMN(sUQLKZyvrMCC+J_ybVyOoD@#fa;whTjCv0dx&`a&Mv9NdU4ZyJN0GcqjAJ_vsT zV$k)GM^~J02`vxAP;8rgYIadBgx!fD4Oh$#H!_5=!(&On&!l+TZed4iEV?lA$-46z zVZ9<2oCyWV`YaG`wn3LqCk1U79w3Y#8%Oi7BirL=Ep+Y_2lfv92`2^$OT}1P5upIz zxV6wlFP7Z=72wmpHPg5fgV|X@@>!W?HTp5M?j&^h-7ZSIl`(7QLTdoSVe`(>Jv+~( z=Hsx7X)z}21&^i^*!TUt}?1!<>%2yZ5{zZ~E_BD$OnAm#* z{8ZP#RQ&8JuJ}ENYHHvs{y9(VBafg8=w>7MYVq)kaN2KzjMDmDVy0#|{&um0(>f#O zr-hNHLP2x0<>Km*VPy42L6bX`injgs@ulB5g{3qVjZ}|vy?E@eZJLOi`tRWBPRQTg zXemC~w~1?medN?#O_XP>U6nD1OyohvW=<(@;T=?LmTDEyl@r5*%U&cMESgV)l<2;_fmuJ(D z$-TukQ34;T39oOLzT#qIBR*&ZW{`M2@tgA?z8`)Mus6Zd@5OT@bSAzv5_Q75^3^8r zZsl2uwHfsRez_!#pDu2(Zpr_pgRK!havhh5s~GeDbG8bi>)Q`=-TWf1@X& z7SE*;gH@vX#}e`AHfWycv(U&mBOXl7B~SYuV)UAHF&x?F(MEg4ls+lqDl>TemLC*L zQrtwxP4Hw+If37)sra=9e+z#y#jeJ^#52gOb$Tg^BU^ly{r;6lA(i=JyY%fcI}5Nx z_FoluUKl33xearK#(goO*dBx4(C6JzheHFonD4a%HhwVo4$_lc`ZEK#@|G9K33=r-_CN?zv6-WvjsC`f!{A` z0v6zMVb3D?Ew41??ag)y_s-zn<J0v_>t(jyxQJdh z!@t>_vy5xdcFL#mz5R2T4t8hn4o%?|LIGQay_=2ZWFFSGl(on2YwR~0uDvpoL0&$6)tJCzuf9N5 z8BARtE52pYTV$c(|NH{~Sn>yEFdIH+wJ{vsd91!WkE1(})pzG{Fx6Q-Q=KEbP4(Gr zj_fvat999J4zE7dd-XYHD6o6$W+;vs3j6B18Hzt&p++~pWRpc}6F%pAdr}~u9_D4t zeJa&ye4lLU6*mff7M;Q4mxHrx#9M6WO05>isoOUrp1i0#7~9Ctb~Wbhduiim5AEgm zDE`h)hcaT|MVT;)zb)-Y7)9yrTq7`A^ymouMbF$v@WEdP!+Q?i>5XAr-N%3;p@kOQ z(dRl#4Qc*G^rikC$Zz-?At#MA__>V=1BsX3{}D`Pqc=bahNNP0HxO?@XIOFTi>VF7M9EZEVOl z1o?<0E$*&21sY*C*)@kQWI3IdrDxMxpU(WvR(rC01%~qnb>tD9z!%D)C!IR*iLIUC z3q#*oURyqCgDd&C`pMX!2Ku6;*l7y6$Y*=IEsq9b$ZS=6B&Iw-HcYY zns>(CNA6=zQKO~yDg`wE z`flc}XDT&1uArQbyVwUOW9c}a*S&=uOpGv+zW;$oB77UWdwGOpzc8N)n{8#evkj#! zck{?_Upgx?875`HhcG^NJs8IN(huY-qhGFK(&s_aa{P{LFD+-6vUR0Pc;0RPzJR^i z(qG!yCx<4EPhxI&`bZA=%y%-0VsY^i_J+X%|O+d9b*QZc^%Td`_A< zDeZ<@cJ3lQ-I-18ET^&+Pt~Qdc-CKgY0ZQ-9i;b9pwBO{VECJo>i?z~v{R{GJ7w6t zO7*)}29Kpw@3F*vPDQF`%P_EIqz<F!E?;THB9`!)+|whwu}b~g5^ zi-e~`p7IaRv4;&>C{$bA<@V4G+}rpH>JuJv_g2~X8}|^R(r@x<2HDi6xuxK;_AW1N zgYL5oCY;`PjdvBY>E)a5!Uo%$+#k$@&ilIx6E2sbLRn7l13#HH`g@JbnxJF-Xti0x z_d8!H<_iMkq_u5_*`c*%e8y@yCF^fBJNI0{Yx`4r&+Tv4sj`?m&XSX^S}!x5WeTpl zQ=)lI|C$P)Brbgd_b*mccA?)HeqIVC^*D>E&( zCOz~2=}RmBv!VCj(cAtik?dwo0m}_t3=`uhGk99<8Hb!+MpH;nJFr+p@I~h+=?M*W zhDGmZ&{=2*Bfev%v9qTZP9kZJ2_fMcID(T+*@zDGzI*_n|3Wyl0d#sYp1%{n zD9zvvXY==+0_i3)1y^r;RGQ5j&g{J|1`<1+N70SmE6wZ&{DRO`m`^t^zG922f+$eT zr=Ck+F!1T9KuzoyRZb4Dua|i)w{5Z1ay$u&>~6Uv!B1ybUFquAm2+``8>X?mDVt&xJEx z;?6KIR`LC|-NFvVh0#3d-nDx5tOa4@@FkyyuUgA0KZRk>iu3%OGdu_LnyPGa^`=Ag4BpHkjLG4~#L?rK`1;G=2+hml;ByA&Kjx-zr6i92VRqiWLK4(E#*>wbf{X{B5Sm8B zQ$Dg<8@_KBX5WrSuPx?o{Z+!#FY)NQgg;G85wr&x7YgYOm`uqkN9k+kZ`XBL^HX!4_aQ;K)`@~mL1dEhZ zbemnc;U#r7<)jyTowbrYr2UP+;ptk=tcu+vV=xa>3yZoPX-!we}Me2gJmve=J1(If)FR_pZ4Q-F4Oks?C5e zyum5xk`?VXbj7ZcS6upDtO?}D#W_p-j&BkBl0 z2kt@RkU`=~*>n|5i@KRH{MBmw z9&cNV9Uq4x3j`0wgNb6px%={$F!oxbn6&PVpbDYJ&Jq;mpgh2k{;^S^V{83b&e>O~Z8U#Iya!^V*Kxd9NJBs+(rKqYUS( zS0s3n7J;b6@1NkMKQFG_}iapk9^D~obxio&_s+cZ(*!djVvo}!Gv{d6K zKjzS_-Z7%%yQVzVE*HQ1g-V)FfaxzW=KyAnk~QKB-zt%vL=VgP&Emg|`(ibAj(O{M zC}}}~_w&Wb6y*97_lu74C&Xn*xtN`gi;vAViq|r7$?L~iarKb|QRg?_Gwzb8C)nY8 zMlN!tT+{zzH{Fq0=;u>FO1g@`1)bhXf614W5@gyhexKEElp8S>A62**|Y+)j|UXg zY<44V^5LJE3hsMqLz?geo4$hHMg=KNN=wZ*JlJJ6m%1 zjVlCu=-7+x+wjic&=qt-fzQ4gU)1`NU@s}q-QAIQepoJSvVgyIrv`r)`dIj}yMXNC zJM#~RYlPP4a8Ewkm2bJzn04=4Nbz%ea1-wqEZwM(Htg2sho5&~j$^lKey8~ z<}=xbVlpj5y-o1~_7|R?SomFw_b+Dmp#RwCjNz8)OIh-s63XmqrF4CVxPm2KDxt*d z6Zn0{Rm|jO32l%j@sz~1%mT0NuGsJmU)M8M0*}zIDg35;I_tQ!gwkB6^J~I3wr73` z>DbTUJyz{x;}(|Cm{<0^f7%{4H>?DFOb71O?g0C#TS8%0PTbb=2wT^z1fA3~xpeV3 z`~9mJTIfvvF*t*5mhknLJ0ZVzhFx(err*yTm9E=7%4CnKi)i*oMHM@v9 z{c}{(l&+2u*^e*i3~lYGq%T!{mNN~PLTbFnUP)_;OjWSbYXwy8F+)jry1uG}EzByQ z5bfzo8r1J+<*Z9`0foVv6l!pj4Vqd&evhW`l)1>XcPqe5Jw-{6QaO7cyITb%+1n~< zQ};_AGg))+5AAGuCzTiMJhI-e4o>D%!{4wWRbYq-HvH@7YStUOhGAPK@*Z!#u!@;^ z*y&jDk#0ZPF6TU)!N>BKoBlFSr}&=Qa$gTgFOf)Y8`u!gD*k# zd~%=9U@iRE7I(n=*5*@uoBUn{s+pLA-V^@6;20k^P&} z=ctMBIQ;MV*r|9ft%h!VBD5cSkP}1MPWT>2XfeHwSB3D6I6ruH=X#}Cf@xncg|>C$ zMyH<&zsd^eSX@t@^ZToi)}oN!y7cDSgH_nrMd<0c-iQA>-ID!Y{lD&vG}n%7+qyzZ zex%2To$JQ7ZYV@Xeh@!f-iLMBRtSdb5PosyV778kAvn7F{QJ|9Z1Gxn)Snq}c|UU| zPX~|piy=Jr6WPKYh4A(p@f+Xm*>-s$T@EtgK2aWQUvK!_N=^6!gFvRepor4uoAMuf z=CBrxim8uG;G+z?(c9P1$I{HXffu;y>BwV_u;4e7b+8AM)9PauJRr9p^f{bKew*{R zI(l>;xwZ{~#Fy+HOmp)j+_we(=*&lZtp6|nbRMC};Gf$UYI((ApbTY@z;)I3{Z{F9Qy1)-y zmaolwzi}ilXl|#ByYqCjS;%{Vt(S#-@l6-HehB(oKXr5tyVH{&xzyZKjo%#S1&>B; zKT%6w8t+TBUF0bx;6D%W$NmKQpnt!`grR|?^Aq`zw;z?XI8*0fGQhdlwc@oHjeNc8 zBk&y3pNn7HN6_w&0_(&{F({8*CI z?s^t_oc^$mh6&QO47@)4omIb%k@n|jk!j3l=JY&DnzSy99xSh7?Jh+~9~z^3BIFf( zR-w{mKN;2dRCC~07UB+3ZLqQvB{mPq{}t*7nOYNEVXyZrhKgltfA)f*{Os-?g=d@d%x*& zRRyojy1MsoC2QGP;=3z2eLlWlHfzX5Jd?n`s`((hyx?|G#_4 z{csz2lR53UnGCHN9bwN!vY(ttyBbfUmN_Doe2b;aU#H_UB2sEmw30tWr<*<1z~}I* z1WdjLUXkuej^vvwqYwYWz`}H-Cvq9}dlgLQ8aq)>g^a#~VSmQUiL8Iis4B&e0%cD0 zafAp)qBmV{3@=B25gc+)TJvodJLYL9Ma7ueReShRaE#N2lm_3EGhPu)@6HYgMCsW`eSBebawCD3g z%Lb9fv* zDFGh!M;ir7*zZZb;gfl?&y@6?yy)p}cxE1sg7)Q2gARzudyJ%&d+~ini0H)|PEOr? zsDhx09n>eCY#%y>>jBRO(k21y%{=sa=ntTKnZ6W@uVI>DUs~qohjTQ(w%fg_y2WgK z#yRb4q77!sY-A zs(^tNK=Z-R-<{itY~Q2H(h8lqe}6I4K7rJuAeVkm|HkfZ38Z5d;67=5W)1bI>0^Q@ zVjb>X{XVe57Qtly1G&rTZ`sPl!8COaG>4-v+59#k)ap(?fmflVFF9|34+*=@g`Q89 zw5EpFE!0Bs+`#VM^)btG3#D;58&7e5z*@jN@gxL!x8--(!IUtvG*?hw^$j-WSr|=+ z9<}je8Pf$T(jDiAB9$Wcw_P~(KsUrihg|k&csPx~x%Wf>XEVT-^w36@_U>htcQ%|B z%`2c)E*Dtrrf}MQqyRm(nQVDsIQrWQs88S-=p^A(d$!rID1#Zx!|4om2hZG(gXbJh zo8h;lqqS`3|9^dIbOgtgUoA51U+_8(7g1$Eb&4FsSQKN`tR**w<3aat>Cfz zyqPUO6@lNqf;!r4WCw3XP!Tei3oox>N1z?O*<9=QKwb@u&2v#;Xv4!ExHpo5Hz04@ zHMy&#$h@0YCoS()Zsa-55P4K)uoz;-VB#L&mO z$ceQ(H~?SF<`+vL_&Uc#t1D?u4Xs2r?J1WH?M5MD%BF`=O6_&YVw~j z=|lqg8Y7#0uTmKOH-X+6fy=tfEcNg{PXmbqr&G2v8NA_cWApqn+D z1u(_PW>o<-@3&I0Q<+B_aV}k%I$tRJnMg*eIKxcx6B5rQ(%WW*RIp>Z;1roiZC)3U z)8UbV>aax0z?tgGtM0zP8wq`Q0<@Xzz zVsad5;&rDJ-NnM#Sc-q5pr0Qs#K65VRQ^RlS7M#TFmWzb)+p$^VWN2DZ8Vq|*xmnH zC4LzdjVud3GsE_ZUl&EuW{m>!8hloK14huAi3PN&Dp!1#xR+lq;NH)P5_I*anAtN8F2avCzmMO-p{ z1z(~GpJe7N@wm|vK3oUg(}N`^ZdnyH|O#AH0bA>!^F!PF?`XcY})-d zQf#s?4BZTP&xI(l=3YGWoKZ}c?<{!DAV2;a|K|5cQR4Y;Gx>u*a%9aC#Lc<3T!9@* zsa}dWVDVU990WgG>qTO}_oKP|G&25+mx*1}M(_Z1mR*0cLYx}XiywcQU8^yQ)Ac%o z)q_3S(AA=^qBW28$N|51z4-8EBmVjUyd_UJiw!k_v0$H8tO0M_a*vo4@kaaxP2la7 z!(zhjTjGPM=>L_S5{EaI#M*n{ygrx36!SykJ!FUP803mgOV)}_kLFVOe}!UO`v|cE zGy$uqa?$heM0A_M@8oh@oDtPm>`|CUou@of(ga@LZ7l9H1xsh#3vu;`i?W&E0UocY z5)Za?mZiX(^yJxpqV9w{S)rlOGxL6llXQNW)MoYzJsa_3{actdEmTn2Ko#zORFSbQGV6lR%&HU3d8dNLLKZ$VqkgvFWodeXALjjmP1^9apX`LSRbU+tQsb)A zVuVxB)nkTq;6s|N7P_~9=e$sZFOJ?Pw7_Tk;XqBywkhoXi((oA%_hWdA#<|F%sY7k z-!Nqf`yrLk(7cI!p4&23_OApv3LCz1$V%p`RZ5kYZ2983tJuOer8I5nRNiOsIu`w^ zgamgxr5X9ryAAAU+fw={+4GN2)7kJhCG_x~BmbMYjcHbuphsaQpBb`~Y27QKKJuAL z^YWx)d)VfECFs?j#rNAEV9V!}fG^?92e&!GHrtetg|7=gnRJ|;8B&5=fD3ZU=&*-3 zV`iYM(o9`F>kNAwQB2PUxGBxiBdar+b+=-wC~{Mpwf}Ry#QGlx^XGy)*I6NBD)2ZB z&2{IW#>&|`%vRvy0#KLF+Vm_Wf5C-o+Z5L^GsDl%6(0+a>kxtc>kJx zz~`q!{tVuDPZjHUKM&99Y20(fXI3!>9NqhqdB=`Fm}PI|APgreUDsOh7yl+01sAN9 z=3;c2QO4<9YJb*>Z@ttOX$eJ2{aIa;Cvu#VNw!C<6%1|vt_km~b> z9G-cq_snzbps9Wb&2a{%`ZF*;WZsR&Vb_*_+zNdC?v#ye@4=7ed`E{Kv>Llw^#NAA zeX%x$RLIHcAH>>19jZ8v{=QIazUgW|s!RqaB-NVRch;lR=xUDr}j^}F`$ zV{ig3HGnryrv)!=g*|FmA5#jc#Buc7;1~O@r&}<>DM;21gDJz78fFyXtz<2UZ z5$xX0gD;>EUZY^)=#F{x`!ISdR?iU9w$H=)2d_#{$}NNpAKEU&E(&1vF=JirFIbB>ITCZ^Ql8W?3zhsMX~HQvBFvs!~3W z?kqw#=!fT7H-_T-!e=t(+kBbMibSxYk@+eukr@>wP%sr>x87RJ5#!N`20idJdRITi zfx%xuJ~T<`nPt!}j+Q%vU;4;jd}7HIdO{`Cd zi{j^!1~jE@&t>A7Tha6l&*;kj#iC#5Xzbt$DbeSKXui*fA9;vObk%y%zc`dPHHM%6 z(JC>_%ZXpbz8+Z;@!E#TyuAu`>xZ_ALxU{&kIBe%Snd?{kC^gDnAc8d>=j3c8S+&p zFw;5h7hfzH$oG{%i`HHx-jCGd?ZA^c*5{BIZQ6^kFT!(2c2ty=bmETJz?d~ZE*6!v z;w^t;|9cMFaQPpx5ZT+@3#Y_}&k^&Sy98BQPZ_x!7q`nOK{3 zs@hc`HoU%e#|3ejdoB%qTrTc9x>vk(D3_8K+!mLeOB1I_=xBTRNPOBpP*iD|hyJqX zVrCkNhG}_Vr@Rrn>uHJpP4mGWsu2(D`Y1C7Yhu;L@8ZCxJ7xFaGko>upIDi0AzNbi zKYw8Pcb;`?6L^p3oAQRw7sc;~riEt|Rh<`BISOB%D#**f6Zc{B1+9(+ zbat~Qk6*b?SPRxfkcSrcZFE>TXIfB~yI(g`6tr-b-XEsJhfcmG?99Zjmi6UsJ{7{* z>H^vq+mGL@{w6Fnz&(}?;0Mn)Wm?+{>FQ?aIRR~0+b4xowrmLBGfbU@{(`nyZNSeR z*JApwz2^j~Wu9y4qRyI4|4wk?hMq;;d%JiMORd^GQ}-GWKC3gLee zxY-mN_Nc0m+J=~Ol`#&iX^$dWa@dlOe&WtH8x~QIS!4Nv2Z3x9cyZCV=jeWlVn4nW zLG!WVE5FWTOSi-0=QN3DYYzwG91PMLbG~HcNZK+Etma(;A8lt$Zn$4f?l_uD14q+A z%yh?MjQQ?qj0WtI!<%Zv_l~z9{YLmqrWo>_=3{BG30P;y!&?6uL!ro?%(6D%6Ss}0 zU8}NbpOZc>51c@r(5yaG4B^*$+t8l>uusVv%&(YEfhQ=3x^EoB7v#*KkY32{wH?6q zjU6clIlHe0eR;;LnV50$Sv{@I+g3Q!3C%oey{Q|YHrtKlwLaM3PTVla6SFq&5w5Yf!VIxocn$ArxaxC?7$mos9&8B(O-b)+Q(nt!~yWYZ^n+e zF#V&rWotNfG%O$k@3%@i)$qAuT<^T> zG%Ia2S=wxV?EnsF-$51 zYqvw~?&X@kG$kX4DrPQcC6d0R2iBaFx{z%dG)Pj#ED$s#k+r*}E8Q?aM%a2D+iBTf zdc8XvJkvmUOZrH6g7GYP?8zz|dr1L~*~BuOn2K``Db+NamKQ2(chK;qdJUh!cPiEU zP8ssWQhmOdflngU^GO&ugi<|+kfCQys_$82=vB78 z2(qCnXqC0zfUgs5se83ZMYt9Bcrv~gQ@?@Srn5ZgQqcoS{|H*ek~adjPfJ44%hF>$i3Vf{j#&@h9o0d6HmIc z#Fch<%gA-5E7fGVQrERIvKTvyn%r?EjWQX<+;*T&-Q8#!w9tvIW>C`zH#)RVq`C5G zG~~1!g_ncFFmVb6>buj;k0KeUPev!SJ6VCJt+{?8jc@Kj-=HgIYFg8dPafnl2feq0 z##5_ZU{?DeCvGs7jyrgfxh=HE=N9Npg?^~TY57T_&e`5H`Ho2An+ep$!H1e%f(K94 zloCJrP@_VTv@EQP6{P3qOC8-ZbQmKP^^~&{f-$0+$6)b1w;O zMlITr6+p|bN%UulCOx_lK~X6%gldmky8vHiv`dS)LMgM4W{(-Y)Xr7p`=e*MFdijDfsO#Rq22{kPe5|vfNdO z@&akvE_mv;H=>Q70%`Xjbc3$^#TsgrPbUXa=8{~xq5mJ#%nYLU>gdY(UBg_=f+-EG zR%{nn6ts1>#PaS&x2hf?fW1(olA#2RXq4X?+-!!|n^bGN~LB@MHd(ZS(oZd!3mNzZI}ebdZvQo)%m z5)AMQ10!hc3I%mrdWGHbk3jw#xu@bnc4<`vy6*9wJvl7>NCXA`#6GAmXC09_D#Hw7 z_UIDxeI7v?SCA$Dbe>&?CvD%$0%{a~j+IQBLpsQD1aCggdgGaE3r<&u#u@C?(K)n6 zhMiHb<7{Tm91@TtxLSRf-R>Gm7RU~a%{#ze z(h0^4dw4TTgoo{RHwApK8`uqKR=!8zH!EJvZXrt*xHq3%7;qm1* z6`r~U(^A*~aPaIl?wGld4azAY!w_UcoR+X>&}2LsP2;00m$9}crL;b8I{&_MC2KjYl-7Km!Tr-$ z!#h!m9$`mrr@EfCi7BN%L!G&Chm9;|K`D*Qbm8wBZDxw8rL=XUD<3y>8=Et-6lX72 zzGuNswoav#&Lq2W`zL$Y%KIgxA$ah;mIv6d4J8!1)RWKbbcBrxFQJ65o_xrd z=tzsbxT#Y{U1rCjy*Ez{L+{0KUaQ4wo%9G$t3J$cE(au&P^StSza!6U9dH(DV`wnh~ z`Ti+<%Z|nrHxs>4hisL!mxHZU=^o`m@3rL(wU_x@np1Wd{>?779G&%4-&xNaUPs>| z*g@#rsj=mI?y6CJUj_#=it3qB9DD<+=NoY31*kqRz_G^!r=f0-$#E{C`g0L?7}$#j zK%3p3HuIhn=a~1uF(wTwo4e*vn2Y>T zrXHWX*MSZMZx5 z{FSxO6isdy=S^*zio)C^BpQDvz zJw1;W#qMXPpIS=$bHOIPy^qm~angGHjWqY#!={e3l;$2*kV^a>R&!~Lv>0oUi%F@^@jU9ijg3<` zmwvzpp4nv!6Q7$&X1k&9_1MB5USQx|;Cfm*GnYn7APfEfjwt9}4v?4#BPVCvhRIZJZ2Hnr2njsrl%p_B3GWMa#d)Kj%ZH=Vv*q>^D zUdwc*8A~^U^GK^LI45fjrPsme5m2NtcMl_pFF;>F*EE(kW|(yOA!hb7%h-u*L+QgS z_-x-SWxZX7Nv14^{^&1cTK@V{^{H&k(uvIJudXx|a}e(w1< zlT90M1~5(5Us~o4Pm8-Jn`F{QdSIK4zF;SYzj3MlZ=6A!mFl%w20d1)*JByHOj5m< ziNVh!)%$rEvUpN`7LOr|C)H>182C$4J%5RTza-W3ml*hsQa!(sf!`?A^BWoX?NU9z zoq_i#)$<-1x~ir6u4;y^YIMTZbycIIwzm&4^ zu5ZGAWHpzbAIYZlqDIJkHI;OXkR$H%UC?==Dy_VoO*ejg6qe6ak?t%5XL8dUA#t!O z{4nT~s(CIneE;#ajisrLko|GJB}gAsq%3%415B<82V{SFcii{hP0xj2y|L7~UpD1r zb79r2AN<5}=s9sGg%Fc}T)$9Gs*{fi4~)L>wYTNe{>paYy5a}7$87a${bu1x%t!9~ z6rEWk*9byy;I&T7ur?5<8fd^**r@TT140IuZ!eVGAT*;vA2?Mgr>C9+({_= z_YN6qIr^>aght?&)ZSM=92+h~-mT<;ozcDZXsF<1_NY!TwY}Lh$Z}A{8EtVHD5@O6(q+D&Z!@jO2QKen#!IB}u(NxrZKGoUnA z9A7<|{CCJ=6&cK zW}N&lck|I z^Bc}8cf_x(+#rNxINKas_mTCS5lU?cd}-@+bvQ8s7fyMnkuClBkTslrJfg$td@6c>4DPXpb5O(g zxa|%n^_>bje&i-=0k4Jn1qHdsT~(To=AVzCYp=l!Q7dIDZ0FGVJLuPbU%=eA&Y{9; z1=up#EJP)eR{FzNX)dzT@pyd+&yH1>*el~m>fNM}oTAUO`wo%l123f8$Ir6X@sVH& z6w>*2r`ezbk(8(g4SD=Y*1Iy2W;{bL`KV(o!#Roqcf%9%=MZaC8AZZ)JhNu)XNurx z@{SL1Z}qNY$C0TQPAUcZCHH8JnYI8 zbhB+!hOImG&<20($ycFfTr$beqPJz%YoS&T8Xy(W-5X_fuXUb)t9C=Id+qigvR#_T z>t1i!3a@x@dfn>-`wA&x-zGupVlw?~iT!Mwm0&a_0POlGt@*-PcfzJzb3YZ?oF3-va*Ffnf!8 zuS4LWmAkB{dwl~Q`27*Ob+7Mw7Sf4HZAaI>{}W!j6kNm$A7#!h=fUGtKu2|ZiZS04$nSdrrCc>t+RZh* zZsChJB5tlQjjDee8hfIwh9$vCB5| zKQCq%#?a8PLb9>T6D_P_XaV+*F+S)|Y_O+mczy8axinJ~{D+!*qG;#IHLB!z|8a3Z z$6($JdeQXO2gH3%9J#t0I`USZ5rx|}+!Xt}2fxmVfd|a_lWE8`U%epiHZH=ds=cU z?E5YqEfpW?{SlM2a8J`N7qf1@7P}q9dEm-b@lX2);!NzddwsYis)iMcoBE;`!2hAr zb@ldVMI+n;I~7-m2kvbb%a-NR`hRc4sfU+{y6DEO%={$!m;1tx0^XhTcd?J3kyy)5 z?)%}l81k~c=-w}%a(6Z6cZS}TP28GK*=tmJWB(1Z#$6SZTHJ!$95s@)!QadBW370} zjxAYZ_e0xh+Lo{JwHTd(d*jS+?f9)TBh9*2fYmU+BmcgCz1bz~pr5&GfNgfitgh3? zy)%EH(M||xR6t*ccIAUYh6w}l{&DTP^V)7)>nG5N25a-j8L5ID&e&O7dh;f2Hwo+d z6wp-7zFbT@AsoXl_{@I;xaAqSQ2W`~9X5y?OuQ;s!e?G}b1=`ds1Q_I7Lx9DFf-X) zdW6@Gn_i3f+)BDNS@5R*U}j>Hbgm?eLMMM>5oQTeC+uHzp1otErp8K>k#Q^g`GQ?v z87*})LVj(?Q#K%Aj#LHC^UI$1*`{7$(z4AmdJ=qtnQI2)tR>Qx4rT0JUVx~+*mUNaW0-dFA>%f`OIm@b&W=ad;B_0`fMrjvwpp&DtYGw|-R6WIB z9hxB-EX;wXi7rk{TPpeQe`k_OC)_D(9J+fBxl->8clu}}qejNFD6_(yDxfo4ZgHT+ zrXFB7fw7irM=?u0Xp6N7{?#;U_Ys`2K#|%$v4uYBNoDZ9#w@X+mnvT9789x4+YF&{#L2hy&elsMdQvt>h8D0ku#dKL9Bb74j;um)dh90 z4RKGl7_3$I+64DuvC%J6<4$|HX9RrLD(Rx4(;@DFv#8eX4PsC`9O^2;Om|e5zJ9^$*)E{u%yVXgs2jrdR9pkzUPM z1iVJ-I}Mcf-K$jEv5uY5BUWX|4`8WY8!c^|3p6{>9g%!itvmkWDQMNs&)~2)h+lyr!mY|vxp*&j^ovFwoKOweP|s(7 z{k&zvf9ZI#0QjI5ESti;F9x!r$|4ebOydLgM>9K1aBO}|; zI9fvSzwG$!IZIeu=!fz4jy&koLiVU-DUH{4;JO2rvr}_Q$$O9!{~D0S95XnjZ+dQICZ9^l>4*oP_BfrHo+$+*&Wk%$Zbj#ADe2pJ z^Xo@o{i64>v=*f_ZjUcN?{k1Hh9}J@ZZ?;nJIpMhPd*vx&y8mvXG^_H zXwoTvKHf8fJvAu7Stx*4mz`ndcZ%uF#Xugk>pW|{wV2u-3g%woC3Y*Wn6fg1`KbIX z_6^(~J=GB2%bT-I{QS3f4(9Vza@iKILMl8P#OIGMVqJ?1D6d%%uWVJ$Do)`16BfXa zy}8apkys6?o3&g#8*Ia+zLwL-7rzyzgIIgd$V9)=8v-jGM zTb_H#7VJlU{Gm73p8b|R`I$%ePkJb6m1;jeF#T>|k_5W(%|pMjgPYMc`QDlD?E8nE z2RkeLjT6@>Z%qICpbNgE6My`?DZEbbKz?!Hi{>?_)gyDMb)vnJ-Z=DIOR_?r^2#AI zxSm-XI*-gtR_hrY{CP@()&x={pZT~0_7ru!y~rwRP(8bzBNIXO%vBDC3Dq-9IPw(8 zl-K1cIQFw(g4XS4IW!8Y*C=?^r+(xG9rDU+N8VRWj}oCnE}Z08=kKcdoJCp64|L(~zQiCYCgpIz}BHieOrp3Z}>Y z_H-yJn1U|L>9yFFwt57U(_cA_dD)8InFdpeIs8t;S}4tEHee@KCc-19r>ZosHJsx# zu7cHr`OdLr6L@Ds$aoJ}wN3xA7wxdO`jtbbQ9oI^Zz#ogh1V$LE9-L~OhV*d2Oh0v z%TI>U!xU&!_g^y`yYMy(OEFo#;9~h!hba3ei-gy=aky?3KOu-lMwC&(YpU*?VX2 zy?WkVchBorzvuP+@3_y`S-R^w&*S*Kr!P%O1y*_ZjIopo|V5!%to$)JI;PJ z_b(Oahs;4X4Ei-DEfPnT&Y{21B0f~+i=4-E=yHz?YUUmx>ez&$w64ZrD^|t`knT3^M53AX{-BI>U$HIIbTZC3^jgpytpXAN(~` zlmX|}+eotxtCc}x+&gL36>+`KMgviHe=oUT0k0Pj+C*~?l09f^=i2|zUY}JR zeVq;!H1}Lz0&m5NZ>qBM;Qu`jyeufz?A`zOp8x-Bn34i5(4IG%d&;iED`iou4No-J z)vq$qYkW_$)H*QYjw%j-mt>nJ!FbzeHi=ry~1ni zgC3E{y~rY!i>^{~&$^Asb2E9V_Jv;b-5_Y&t{Rq`@0@j^F9rVa)p@MqH7Xn&M;1ly z^;aVN!sucBEPByxv9fnTs76a!sp3|p!s0o|q=){k^Km6wnT>p~EO;=Kax+~W@7XkS zZWaw&maRBXn@yq7S#(!2*`%75MbX_JDaYG5u=Q)`Mw%uoKIc3*2>j0UZEEFO z&Nyy680QwN45f_`v~B~S!*R}2jIf;;1cR5f%vZMbH0F<2fzxIcD0bhCxO%k|WTxCu z##ZXc=C6`TzxF-l=dKof?_vpN`&h}ZU5~34mGt`*DIKO)-J(C(uz?A&ifrMq5f zjZDb2HWhgMz4^-hR%!5KYO_zigVM(VeShyN^CjyZN})u)%E77(U4jxa1Xz}$%i|Yi zs%I9YQ`m-@{G?edY89ZBdQrQ?$Ew~0zWc?ux?IcJDDgLV@F)8k^7p*e12VwB&s*Pw z*QS`7`r*B_*{&HI9NS_#5+QrNn58Azb~GzY5|>Oo1dMz;)RW>%iS^W5AMotJ5H(g?g0lhxI5p< zOIF$S%A)-zdh*NjmsJ<=P7BY6Z@0x0)u(}3RJ^Van@szzdORVE4p%kipr1M-7y8NN zS;k!U3|Z4yPxLm-ra2G#l{-(`4{s>?20`mMU;w{v(NbI*4-I^h;Ih|8r*;tg9I~NF z9?XW;-9_4@Y--cpoO5Ok5F18iV?MIvK^EpB6dvLGCq{DX^wFYQHaag(k3oinotWA- z2R_1ayt=iMh!~SY77HhEoxkuDN9U0HbNB*c14J_=hiu*KdBeAGvC1%)IzO`Gxi_Q4 zfwWu-x3lN*Jr)R;NqMw(&m{J0(1q@Hf)^XQ`jJXE=yQ>S5j&3OkL*D~@S%ikvEkHV zy^);@-MIc}Hr#1UKals;aK=d9bhPvr&1v%CWLnX02+!PNNdt{iN-{V2@Wm0-5Pb?J@xJc)rY-n+ag;k4Zo8foF6}dt~w!Ww@F@^lQ#u&1Wr7p+{+veXE1UCu16NuJ4r`xdV@}e> zte1_PQapdlS9-t`2rcocTIlNXB*MObJ-Zr5H1(!JaAY}+DseG@E~lu6W6I`tXXn zp|9B5Q;sN7kkgbU(%yK;kbEXHWBB{NOqaXNC2cw<#VK=FbSOw_s3eNHU7e-LIpnD#xLxM%VSExbt9&bXk=`=Iu|E!wTL_n=EUguh6^8iE_BX zg$efZ)}$1wQuUbFS1>_Nvxh$O-XU>C*hnkjOGasjkoPcN?h1#t)8RllPO~g`S(c;3 z=TlzH2FJ8KOyJxrOV7Om{JSjW-v#^;veX|T;GvME9twdBOj(+NDH2B10*9MK$jTLE zxvlYwF7vdflDZ68sBYaPhxJEDdT)GNJ@;KIuQ`m|^)dC7m|`{8n}&S#7Nm^yILn(Z z0uylcQugdS$_w&3W1DA4T9&i?Pby?L1({PAk~^AB2n^cH9HFQE z>WoaUl~buNxRO4hp2$d@3T#6Syu*W@%$!Q;1JLbt-i_jyPNizr;AJ*A6aFsHEvQKr zPJ=Gik<9Tqc>;{3q8b_Oe-g>0gFRW@bEIjl)X2ZJh1TDR432=uu^&qZcR10n58!c{ zkD*@1&a|SrLL;F!9DdbV)4LS*egrgnE@XmipJr@HIS*avr=n1;F2iVIMOPYDtiZ=S zlxDATrISAtIw;yLWkT!mFqh(dW`@B)nhr83sy$aKnlLOF8;ZAL@ zC^Xx^ggmm`X)XN4R(<=DF+91;@jILw)eD@E2X#J-+@YJ@!9mTSJ2T-I9?_M;uFcS7 z>{n~tiCWvtqUv#YuT1`PiDZ2tfN_1+yst3tcqq`_RMCsI+JQH|D-w3ls#+R z1XgVO@ww*uU3gDkRen$odoMZ9w8Shtz-0dabB@wA%BJlr{4`(N?^_n7XW3}hy5E6y zoAuVLTiyeyQ$4 zbQ6DjjsCtC$CUL?)^YJ1iTCYMoM%??lE>&%Zg)sAQ!V56Hc9mN>mfyzu$VtaB$4i& z<4WDV3;6T~aF=1Hl%5mkann?Ij#i#krn`o6H|z^Vea>T*19|90b>OtOD@ElWdF1+gS~(nJYvdYHP@G5mpF5Sq zG+c_{`>lDArp$2R89g?LkGJxWZR^HmuWJw9EVP#8(N?uP@4c~2^rbvxH_hN@XLpI5 z26;5v){{ql0M?*!%hcF*YxkeA@bO%8VnT(`sNc{e0Qk;ka;^o=dZu`|_93 zr$wq>F0~^+*1dU7tgN3)lP3G4DyiK- z-#AsQ+5kU=V<3}nmbeB?I3hKG-;B5VS3tidQ_K)}m-OJog&fIxv1#}9eQjJQEylP%0 z@~)9emzFx9yQ2!UtSMyHe=@JTS&jZ=qSsG<66d%{PBiIjrNGkxqw6GZ495xJ#XXW~ zy!&XjziLLi<|Na1KWk1pWllAlr=T-^6o1#Zq&?t>|E#d$$_q!(y|?J|U1iDg<4CHA z-}A)7=6u&>H2RKG$t!sFE!y{R>M!(AV`d?$l^ zE>-0}#yG=_0{UME`S%_n{&?{S2mPaBU~8wYcOA^X?6>rlFt2&mGp%EEjtI z8%Xg+QTzGzDb#M@UeW%6mGl6v^6cXtQEU5XxdR#=2; zdjrl$LuHAd%jUycF{O{0d=36+^Re}!`QV|_{A~t(&cyXH_qU%lSWbiQxZ1-w@oLHt z`2d(?iLR;a*YB0+H~k{SC+efWkp8X@2Aq|>{yXC3EHY(DYVvTk#Nv6 zkuKV)6z#T9jC<5e9vO#BxuE%CoL^tL9UhGX2ciW0=JE^j=-&H;YI>|n{2=GteTA1z z4{79u+~5&DVsn6@JRgZ?=Zd>H<7gwD(q^_g0qn-inCF zdh)^2Bua>CA*>G8lanhVbE&wQ2>qoe4^@Y*IINCn`k=bJ`#FhL_NXEzb*LpT1SC<~ zo617#Xf-(sGtPo`|5Sr&)Q}CJ$sD}ym+JMSDzYSR@cN3ks+(7<$<9raNq%^xI_#h$ zFF}hH7<^Bq{H`JuKV&RN-BP{qtSmP`i{g7cPu1~?jx>Td?R;Fes%NE2@(+A2uKieL zzOk}=bT*j`j;U3~_bW(UJ>)8nJ*4u!pe-K*PpIGOkSf>+9Z%SQuPdc=v~eFksLFugaWh<%Sqy03NGwExR{Y|#g219vymLifjf@P{Om z>qAXv+`q+FouG-mm@^8`&Unt?=K6gfrdj`PlYxwwL7Me)oeVnD zyq{*RzZ02Y?{t)svs^s5vq01Kn)S{dS@b=}RI^?V?_|pimy)%t`Ye%}CchIWlT$d- zlj(spQ4Uv8vmSgXD|b38Ra=~4k3%?b$1hjxw;tho@VqqNxL;XXdn^Tjb1eCHehnH= zQ*0FU?S=t2nLwK>DzwvRHnp099If$cO00&wv|k-FDX)0F$j0XpqW z*H$HxE&M=Djyluu&_tT@!;bXO+4MOhk%rmZ(jFTZTGkFe!S-XxH^+s}#i%LWcQoA! zcBT373Fe<4NuF4eykQ?@K%%>)nGzkB8#mx#hTXSmKbUOA&h3e-Gfp&j7 ztzMC9Ep(LEmY?Ttb?kNd-8F@x5AMINblKWf@z zCVpOpRy^uMbGOcuMPVHY~`#1r{&xW2C=vUNSl zX*!c(N;`_xnMDTKOk*#%MwiAcaKMsYjA}*Gr_Q4OlaaS}p#|BvApd!@q{kPV(w=>@ zX!{dM=B*pkq8lZ-(9jUBY(Sfhz0m6oO%Sd zq7v_R<~Loc=j26AA0{D}rz-7P?nUG9J~?!?5;3>Dp zby;3x|62HK&Zdywn;+#kj!9E}pbJhxUl?)$pZm~V*Hn6a@NGH1BdMA%^_-AKi>?)k zkw(7s&lP8h-cQSMA0=L!%`Kr5Yy7wz4>B$b{u*!KA@?4X<3x_w`q8Ov8MI$@uN*(( zul7T?IrLpIx65%QskQv+Tmo`nhTRZthT|L}(PP!AP=vapcPTZ4j$OMXdLH)&u8={_ z`Pt(2Bji6DU@mKxUXJ@nw+*1Wqv6Y5mL$rqlTHNC+=xufrir5Lx-37k>|FqI6Ok2g z|GX&6j|}Y^NRz>R9Q$;p99PmKE|3}z$)d&UPL|_M3VQ}o+Y;RP#xeZ8g3y1JMP1Z~ zMgOD0q|+671t0c{Wf38yhOX&Q{GM{_np(4wk%RmJ_=#ftXH(O(OyvEdb0HHs&+{>F zZrmuMBj(VfLC}n~S%+@WQ1Sy_dd7aGX!{|Q+CM@s?Z72s%Hl90tiR>Qi29SlX-QfJ z4T_2qkIsiv?X8$|Plkz)h7m+KBb{mCFS1WWkXLW$)1sye{SlFxv*H@t$>QFdNK$+= zXjQz8=6yIeD1(N79HUu}T#!MTbw+5`XGbBM<;)Px`gbL8TjBrB<|ga2sH&fy<~{iw zT7|ojn)f7?BxE`6 z*`uVb4Wo+lvNW@&F>;X3rXgEZKSMFd358cOi;9*NDqH7=lF={B$cFcoiTy)q)afjG zF!P17H);-WQ~bNve<%h2w)5mQOplACQW(9Ldv`~NwU?rN*|!N9B9bNyOjZuhj^h}6 zNrqNZ`C_w*uZBs=X)G1z4of-gt)%Rh$%@X_MSRpFiJV5JD;+;Y^BDL;V|B8Xh3Ruy z7ux0m|6C>AWDXZ&Ufz>-N%4>On@5e?IPt22$vo{@68Phr%KMczJPRJE`Fn3Gv#VHe4|t&VjCrJV*(A8?ab$^1 ze6CmnKYjWI+MYSDl&Gg&S-WitbzbpKIbG0}4f?0xeEUU7Gib)%E-AD%^0yKfR|h%` z=y@EpxaZ+2eBww7oqt~eSp6Sm{qq!bnp9-<>{rU7&ne{etsp?O;62|MaD41gQ@mB_V(YfN>f-^^jvbNj;n<%0 zpZa9FANLPf+KD$+Z>|~$Ub4ZHE^N4Hkm@o#6#hotxz9ik)eLv&ZGQCR`qg4o9V0WT znr|Nty0=+X8+mAFP8f5`1E*DkUnAS(ML*7Hn4((gj{MIU6OLPxubMLpyhGaoY&G_& zYIp=Pd;gkp>tB_HF3t%}iUps3S6d`M&!T0K#C@tX7LUQBwa^+=jyovJDcChI5O&tk zt85#>KIb}#zftG`H?&~;?LEbGXi-YICcdu{MT@h6(OdH)GfRKvg1E{(Q;`He6x1ktC@=kzMDfI8cg9clV*x*?Q-di=~TXY!(Tk;jqKk))40== zC}I3Km#S}ekua-G%6dNJ=m*0x^Hvy=uIO}Ue<1l2m&s2-pQLkx@;G9eDbL24__{}+bzb8 z&qH@`0B;?>Pjq+Aqay=?xS8QWF}YtJS-%eAv2Bis2aWS6@mw(1&^azz?#ZR4H-phh zbXsh4%B3{35Y}6FPMD3$rTifwJfugw`0yi#M*j&Zhv(QheujTapZY6 za?ipv7>0@QTT# z9w%q>+{oKPx@1!C_z-Tp@t$Z`DU+;MhVV|0N8=j?e_koS2;+UJGqHT?-whQo+t8Of>Hlul`l965G&gc%t`CZc;%;@5w z(k>oGE-01ef--Ujs5EDQ;kBVsuMJ~1q|(`tF&k3pY{-VadQbq~UF%o4@SeZD=-kL; zaPThN`C(tmAC`>$-ifucOsHuuE#{p@S&~*@BJ84U;)~C^qpQe1QrXBe{OQTn&{dv;l zNpuVufCGQ^<#w0hgX@5d!HPZk#qMe7q(#2jW<#FQ%^A23G~tapF!{KWYZfvIQ(Bk9 zYSwGH16NO{+Gktv%dIm=)fxNd=f>-XVFH>N?bCJWTfH@-}{ZY^f+94L3f(C z=_xwve5ENe0j@e;{GYr}SzYMapJQdu7x2*8>=5%uj*&aRV_$f&Rcy8$1z%DsS&rN+ z>TVw)$304=#sfEqmzykQ`!wKMAJ>Y=1{UaVg0DGkbvf)MaP2U8ZaX~MtyT+_||@~3`VYI<;KfJ z=pFdxfP+n0w5%MiGV>}%^!;hbaatm*?y2O-2dPv~cQJgl1EgiQRAhrJ5Iv@u$Xejm z+uWIlJhQ%X$PeWHt)DHjEA^J{zyN#A@)r2q%F@p*u!wH56mJyZSY;{4D&PZ^r9M!B zoGw|K((6@0!F6*HsL1X(9viB^4}gD=w^RD35JHFB>%z z&!5+mCh?L!?5ZtnKIq9PVE9FiDvJxIwPZinBwGLco9et{4XMxIxr&~vg8m_k<9!lk zJh-lkX;xJ(4oRk$@#(5=|8(Sv{mHcJL%eF@vdXfCKu^KoBPx?=+A_F)GHu-)ry6^* zg7hs)qSKe>tL!@$bM`Ulhr=CJRYHIBwK!zCD1%h3eZO;;F7R8qwNUk#^og&7NBh>{ zqv>Avw>-B{BEw{_>Ar#@4!JC;!CwQ@!-Jo&3Rpq2F3kt%k9fcbzoGwnz=6b{>f5Ze zOrkXtrmH=)Zt$|fNmTdOM)j=ah1?)p(m|tK^&zuMToG2jRu^=YI!m&6%x-iC>-JQ3 z>`!K^CQONrlazkZ3G8@40YAQ2Ib7*94*-|sYr99OmUfsQfN%QoD?u6kXB@pc{@;9k zaP)Y3vlF=x+au|=?*wwgI^#ejH4dGC8Cs!d8^SbmcP9xm(nf1APjmIna-pYUJGomUM2>`0i@z z0`Jb?6VOOMN~C`^yy;Y3XZl%RO|H#6sl$9{`rSrNaly#3IOR;;>*9O9cB5aI@xK)! zBdDqiUEbzQvoP16#O$Ay?}|=|MErfHkWD8y^7@{Dyf!;>C*<^whIYM)Ej8Tj28=Ti zekdDg=%14b}O^Yl>QogP`6+Ho8S$hQZkM3ly3*19m&}I8hx`h3Y_ZyuX4LhhK9`Z( zY|@|J1$&a?Z-siL7;EPDou3r4nbwC+ZJ&ky0fih#_bfN>R~zF+N#G?by)dF?SG~ZS zBCmL37uxf{i{^o&oO-?^UA*K49ST$B)ONJ-ycZqGfd2VuYwEP#iv~7AA7Z;!$RG7W zo;ha!z!uPxd6V%nNyX4_PIvVtr<=gOo;IT8C%x%q2lOybY(Qf#dDBBYn@4}trOS1F zC>s1)Xp|mx8-Of}weT~h)Fe*>^co*Vx7rU~3ZDZ#p&FTfpQ})OvJXYUYgu!DB{Kc# zgU>=TvNb9I>-VJ%Daqth^{>b}iJqO=DO5b=yO?0_M<*(z!gKyfF#FMp*i`!X>5Wib z^@FD>jh3Vr2_5VmwL7NMW1XkM8`t+EJL1O3N1|ODWLXTs>=t%k_#N=4DreBOarI8Q z_1(?^RO?m-RfxSM=4}X|`+3mzgkBem&jwIQzv`uo0^yb%Kvj=q(5AMRgw2%z3e1F; zc~rKT|04k1s>pz~O%u-30_hiWGmdDj&!u(JT0&#s(#bdk#TVtpW64w&z9J z**xAah)(p+q8&}nh_bW!5%dT&wFZ~!dqRAg7ED*>WYL?uN6M|gjtHRxOR}i%tAipv zCxogkhVI>XpYU-+rr)M4_#}6U9nI#@8Q&~g@OHZ(J<1)C0W&gc%euZU}^!aM8$KX9PK}^!Dn_vd- zzVpBLOxt|y_0tz<-Yo%F;HA>qq*+@%&Z6Bb_bA!Ek;ul+qA7b$D3w-5kg7vAxc6jb zLfZ(Mf%&4X*(Igbrf^c*Wz)n~x0OZC;q(}q`DTevm8uoONxX!9`{D;B5k9z6&`Ld( zS|#Upww%j!D6v4<&|@!K!e>$a%@qYcbDmd8(!Yd4MaMjj+jN!mpt@Kqj7rZBLYw2SV8K z9(d=&PnF6Ky*cz(68)<2LP^ecV=eG^O3OFOn5gAq;>0|%`#qB<4u}=&Eb^!@c?Q?% zJDHnQ0Ipu~opP`BXf^@I7h~{AdF?-xTke6EdE<9Q?}aJP{EX)-=8qCxqc_hpgZJ}Q zv2wm@7w!YS%8)ylh1a#_rCU>I{5@?p-_)45-bjHyP>0=q)aIPVIP;iQ<9@evpw&)= zHdvSAF8)yhCa2PP&l)@~?WNKhJXgngH96blilT$F=!FxtIP7zxvQeE%!Cz|g!0!8% zEBa|vA*l{uTE14v!ZW+>d_81`Mk=q7bJ!xg0S7f3r?k3|Mkn_+;uhKM6kq*xWY{<1 z$t|>$@q5!LpXfYIrHY0kwuv((+4u^)YJ$+e6YCAJ5rd~uz@|D2GzKd z1@~9fmUHKS88F~rCf)DXiS1JCO%Jcn1eVl=7u`N*>fw_KFHLv8*rwR@4zfi06!hde z>1|c-a8KxhKHO!vrK$o$r}w!Z*Znq2Rd@%!Dz5>^&{(9h`jtsP7pi!9&=%EG`1PE+ z6R+!fO0{?pp3@)1Q`aY}rr_D^f}FskN%^XScs8qL3}RiqXR5wyv*>i(U>=k7P34aD zwkd+aU#PYp%A&TRLs+!d5fAo5pNwwpcNc35tB2^{3A149m5s%Be1@APSh81gYmwe8 zn?4R5QEsMww8>D6gf{Q^+mYq2mz}l$)#@YCCuCFOsy6>~2A_L=pjaJ}P3>Nd|DUtD ze&Pu6nXvKp`<*t{V-#avzB8DB$p)bE3{^wkOrLwDN1`R`^ zg(Hu>=qY**$fc%DT>j_0udN#>`h?|D`$N+?JU2{K3d$whPmUb3dY+h9IgjRrc_3Fd zTGSnxN4pB#%dK5r#R!wBdE`CUgAe>$C5lhy(f#MMIK9GJ5&j&y3o~zC7ZoSkr{&Sn zy*}lxn|9lzxxV?hA1_B%#S3UWrbh&_rPU6xGZB~rp8J0ZyG6CsJhFH+hwpaTCwe94 zkx}Et|xzzJ{1Xo9Y+wW63zzyc|7waUU1zkr?pLy(RlPX?b&!#VpqWHl6 zOmQFGE~nh1c&x}1hpF5b`O z1_$nmA7eA&Z=K6m6Ca9^x1r^5n#(svJr!(){Bxg3c79tVUhGJx^K&9_{f*d-PD6`6 zVf^CTC!qibxOXyy>pT1sBU+(9A;Vd|Jo}Ok=DZZ@ zb=QaQSJ0)l)!}!@_U09-HIUtiZkH$CY<{XXg-XoJUA)oxQkQJELX+&}&9x&NP)ko_ zl4tm^<+sN49-ey7m%bd-EDq>B45>7WgD14@Mx{J5gGZ)P9+@#`QR$q;iwpYFA8@S0 z&As?qhzX@cgG;UL$@lY2$s+(h)_ya1;mCo=5J)Do74AGW!i-)|NI~AaE64vDiafVe zvTEeS`MMUgIwX}Q2TtK-=EG?dvP(MJaz$Y0R$ioLDdlIau(kwi?69zGG;v zOB(GPI+F84$D-2^873bs`MfT4bxCQ^x0y4~L>^9^bb4k!h^Hjm(>4cW{!di#fkWWt zW}$DfnF;?mFqJ~g)1iy&%_9Pw(3hQ#e0U>{T~ z2%a-!4tK4^@eOCATLYZJ=IYS9hEf6ErN^lnm&_WAE+o><>raK>zHpfc9`MHW`{G}X zP&sEbxWfJSOZp4sDJL~8bGjwQ1_w(0oyc=oP$=FF43xH;)YNgyMUkHED~I$zCx}gk z(0=J9v*HxmTqzUp08e>p1k)>n6zDEy$O#=JbdoHFc5|04kg-4bM1p9w$yFANhi3l# zIbnOwSq5sC=vuSdLUkb9LkBUEk9b~=u6l%J={CaiODKd0s z3VJRMi=uz_8ei)DyaPh-*hJZEUJ6|>-6u>8ZDrdncrNPh7C*O-lh)5tXi$wUVrOj| z*%o>yL*S7O|BRB8fnD6AI5A|5l}v{o{`Zm9A~|5V)ae3WzgQ_Y8(7MHz!}=vttf|4 zOgw5Khk&25*|0*4`8rI#04LQnc{%)K!{o~w8RW2Sx#%*~T(&g>c5Sy@^j$qf4gmhM zrN`287==!4Gno^cPIqLi@GTxBmp@0QR?=eOwP2te-z|+|kH?7oFd?O7Dyd)07Zrz^ z%DdZA=;VR9V(?@WxevHp>%JiZ&xH{1(8xZpbNO*=Gv!8IS^XZCdKZ`t)JhyIilF!)8{;ZqMd zsS?hdOM=xC?e1_YFp!_!_NrG6xxv%W8QR(SiuzUCLjG$dsZ+ITN^IsuZkWXMscJU` zxz4<~6+^E!MtN{o^7y?9RV$8CKIdNGO3M_|pSNAH*E~MPol*4YFaxhj4W&%Xlt~ZOzY34 zqNUU5CbC?9<(J0|K1MrH3;5F=WBusCK^J5sCek83Z@Qgcq6bbyf9FhE(%Y5p0;Bk1 z>_K0nT}dw|k)Gakqwd>WfiEP&pXZ`k2Mhw901vlTUmyB>jL~t^hE7cIfkqElO@~(W zV6+b{Z!Kw3+ZOb3D>`LjC0(7?l!A(V$T(fnp@c@{+}@Xt01GNMXh24u=zkf4{<52O zsbtQ*iOxDK|T7hX&B_^T_Z0@=$c&96(l0GRQUUo+vvnYvElT z2<)i+;oD->;6VC=cerEYo8@NbO=rL_SI(qHPS=EY=OC)`DucXw7NEy3h?asYzy0K* z*f%wZ_G8xG@*qn@ED0hT^ja49r;01tL3Gs+xfaz~9LNkJ=Xm7aFNqiOLlAY;gMaGU zIZ<{lE;~EB^$Mn-f5@~Pdb-?{oy*SG{g8EEYbH7|`yLjP z3Nc^rgJ!12fpRl-*;#w}+S$l_%AzyR_LQ5o%g*4thR&g|&B*z0u@kvlbI5lkvdw#K z6FoEF^_!SQlTK|CzK6re;3a%RIAbPm4aZq8lep_jQLrR}?leOFdAp^WdAVD9ChZE3 zE;oah;CNa~!J+HV)7)bajLe7IVVbogw78RlLNx1)KUws_h&j6(TR_wY6r9FS?BBj&E0#mX?4IwC4E&Soq?|>^TK20t3@PL-{g(u#al*Nh$SCsWtTmH5J| z{=63$b>apc-ZrQgo9;=0U$!d0t7OOnlTzr{&}y6*+KN>LDYUX{b^ff?ko5+oVpgif zjt6V8Lp0{i?|NLYzcSlGn|ib-GV0g;Qa)!OGgj7T%g;s1BFv=2o;BpFu2+<*d8x<{ zZp3M?6BOU#R5G~Om|soWr!=!nqp&SaxM|8NC3s;Pt-RZmJ&fll7Aa};4c@M}<0F)u zznEutwSr&XKuKPTjMJlS_*Ps6rRqzZdA!^5h!Ypo%Q~TR+^QX?x3pKk0;an2dwYJf zaAIQG>kN9ox+9mJNtd@;Hy|$z&qz1Ja`S0HdVACP_cJM~q7k2|9BrCZgq(bXUR?Hi zpbj)@Z!#&MnlZ03tE6fGZ%&m)szu;`zt$SY9?O!^s|5e-^wQ^othSC}!J{cL`yS}x5(*RmC>^{a?A%d_ZIy-{5FQ%{TrKAaRZnvWGW z7Wc7UG<+=29nwZ@0d6xA*`z7lRoK?ZrX`*e_}Lj_p*;kCu@HOCDjY0q!3%%6H-)== zwG#dxF~gpi#={H7iwf2`G<35wubY3{~lXT!p7ZsO&;9IAiPoj3gP7H>x9 zQq*Bj{?{c)%)kuQq@oY!w+lm7XD&RInD73Cis-t?L5=Wb<-uIhWf*b^D*3VM!hF$j z2(X3Cr;L)tzcaqF5_Dzhwn^gbJx^KxC6mtg zMDg0zTlNWMQbi_+YJFzPiy@K>TE>fJ+h@s+;ZoCmwr{RGyjqe54LvK~t)D49^CX2f zJR^)7yUCUZ(Ys-KO04=!s%(nffUSCm#OoGL zQdi;`57}St{^6IV$Rghq+PGt%NSHrOUIE#VCD!il6ja$8uC;ILZr(($%Xx3?6%3Dt z5p{L&p+CrSIWWEpI*Q=;H(^?Kxg-ADhf)@zZ}CGrdNCuC4&!|?$Z(Nnj|jej%&6uI zH0ypclUCJ?)~x?ve`)zRQnL=V1P;7uwr1@J+|`NI%7V+=*n1umttwJ#9N)ucEtqBp zKUL;hZbH`)llkix%HzZ6DQh7$-4HHzE4kkcd_G&hR_+=u;b|8oX@|a1&W?-Wh0xHh zUGzcubS?_IoFp=z^i{Eb9?2gXC8JyFyE3?H2wMR!y`uk1aUJW$7ERFQ3jNPkz170} zES}j3LF{O}R*0AI;~Wp>^#|gFL3SS1%mDsc=6d|%O=2YQnU=q2^RqWwh4rO8>b@nE zJ6P`&jlSejg$5C=pN*5BYi_l2^2OpN`_F^msAkcMkT} zDAt>-h)2M4dN|DI+fS2(UO-MsZUDQ#NfpnvbEwzDXyid=i3RZI7B!9G6<&GByvwFD zM`O64NxrZS&Z5;=U)8%NR>Ma>w{r|9p1CEwFCa^K@dAF(@jPvEACv;^dN_Mz=+L&RDb)6A7)Q0#rLWLDRC^r8 zPp{XY>gedPj0xjP*|n(|aFVJ)Va(v1en6k!^k*1v`PqQxfj=^T70ze$n@}BS&g<5R zU~br)p3OyW7_hR@E%Yg47kV>ahw+%32Ivey4_!n!dU)H?(T3=t-yhB|H@2s3ZSZrN zM=&}jkOQpgm|%2IAn!=iJ;BIgrP3@`jla0mzsc|sATL7WBVcgrRLZS0W>_knVY$U& zQ~LTTnZDi(VzWmCpCZ2hW`F)yFc?0-6mnha%`LQs(#xT#$jO|+-Np{1>d5OT{Nc(5 zCoL)CZYm{fIblBptn|bhY3YH|^+GcskwMIGFd=pNv^QosudE_}(07?;h}I z+5>p}Oh@#$qd)6RpK_RwRhlzhMjm^wyWRQaRB);A8#>kQ$}i8k(^4aN5?gm-%lR{r zV-2onPh0MG(2JUY-)Y$0fbDww((P=gBQpt63obY*V zBdzsQ>BVqpGj>`_yCtdcWv)cd?MS(1Wg7K8u}lo`A0fvqOvgJN`RILz%USr@>c3tp zj`&%^&x;O6uce|a22vLH(0gGa-{JhWs^(ImH^oBEf!@BvhjQ|+xeU9C8Oja(jO9=n zu{@pnbY3JD_8cNzo1%a7W{fC{hgc;KmhC2|(TU7x;b}Gq`Ms&s-Z)BxwXc9@3y?1 zq3PWgukzZ-tI!_23hFCr4{0rLRY7J>tf9DFL0=ZPlgJ;@7q_#U%gTKv`q~sA*R+cc7nWAL@BD~Kus>&xAfBq6_6<=3c=G`|85#o~Lan}xOHJcp8Q^vkM~ zsWoI9cVHB=l2t{cb>*!ym|+7?m%~8PeXB~_>o`}q?^n(4Uq$`^equ6hy(+MEWjWao z`KXH`RgE@j%TMc)s9)4Ll}p8n(sND{`X+j*hG}cb7c-Nn$?AHlZjXPn_b~M5-hFI( z$niVpzm;^Z-d@v?PaoNIucVB{My5t7Z`kI%r0H8?66_wl;7zY2ozQBpKKkn^|M@2= zH9kiDxWz;6&@hP%R-IFy`gDiK-;z{i;9d3EWj9za7~PtKswpdq3%Kw*Q>ulLQheef zd)P3|+&)SvYMQ~10~Na3d5-d^19K+!clf!Ko8jlVFYpb!J7*N1mnXPy5cctzxk^aQ zL;Ub2yaVl?D3yOrBn6mB$qYBhX%f8h3Y{DsNugh-(A90gE%m~vdH6KyYpEt{#k!oLXqo~Kzsc~g|t$_>euHa5j6B7t|dz6iiiBULPen(EcjjkW{ho|7h zPkm};=|@42VGZryg2ZG$%wCdKS7}NOf{p@PQ&WO_S^ z>Q|{m_QL{c3f}p{j%ra?Vw+$leiRdKSR3yef2t*b=I<0b^h@qe0Z(os4+QARSz=lD<%rdBG{JnDc z##?-!RZf`WD%=)j@r|+=h;$61Xy6zP8{H^}dz8K3etQu02OeVVeN}wd38wIB$iV~m zQWg*S>Ksf(f8aHkcu_1vPHe*64CIMr3B%Z6DgfTH>V1l+eg-&(5qjYlC_;53m|8*K zn=vL{%tC&w7T&9GcAgc`Zqh;Ul`k5e5<7vNnO8yP=l-MRFpYXqv*A%kj!n%&qAZS4 z7WcUPbvBK#LssOxeWEOmAKXx7iJWWy)?QnRiTn@xwscg_0q@@)DUQ<1lf zwc}Rc(_>p!<&wUNur4@z9MXXw-HL0?K=18UUB38y5I^~Y^9FeE1holA_<&DOuEEo^ zdvYc?tlOrwSb5xuHz@EVF4E&gZY|j#b4P5Ydf5Bw^Fx7M0YQe!f;x+i4toTnqY4J0W96sI^ znPo^zic&&F^jVQ+)rl zN1FASL)mn4#s{TBs-I%~B#ka;x8t1D!OBBuM_cacz}-K$P;o z_+iM^^UtY|IRYEJ*Oj%#Pgcu~88moOH{Q^vM`Hiy$b24X#LC0M0nY<~2cGM}f5wb6 zZ2~;xj#Zy>*hrN3Cew_@S!A7U!g=QkO|LhF|Kh1BC*{^qxi&%0^TdJtwQDccKj40u ziDo>Znyu=s3;Yz@%{gtIzbZWt*RNS{E-z7;1;BIhZ#b_v*{ZUfi(KFCBUyV;l4>OU z9gEM8Du<0+SyP~@J3otlof{3_>bWXxD?ByZ#&Yq%pQ_!+gYv0v%gxVJ5drXwthz9P zZ6fN5;M>4S=Gt+=lBOaE8IO7wCv(#4He$)IEOK(2%A@8OiLtGqSLx=&lgvy+TVy;w znFTHMmm$JvNjCjh+?TPjkS9d9nQscTuxh zF0xwu_~{Q{aY~&__m>4SvV4V|RUX~331;t4p&~0Hk8U)Y&DXu=i)hR;F}ZViNUwz= zBoedF?ob}^Fjjc3$%7UyoHJ%F7gY~I(;gAQEwon)RY4xvZjR(BK5@`#<-ucv8K?PL zF}&JEO6@q84exFeLHqKkTIyWBFkzcm4$Zt5&*R1pJ4KZbd6Zuxs@!a)H+#3ZUzA5v zBcsaAS+gtb6W&|$DAH;^pQ&_E%$kr#_u5BuC^8`L5`{I+LnaSj_*fJOKX(Z>Gf}wqEr_Tn&fDEPWvx?R_rZs-dq= zSjag)UkR&yX_OaM(#!o(R9%@$*Z;+^y6A@(!zuL6EQae3(xNcO6iR=(fPL0!)A|7C@|EGU*h} z==h`3jz31{1(kMQF#Ot7>epuYwW-vv4L^_xm1>yr&NQV`u8?tNrqVMrzxg$YOxmZC zXWQ9q)_(|vg{RV$%K`jnnK_mCckI%9c;Q0}I{hIPnj%lGTYm(7#S9gmH=UnP8Hv8T zH1rcYvv&2-H0xLz`D#00&a$DRX6Y0(+K#Wa8V7A#IHCw@mkin+q|fJS1p(87Cd#iFtK*OpULgw{P-AvYokL&YP4j8r zkek*IC(=UxUU5CP{1QRa=VnugbDfg?MV`}B(>bG?;!>Xwi7st2$V)GW0hYxE_tmnM zsmRFk^4e^a$6B%Q(^$!t>FJd6W3iZS zK0?}H?Ti!{znE=q%g1xZHeKe8N)ZuSb?b!&p)F{>}d^d+22G8eD-ANXHQ_p zm!&hlfUZN9>N*5`AF|Z$S9Mg8D#=JO0u*^NucLimiAnWg}b`QAaJ;8 zYgEW->m(1>hjw>rZ?U^dd#Q(Wc)JswMCD$s<=jnN(zh#`Ow^bCwIywvQ(xS9*j$bU z=JxP*HF2_0Q)%BB`rfwxRO1&llC?&HBX)nQYGqzuqL!5Iy}G3eiKrtp?n^qlJ4bbV zP;D8}B8d#^v1)sTnsV*%B>K4JsH#Pgu2id%s9W|EnstIei&2tSnoa+Fbp}t-U2}Z(SuZF8D1MzX4`g(@b4E{v`*1?>@F| zjk<%|Grj=+`eLP2^?~$JQOc&*dF;1GLC3d`(q>y4yB4b{uiZN3`ZG0eHc+60I;HgEb9@iJZ$INKCI0Yn zUgiXSNaiEOEMqr!Ziar?UEh@+Cl7J~ckiDj+*V!QyYUM(8rzcWN%q~M_O{Wvt3G^w%58Cq?q~(WooHyBa znL(>31D77|N!y=!P-avDI0X+H)p-W>J(@uN)7{8^?hGXzeM3Kc>_Eyj@}|iX6?&enqR-2{$udzPqXPpd;)yrSxsN&5!-OKO(G>!$ zdr326#OPI%wFDuYL54%zR(*KAMaKU-#)*|mwX4Hr?1!$c?Z7q z6}lbcCmqp|?n`IXYyB2dO`Z^mtYfWu#`IGTdrm9)`G^Tz4p$doUy>CwX zt^u^ZsiY=aO=;%F0CaT2uVL1R9Igk@JYXH~57sB6KLHehe2Kqqb!qINK-$$Foi9GM zY1Yy}ILoJpd8wZ*n`^Z93b`C8&tLpE-&+s1Euon5{=F_tG?>iq%{cdGY@b8Fdo zw(gH$Y6|>K>SmRjXUopH^GAiyn4QQ3Zl5A7khQz$Gjg+Y)uQlc2yGe&eQ)pu@zWi? z@*xf;#vmWZu*xictwZ-n=1i9md`;PnH9(!z25Bu!BV$RPz zEXF6h!=I2#EB*G1*-JgBHuj;-8}AVndsR`#lSWwPA_s7X@GJ797rVfE-4tJ`KedbV zqW3|$)aQ0=rSr|kdsDsPxil*vs;qCCz5u%4&;R!I0i$!t_07M2>L_-ve-;1sEIX#) z`Un4xtHr}Vd$10xTPCo7FnmCUKU8{)Vz_ih=RN3;%6efW=MI-Na#Ix^WgO1M%O$-E ztHPQmg7|cfq+ffhU`FM~-4-E_?|Kz(*KQpj{saDrcU7J>*_#J;gy*Zb2H$?Rng{es z$2_V!*Z;YqOhdkHe+|AqV+Q}M1u6NLyH@p9l#O8Gw4i)HrrbD z*mFT9ZMoeFzSMd=_+}=BFVU^k|7sU$@c4RJ&>P^-t^1@pMOoC@MUPWEKUH1B>{P98 z$H#LosJ0@rZ%4ECm3rZirb(*K(3$%;M{P50m&!jdi@G)F#LJB~s!^N!r|0;+2fx1cQMu9|$IE;1)_`-$pG9ChSLws> z`YJy_yK*4CPo@6!KTXZlOBb>!;e20S!WyQTi*u+`vjLTQ)m~0(O+TV<9X!$mnVA1y zulhOlxM``k(R?a#$)(4p1>!({9F{s(4eNsbJQ*fQLNsNJ^rXEJY;o(;z=s*;knaT-S)U*aY!yzHyO|I z4UZ{mymwSrbzTa>)S@%RO7Z>TF4!fU*}>SErr)IfBACZu+;H9I96i;#JF zq@%GM_o<1f%g~UNtgO_}Y78AAX0`>7u9GAG=saG0^3Nx$BqwA|PA}v0drWZVh7IS7 z!gu*#cEgYCwM<-GR6v8;yK~e9M-kN?e7uz&oU_D5JVl?l+un;WMR*GH`-Qa3)`y4t ztPxpT3&HwuXJd;sV&{iKiVj}G`^Z=P#_q3ckG0&@+#i2eAr)R(%RdZ*#f6kY$~v=- zyV{0|xcov&nCr{hH8zPmzYFPs+P6}l+w19Oq1G#+qekn?<}F#L^XT}dhKy&0ygpe; zt70yfJ`-etmJ)k`>*DD}clpCpNhL9bVpEZqG#IR;Ik5#I&%{GIfw!4?Jxgd-cb3ng zg=;xciVf3T<%4fZO8KG^uJs+|onI=t{WnQ0o#QM65|KHw;hb3Z)lMe%kaV}f8PRc{ zBeEcwX5Bjpj^IjJ`h57f`J~Xvv6qeaf$?(jxH$Y|xwOVRtNrbxVnO^$8L5f)*W)8% z&=wo{2(x<4IfsOA4_n!JGZ;;I2gKKE*7Ecquy7ssi>X-J9;yw`a^_x<_HvPQpPWIy z>3hVXXlq&8S31|&B^<{uk{^#|P;usN5z}pntQVC5US6UwHe4uQ?FYZ*;7%cCEtXHf zQVXrQqtf+%+s&6Vvok37+;%axaG}(`2p@DtJaRCsq)&PVC3wXP{o?tu?#)u>L!1b2 zWFdq1z&}1XR{VNoB?ln$SOZ>B8%ok1Uv z?bz|)9QmOe;MU_e33uoU%<#P0MB(D4OxrT2k$ww1is+a^_jMO8BbTiNF6vYl}fD4DQ%M-sq<1v zvuHHUK|Y#C4<(uJ8A**!+GB>Uq{B0Ylf`3uO2o`R?$8i0I~-_WiIR>Oo6**Z4z!`a zipJ(E=(vdkCEKZ}?m811W9dM*pj)ofVj!iScA$xB6?q-)M-%iN!7xD9UcWwc&(ab8 zJr(T%Be`O|)HK|Y`h0?KF|>Q7+Nt6-lhPdF1!ww|(G{#}N9t?HG>HwtDT2>#43p_M z1A02l2gkWoLJ?)}zEZ~cf%JdxzKZWS?@77HrU@*&X5}t;wJz1;DH`$cNil^%!{wN@ zlfV6jwqdLWKX=&5OHCz(ysyb$pKjqZ!SE#J)#Ae%;j9rO>HDqPJn~Qwr=6G7U}+sT zj`ibuxSv~#I-Khr1->2_4!_s)|Nd?UA?xJtEUnV-sr2cNe4nS6gzkyyQq?b$EEk6e z?MqYSoGqDDq8TK{T$w0axMopzx`5iz({Oiuto$u8!jh-BV9euLtxe+%V!+|J7rnEQx@*P!Y0$mUj{d4Li!}v%zJZ(nfq$=*xYPOuW0XXr|JWzcQK5b*e3LKIzK#-|_q1 z`$KVeY)kpdL{j}9|>&Y=!CDpSCR5Z9-M<%03HY!@7C`hR#M^;6aVog%y zKd2!a2d7cZq_zqYh8qUr}e zsm9Jez<1+R)OJ`kMh*cvzd%M+Y42HU9`)a&1Sivnq~-!-*C@fa_rP3#5ji`-6Mf5- zF7&dd5oc1MdvvBFHp|G?J%wu6IMT~nD`=`-3hjDnM~7ZPoAfxDoEW*8>9%y@UNT+j zVMFQ9z#nUxg8AwadgQi(G-{-f`@w~@T4yCy$xWuk2j@}YFlTr`7`!xnN{x4>zs`(( zzaDiy<&0jHp##>XMm1OC+04}Tj1K*!)wBzG`(yge=?QpK0rAkTtF&p-^3^mLpZ^4n zCYU3*Q0aTBib=yty;a4YE4+yd=?+e#9``h9$WRxmGX*TZK6OcreEGJ}U9Wst6ZfSn zrCv>=zXF;Rg)1FeolXmSR6(!nO77^tF6{athNZhgI}X0L>u1pi`h@#4GHK8S^j}G? zv|dC$cScBO03UARUUi*<)wp*dGm7oCT~{<14H9q>b4yDKin zxKjPe+0eV(s?>{h@NlJjbF*p0bNf zRge*Re=4{W@de`GLO04YMYc$j95D?H4F^Rw_Jir-`$sn_Wr|u~N)>k(xKrEL*>uJF zoYYW2N{xMNyqX&8jWH@d+Brd-50NXl;F8|ysPI-CKtY+w^ zChn@#D`^e$qQ>ZJ4%OZ+>Ob_NH?i=SU5pboHhR+|>_Pk=ZY_KM_nV76#3Ny4$4}8K zRWk}HJN}FQt9{Q87wLX8oHjTaQ(ve-R%VvRAybb4#^jmUowK*Sv*68FybMz5pkv50W$Q<0&o*S8H@BuJjpVsM6sjo?x`%%STGwJT44wZVGHmx41(%K`pqJKxO zYg43})C~HcAD!8);EXD1P!rwm+g0l}X3?VOMqK-Nfa=!EEV|ULC%4eIRt3&i z(=O~JTPuX>T@L2bwfeC6gchp4gG>F_eR*r*2j$%zV9DOaafKe|V3*TM71*#B{QFnB z#`eS<RM7t)R&agWrly1pi=B0eTW$z5T>>t2_?W?!`jOt$c5u4pJWe@OQOZVJ)OG@!JX);ybw8IT z9+=E0{njYL8(|mIVMe9%8BM|z8g=t123ZnAJa;I%V_yAr%Uu4o_qf6nI->90tk~Z! zT~WPS9yx*y)w}lKn z4=BXI2Kf|o#hJr?ju3|(@{uv;!l!3UKyQ#wans$|#doH-@GT$j9WQ?8yg)2+E}+^o z)^J{~jaYxPfU29W<>3n)Mc=`NG<51(*6QL~wvXGGx|S{Odx}rZipa=g9W>Z$#6hDX zdh6=T*AM%O!rDb-|7Ja7|0ERe3TgTL4IDBrSh(vH(ReHP*U|5&TNRPBUH~sojS#JR z6w&YW0Cq-?v$}T?dHe`q-vXaf&0-z|or7hBTXpDXV83dZggpWuN#xgdb!Rv&;*tdMkT2eMNCxX^uBK<%3a zvTf8Uk@28_<{u2?Xs2W`$FhK$Hwt3J8HlF2`IKWG#DBcg#WB}>YS}E9*A7vO#;xT1Pd!ah=&YmM2UCO$>6^rZg)(J9I)@J_b!MB$2UVC zj5*AYAhz$IOD~|u*02cXPX2oI`x~<0y99IWP<^@%9`dDH!F)BLBj%79^kioc`_<}9 zZQV17ZGu>S>} zCJQ_STi#r40=+z*MPFAf=8tVBQFs$I?RT*HKlgNQVhTmI#Wf+b|Ihv1_i^ai2C8x2 zPWwOidTZ9rpuu4J`DRS4wAX9xGMn=L!b@c`mbF(~(8Zx@n&dy6j~82!O-L#4dN4l^ zT0kZT)D&hbczmbDwE2mex-K2Wx3jIWlLzzDvOiCqvWzT8Lg%C3mkp7}y?0?YIczrO zD$eK=!B~52+70g=M>=#0&+X@(ILp-;IqEs^%y!_CS1#1KFo$N{)#H`p+zG@RYB*n) zFD5}(^CFiFB6axsOmF&alSdYJo0axE)b0p8J6p6%k7XgUS=Sg|6g?h#fw_%Y#Jfz< zaHNM^Q5Bl=g(~4><0`$-R}P22^-!d`oJoWgycXbI^$1^ujiiyt6~tY98)YU+jPJT?0Ry%K708emIr$!x`)>_&CehSa^uTVq*C=lJZ9aLqscBB+Fy0)#2tQj*95|Ri z*;&&v=y(UN5$yTFhK3A*Z+E5%$7$G7AKz?Rl;58(xvr%3^TC6f+M72OIZ)rN&?Fq} z!KEI+<_&YG%4FzsI=f)c3nq+ZM{b|!M%Ofuc|A~{bxgsE!OZaOmNwi5HD2^U@E>$^ z%kD9qO?i}gqd79UeCRH`JUe>pl-+N)O_dbtS5I(rn@iOY7np#}+6~hz9$>Y_LuNS|* zQa|1^&RqIRH4RSn6}fI>WwL{s;!M_wF3dS)Ms1j(qJe#i=wJ89Ge(_w6fV zpn<%yT_Ft4_mT;(B=u?BPiQUbDV@-J=G^EmmKz$$Wp@~PZym*{qRtYi87gYsT0}iJ zkdu02CS%`7TyxQvEn=8nH?1jlJ=2rT9&o9)O_8VHTF&W!y=vf7MX`NL*&V%AQT}xW z0-mHhbi8JqrFi77EjRi}GVO6jF>pu|xotQ4T+cmN@XqA z5^kyiKdkboGI;!3KGY$NZmqtpJbdUSoA-fc_*_+0e&93Sh=1q6x{Xx3o<8KBpP2ey z>ZIEA{5JQ&^QvRWBvpgPH+XMXrX*pjGTMBJhc^OW%P?4V{(c_c-=rj);{7V~N9lYx z9M3>Ewd#F(D!|O<)otB?eiA|1Sf1#owZ>zD!+e8jfs%Y`AdK~y_ zKR@V${qKl+?7zZ_ob&!Y1JAcufIL+t-R$N=%BV&3))P6}{o!TqXAOT)3VJa&FdCQ9 zxUngux6_$MF9EN+eF_){jx@mBp0w5^Q`}U0iq^BIDpQkb(l=X*`)fym2FWzp$A-9> zJq685rsbCxgMkR9R&+9af(z*!e8(>9lj*d{Jc_yqfAO+pXxrvewIz-e@0UzR`plxJ zIhg4kNv0NWrqLO^UuJ(!rq5cF>CaF{I(#UF9$p(ypBFh&$5yFC)6J>n^(ggvy94rrN?b~JK4G2bwM zgdC;4PE-#w4PQSK(mv@#9b2oYNwa}??l^%@siI%d{@i}*M1>2n|GnIsY~W=c>!c#f zuErF-Y8A~5$NOkWcUlp$ie81PXv(Rs;B~E{<6zBc#TwG^o2#fa$0|R~fNZL`P*=>x zU-!|cPTgHFKfo?{y&j!~|F^gg(|s3R8h*V zNY$n(o6)mRkyNm*F)hIyVB!-=!+tlwyw#1y)W&_N)TI6^-Dp^IXq$i4K_;;qJXUG+ zaD7dxpYBGhuB1_1D-Ak&9UftLV25|FLdWyn=wUs*@B=@8o(8xs{jUq%OK!BNJvbg< zqj`392WwPKZyH??)7QF_>bIJV=H-hPuia_lUw9%KXN!`#9%Y$UgCf$PJ@hD>MQkce z5kG2sQlErux)F3%)Slr6+5IXf$@R zHq$m&s#X4X4Re1wW*y@;i7!L9ahf|LgR&mK_#Dl%wD8QltXXMBeav7Bhnq{%8`YrF z`HHjah4sT&xk^&u;6^;~O(4I5N8{L~Cfs$rA1}teq!p{pncLRzr1h9t*)-)-@7&Ag z8`X1~a^fy${s<0O&-iBCWczZ=IMV3N`{q2;aT@D8AV+vadtMu5$2zsUN9^hP0=b+))!P{IoH|DQ3;CPh?BV6vX26r*Vu$;(3xBMp z%bl%1fyQ{VMDLhJE1>Gv0ud!T{+k|AoZ`F-cwrj9IczsD>-FSOgiK^8)c(l!p zDxEiYeMhxNW>SOH9+j@i?wzaJu9rm(NA==Bvooq3-1AFad-L_;1eJzI7Jb{;hx2Oq ztD1sadt`UtO0y1Rw5Uq!@YBWpD$PAIeFmvou^Jx80sJ~hM>W51HvKgi$SoheQT~CR z|7m9vb_m;}JQfKb&^-mON$RSsk(N#C4i4tL(E2GO!99)`F`Q4G(>C3T`*Zo|kvym7 zHq-vW@Y-99=4ShDn?}`yPPpkf_VBBr$QYYT89l*fi|?Q~GalOGHd8B|Utm2(A-%!% z%Adhq18o&)1-Sm(tV%PD2bq3~XYHZ;4VlYlH*8X54avjze;!vn-@4r{MH0AnRUR$m zBbg@@pC;zf<3UR}Bq>c1-vx69vS!zFmla`ub5U0>MV-0!3ywl<@UFFi};Uu zWNPifoq7vVFghQsS1(>+H&Rp&&j)|ohc)#kL1ULs!*;IW@gB29ySW8)O@AF*JX|2w zJt-jTPQHBjnT_Cyg%qxYx3Q&zII^pddiPt;jZV1;zn92@w_DGjyLyQ^`bD(3r5}4c ztQA_AV{C4-fp=%G7gaHfXqWHLXI2D=8)J*eZcHHS?FbgbRuqx>w4h4oT|b11EY~91 z24RJDQUtP^is+leMsA86qmIEvBR5zr$xOf8}%Jww5~j}?D97g4ffC^P05R9r~g zHU?FiV=O(fTZGmsqQj4ZI841)4Am$?_FpisX?$4x7*R+ybOL$YjYHy?MIrgs3gI0; zj){vO3TUrK2$y)A66uc$sQ#o7{2huucc_yu+AH%YVq|!wSx4IW zB4M#FkD7ajv+3uH!T^j!qZc9kZQ3Pawk(gDJqYKn#y5n|Zp^#3L~zd~cSLd(JXe=T zaA5lfBGe@Zc}Wr6_YE@ZGqd6Qj=*>Dx%l-*O;ztiaDw3n(V|lpjnLf81r5H7MC(jy z^>GvX_rlzxXC`H+HnHto4fugFC~ejzUcA31^#=37?p6c`71Tkmj2zXT5ggN?K52B! zpq_Ez{M)|~n93QndtW%u&uWG_HZ)Q9!uYI~4sFA%UVm~hpH0xAuhTOKPz`>yN*6q* z3~GXZbMYQM%*Hcl_O=M_=+psqcLweG62u+tI)G7%f5Xf0vYy3%BkuFBEz0_o6O*tj zxtJ@w{_~PK*OZj3R*Kf99jIe3K(12-cO^YgZGOQn84WRT@2h#hvz<-TeeWaYI@7@1ka>z4ucYrM#u zZzF#NVu!AX6L0D-k;6Y{P;{$p&_pbihaY9o%*Qd6uAjSlkzD%<*>)pigp+cKJc8Mj z$=@i^GiiZbgMGS7D)dWJ7t1A$GNA|DBECA$lh^Vy$l*CyQg#dFZT!8d1`(o{sil0= z70-4K6DdaXyTzk(qSpWr&FAY$a!|%A_LKU}&*s%O2RV>edVvqsLmv zwVq&_-4774=Vwc&wP0~P_Y-^HSW&%G|LW&XcUB=QBbltb%%wqY&d3@{rutQ8QQCQD zTD&KjzBQXphxbEwcPW`#J58p2(BMs&nL@p4U{-|VKOa+21Dm6_L8b}z@0www>3TnB z@KsW&di9ZId$Rv|?^oPS{955d{io*A%eK*F^}zqU_y2c2FmOaJZEUz%Byzm?YfwaM zqe9t#*DLWIds};tP3*M(wa|7|(@%;9L*u!)*CCs}Zi?cyMIXfdL&)~+v=thpZ(_vT zOuAsbm4h^@&>qYy_PIs#@9`R7*ksaR!)QLbrY4QTy?P`gip?|X&<$`=j;xR3^E&lu z8Q2I{Y@;|KrV&-gz1_cm6kqhwqN8gvXvNb=KL4v3jb4nr+Mkh}n5c!^7JR>!hx4DI zEoneX26=6c;=0#$$q_%_Q74)^U(}978i)IJx?aXsBkRgum;{ts;5Rgf!*Q4N# z>VRycOsX9g#mh1}QlUHYxYtJUNYl>X6J*kt=4Zr8jBUfnG~{Gxx3E4?DXo()$>}`jZCW|CB|o>W4G3;ixQF(oxfE+ofDJXc}G7R+F{nLOxV$CRNYI zOvb^2H9E~9or76qIcf$cPq0Mp4_NV+C$etzd`iTuGTz+0(s|K#5k+}G+mHHT+WjSD zm!zgAJe-4(Av<3;n_f>C!hhy3CpjXUhDHd!`hG=OevRhK$}^m|H67p!%%=UV2Jrnb zCyIQJTp{1yoK|}^*3NMoTfOgz` zxDT23&LhM3ZOWd9PuAzrTlar+o3m?_bjK!B#E+UO`@%=**4|g_89hyYb;=@9d#xDI zYl_tBjQZ;D8u)A`Ne4%80u^g3&0$VFm>|ELMZUl!u!$azm+QBwsd(j@O4n%J7$;N4 ztLa5kAA#SCEdRX-%+_T2Y)xQ3EX(J^0-g?8?&%Ql&dYM|yZ|pzmh%z?@)Trwo`OIQ zrYz6F6v+OT<=Njtx2}mik7x1>w;{r0$^dD(1isWJCZgzYUpc%!w3MHWg?>P9xh4sk zgg;%xp~9Y0Q%@qxr-N{8ZX|#EG3g&_CHCy>EDv^JIyZT+&EZ#qs4*A?dEvF?%&Ew>^Z0D~t4~dtZH!Dkr)1M{-Kt9m6J(>O`W5saBieg;f~t?r9p0}4 z##$8@)$YI>40<(kPJ>nVPF&<>%axSWZm;UXom^z`DkhRQW2ou~OJsZIa8sue9$ z+2Meamh31|d8D1@u{BgQZ-xdN(=j$^r=lqFaJtSQAfl?*m{g2}y%Y@DExSnEa+YgW*uSIK05)|qs- z+EenQWb9U)ppjigt;~~=&t*>+8>|8YEQvJCRv_DE6-As&qG^dXo}kwk4CFeM=5D*fC+_kT1_)>yuIo`I%~cf&n_jUZSF@u;Oj|xrlhWS zdXwn5n!f!~(#K~#iR@NW4a}^3x_76WH&&zXR#CsOu9Q^6g(iVxKQq)2-vJleHy3lQ zBm;^%0sn7XcqQ!hY424xYP?ZJh7I-L=XR$>HJP4I)}@Fp?#R<%3g50n#%AuMeTu2c z_h!_=%bmu&Wy)TmO*fV9WH$;q2ooFA>F4frhvBJz*?p^PxO|;h5q{(YNC?^HyjWlS_1P^*NJe@2iR3UY14>HM32V3ulSoF-DHo%j+ z$mz52I_XYdG&AAh`cP@EqTJ$+T-{6xTlu=ujAgL3JDta#y?4NKv1K_J>6^2tB{(Q` z6WsB+s%ib_2ck26<|Fi&Yp&lF*Dm7cd#X{J+!CHC?(|`;n#Q)jE<~X_MZ`h7<#S0q zN%Wv5@b`Tsik{jY14t^U_Ug*x(2_nYG$fnrV29cjxIJ!Mb#8!-nsiIQelJb#`yd znyxl%kF2qn&-!e7D_+!TSws^QLA=g>8XFExC$DGSc=r!Weu$i%SeI^`;5mjbxxfpl z=+1Y(gQ+bs>nQ5ZZ8Cea>pav>JA1H^WjDTX2laDjW1euhJ=g1$N!_3K;&DxNk-d~j zf3EfBb0f65Bq|emJiYnWv3mUXB>3mneYuC!;Nf7+jq2CG((EFB)O*!v)Ul(22B4q1 zrP}l?lNu%u?7&7dq=dvOr|c^j|VzAB598m8QSyuWHqau#@H zrtE9HKqaw{(EF<3I9;I{769+tS8!U)nycm@2YKv3;w1saO0ypDaa=d!>c^s#Dm$AHiQV9}P;;&Y?4RM{_G>57P}(!TE>wyNc5h)0z9hRGc`OTV4Cl zRA~Yp{=8`%c&>qB6?S%ao6O?rYkDa9Y{NZJ!-8k(j#t#Wgjs=y6<2w@QgQZ6E`3j! z&sUZOD0=Bb=YaXcpr~j?^F?{|`}-0eJ8Q4v;ac>b!V9Az!cBDlTr`K+GPAeSL{DUwq$8 zSi&E%{je)LIJXrYlJY3*hX?O{+eK6>$)kJcz4`g0J|fZxvxw9+Ts)D)BhP$lYO;=( z*p3pTZ=px__T_#rCkc=4&`unHr}f5c%vB5M++aU$61YG#gOAuc#;?*`qPd}sFqm6N zVO2I%no*p2WG^lULPPGjfrDPS2*Yd00$UI5M245}{ZdHBA_KVIymg{)-6C)=gE&6b zPvj0o{(D+5-?|hatgJ9A_^^>rPv0mGdKV#+H->%oS%8ryX{S z=qH7gb~Loo`HHiPeQo!NrjH82iwk2%`vamhqFD=aicqlfp&n=bscr>4E6`R>^cm^^s zpmizP%ptY2#eyFBUa7Htp<-&x3y$1<@mS`P-`99i`j zG$#gYMPI`ObRP9m>1;b}fGcIyO(x5dIrL$jD}BM9sOS2bG^dUmvKo@9>X&KASHLxO zQsB*;LZLHUX{1RCh3%O@j|*MEhDjl%i#c}iF0{LODh;_fnhvjWAuaDz>ZCQ2YV1Xw zfZFM{dKeA=1dXMpl6FrWf|;@_%^jqqpM%UO^tlUloT|ibL_tY4sz3?^Q&y8JC2&IA1(}}m6IPhb5 ztTvA6!uS7La|-gW6TfujQ+0L-jrN!)SZ(H_nY+dByU=%KZ{}K&JK%XMq#5T!%kJke z^lLH6ZOiUw+e=DH9H|ulc`hQ=)Wb|Z3|6jSZ&|nGQ+v2F03~k=c zvrD;}X0W0$v;-^rF6WD9V-+P{&<{LX!OwplQ0zaDhwMCiHu-y2G4y#J<~U9q`z}p! z?o1w?jbB~q{E=Um6^;Ai`r&RIbm*lbt{AM3aUQ&UaW(PkA^01ZR~tt*5YjLYzE^MV zwYi1R55jZCcnzBw>x-hIJnZ|{a{FH0M1Cu9Hg2xthhzGQrE~MCYAQO&k47I@K$`|{;8s49F(bvycCJ4k)toJS!5VeY4dA>P3xs{WLS#b+aMF{d;tMo; z^@9UB%ELj7T2V+pyn|SEz*V$_7OvPXm;>MY2ygg|>>7n|*CxKg3G?k!v7y{=_6A|F z8guNuVSIN~pa|K9_eGruexe;B7O0A-i{2)Vb`BGM?a$Ml@te8gyW>=+2%-16h+>O2 zSGuP9fh|J!N)bJ<+X5eRv~aytMDBmK@ZoICz^@gd7m4K6Q{%Qv$?hqSh z7m=@w<~mdNiHJ9a^l`uzZtZeV)WSPLRFC8uQ;vw^IfWF|7SG;|$Anv(Lh^04iHAhO zk5r?OwtR`=)oEwMEw=))Y!b~c-BW~hUF2QHM6(;Q*vRmCg>2<#uQJ3gr+nmL#ej>L zC(b<1Bc&;x?X&WPTibkiBx8}uQzR@?pz}N$!(Nt`#1ywYYI-;Z`>Cs9asND8S`fqI z<8PpbMjd-PhHvNJ5mQj#233valray);zK#$BgBIJQY=nm*W*+Y%dJgbi1G7KQ$2{| zK!Z1;5c8SOOSbW?A>YJ2=Pa7$zm4Y|{wr>s&!h!ow(;`e8e|L4NSy)Oc#?HZdOiRd zI&K4{nqqqAL`Hbar`b%kDgt?JS{$sv*zhjWTPy~>>S5h2^~n& zB#Xw(i{s-}J7YeLd0OK*?sv2+C63F220pedtKtOCKb{`L+uIt`-KAMnWz|;BwC+tY z&?)ua70u&E^d*mbU}U|CWQ|Mx!TdmGgwYmu89Ru^ea|AFotv-|F{O6;r8>6=zBrud z*cLUs=i%&e$BfGJ3K{G>D$fF7@bSp|A0LmwSfFyo0>kqHUsajsg`vrza!n30g|Sn~0{pIz)oj_a!3-LTop{DXYwY!AQGLu; zn`%V_%5JQt`Glx|V=FzA0Ec%!~jXwn~1UpAfh6^U~AU+)jcl`m3ZT;~&>mW87PsBho~A@#uG@~-zzrTNJYx->4P^a? zt7u_KHkq&N!@nN6U}ly>c2|1v#Y^tgAOX+PM_sr>XD>R8o$~P)9ogxIH%-2gOY;tO z;L>O8IPE;>z}lA{OIyq|mRKi?fRWzP`kIQ?TsFUEMeNs|L$uSM?> z8+W=$6P+}=aBHVX&vur{Q?P5038H5=Cu#L6jYf}&6@%J3NFQZ7n3bqQ2HDBg*e{H% z5haXVSIEU-(1JGGBJ#qQ%UJ9P`t;l+&fc_5;=W- zCOsBGqPz1VnT`5nu9Ls$WV1lN2Op!|(e+^e%#*#IXVQsr>%^YrmNMfH)2?*lj34jvqfU3*j>UoUVwJtd9$lcw7GD~GQ_Guh(I9Tj#pTyKGrMhyF)I&&a} ze;!tnO0B_l)JOS!mXf~CYRWHPFQWIi|GkS3VIGuJGliZkcB7%rV7}=m)5B5rbheQz z8NW`Vw+1Wd#1zbFvyy1jNgFyn-Ib0NCD9G@CA0w7%)XXHXLJ_Q*w(JJ?V~$gy_8D5A1EkD&w~axP?FP~LG+)O2aOo6q?x$`Xxl>%Qem#O z(7hjBE%6{_2kh5Q_NE6vJuo*?l2$@bI@8;ezN5y=_+Cr)uhvEzTF*!JMj(F1$RR#L&p? zi_#&@a8LNCm?JVyDn!+%2)B7Z?TKz&L$&O(gnx z;`x(BhVd7Lj;?sz3jCE!qj01qnkBl>PjQ$7W4)z)RXwc0L9<5vEIalpPax z9Ic_IEStR z&odU!wCvx}q%@2))Vi$70<=XBpn8{#xr>H17wdvY-MJ61?qkVblui*{`*PQwyT#EiMb!VtRyJQb zl}F4;r~9+}as9qy_~th7250r-@eL3Kl9^6_w)W#gLwd6Zm|AzQ_k+)(EB}Tjzw4g< ze584M-ZB9i8`lB+-A0%HtN|-5dqAc6RrUleUKgB6u`dVmW&66k40;>uH7302bydzo zKElp81@EizPUT#fNuG7hSS#k1DgygB=%D%Bha6Roc@}Bv4Q9J-r&ak=vgj=h;lK;= zs*$LF4t^NIlSlfiE}qV!v4unV)x&wJaoCG}+c%6`Emo*3kO7qbXgL2))KTdiQ`6u7 zM)3XW50tH6fJ1^zfsqcO%CvUbbjW=)uQ;5Qy4e9)QE$dpnpwTdjWD^2`{&1k36LuUpu9QO%(cv}t*i{Uv%2Sr`@Qx3k3sZ@)$n|VYu z1eDMj zSdt=oDGDepavLWMm!ep=fH0e6i=P={)$4rBy%Tt}O}6k_osaCf7~ZxbTb$0%rw{KF z*z0AkuwI)_R&}>??%6`&e=m<};rzO_QOtQM11$NCczOONt zP6TIx0l1hyT(zQY;F~r1ZpkbDE}$>i=XUKio5yWmOsyl-G+a52cehwd=RT+@Nm03G zP7}*8zs#l{{^K~bz?Pm-HjNA)!>U1cRN@J5>9^th+}?o#p!pnaZN~entfGc-$N+k3 zQt5of`uSKrm$G-t5}W?K0$N$Gw$Ok6?ZxXhf`c5B13hYY9+%)v^`X;?mf{QS4o-BvisIf=z6uZPU*$1DY?BY`CdVJ2Z{BsugoWa~E`kCnDezk>x%S0pF7>_dN;to@BZ2Nq}1@%ejRD+(KE- zEfiqI%W_t{04rXWv*HD^0%dttpg>ljEYAuQ+cu7nd)9-e(SMfcduEhupp{9BR!|GkI!QI?Zz(E;dCDl_!=X4{_!&(fx@+UTKz2 z>l>MgfMhf2*e{)S+&2}ni;3LpnFcP?0I_3|ke#-tfk)j>+}S%oK5T>xtgqe0y2B>Y z0sH6%x4VifOZ&-%*d34Q*hzRa9w-+MNy9Fqy|8QCNAB^Ll>DHb@c-UVc6cx8?XfoE z_TQe;atFhMts}Hu`hWuu|H6jmV)AGs8HT(G{f!NU-&|vPWeL-;yPCqp!AP#xgkJZ0 zHQ~R(K!%K9y0p1OVKTY1eEmg5#}9l|SjFl~%j?MYdi_vQXR?9p;DP+#&JPsT-s?%r zMv@jRzN(nNM_=|VVTzo0NiplIp0rcJXK`As2;ZSAf%Sxz{)D1S%jWWF1F*ywZdbIq zt0OH_ndS$_E7l&Z0prrit|iM{|i#A&TJwFj|Q{l+H%D*rM9%H3*JJP zMGBpqMsiWUBpyc! zqMp=!DZ!tQH?2RhrW}erEbZX~_LuV=J`)3V)TyUCaJy257(R$FhrofMlJjx7cqMM&# z%N_dzH*dT8qmGXC?9&fyiT<)fj+YwI+d}m9Vg!z1wC-x`~6mlk+H0HRG(SP>z zw;-9?UUeqt|D5PEv~%tbt5M54(R*-gdQWzu_B~waMbBjFIL(QwxALG@Rg)?EyB&3p z@BqsunF>_4G*bh;74!-Jow1>?Vh?(+l}y(UETOAOIR2JI!)zAP(r6E291px`MNQB< z)Q29!sYIU=eZ6TUdN*T3J=*H$O%_2a`qWextQl|Q>M(Wk)1l(M-n4!pQ=OL0sYQ`D zMXqD=@zX9lpKt-$f?FC>PG@hb))hXcUk%8hhBtMeC287H%}PC*=S{y>qK5fJ6kfmATz0H?8^=W{m3py?JzD9XEyBClYWUf*>;I=m z``^9W+=JOvGvQR(HObJohdTf3xr%W--}Zo*H+w3_`=*1-Ex4_R1@D@H=X`U)-mAuN zO}}*7VlDWZi{RbpS?=o*7zn+2?+EPH&k2q+?8=*SGr*!(aQ6Z2xoPW6)Cmec7}tt- zPeL6SAb8mRCj4<`CUv_)mHL#_mAkhYT%`-M)I+XIjWUSvuHxQk^Fw#DOKx%@MBIJ#nGk-Dp$)a+9jadZ|<*3 z@y!BT26?z!tyBl#&7AdZ47YnJR1@K;$@Ln`wR4-RYQbNbB+S`F_nxvjbQ&q^;K5wB zURk#UIzZ0}+|VO2)z~bXEbdL>_TL_u*qzI!Mzf}J#XjYJoAss}W`oJUenzF9#cFGz z>9I38WY}d6m;S!|z!^w=_pgQtUk87a!AUV_CcK<}|DFk-9(q&y^kh2GbS|BXLI18y zCZEqU$wt?kRJtkT(hZu}-(J*kND8SRPoee6USwN0gu$1`nOKd>8oXkU9Jb%Kw4s)-N2 z&q|tcq9?V(`6J_znf1kpV#fGDPp70y8eK^-%7+HQJGS8{WS=#DIGx01MWuVA;_hsQsHd1>mP>wHD(}=P?%FoYGE@{^%>~v2+$iAx+`$d=8zVOS&8I$zf&b@j?m??5LWx}X z&aZ>`?vmN!Q(6Ih*1^0(y+CZ#E+mKijeOC|M$lyVIDUul>~jucrgI^70im2!=q6@^ z4S4fI7%x_@5pUZS(R3r|AMAZaW4j^>@3o0rHSrf~;)>v1+RQFD0!49g5!qhY!m-0b zL?`UvCaNQ$2@ez5lh4zP*-@4DaoPPM#PgQt>Fly-zIAeonDw=YVj6DcjKpZs@o^Ct z=v(rFgQIdu&AL&!B-gxSL1lR|fRAw7%O&e0)f zMfGO|WD&T78ycnxpXCMg+bEGo*`>j21IB)ho!Eb6isXO->}_{($Yr${*0+GVE!@Su z@^ZyT>`BdA?&1wc3&lr~PhTT;aoqEZqEYpHs_DCnvzJ{Feo=W~p{5Q(Ia zqCr$-NNA#&=9DBc#rpw=XmaCJxge3t!p^X&q+TI zB@o&^34J7g*=w3199@`1zn3zojv{_e^CawT+Y)r?eQ_)^5pTJv5}TjA=LU%w@K_B- z?I&$m#c{NC?Ld5ADQsOuxpvLEfcg>A78W1Fn6}->XG^=kqy#it)DsfFOX1Rkczm=$ z6YdaO{!wu}rfX}#Cus@krs8Q&qz!92)4ZiD9s}zJ&@+*||0(h4(RVQT(6j5_?s$CG zONTtEGRWN%kCi)h!H(v%<~!msNa;W5Q7VJ+mhpIJsUCQf@8-P>lXj?|ljqBqAb_0}-F zwG6a$T=5d|w~wAEfu()dp>@P!5RQ;fu=6TR{AdqPpOwI^(j}CqutLu5AKz;chRWgB<|L)-$ppod^54DDL;KIpk*r$(7H(ZXdVXm=HgaxrkZL&&j~o>y%%i0R|cbJ zkCwmphn7=FtDX)TdHBEu!)2G#B#d>m{%+%#G3Cmn;6hjAlDr zG23CZ59Nw|C?n4TS9lhvzowbSKkfu0b_!RpQyAqPa7Eq$qg*+z$dzNpfirnA>4?k| z<}tS~W_+@PlfeU@M{ng7?U z2ySd2&H623+{L31P(z0;X=lhM(z|bSkrs20o=A;eA&foMiw#>fo+H)mOhtngo*cuQ zzeh-%*@o>S9=@;wf!Qdr@hQXk!0St0~I z>%zy+q5Wy!kwUNGo%!XP9Qexif@Xb39!NUm$NrxTS5&C;@w5ZlTTo=kquTMW)Gznz zv)iz|v@QQtO8bI#0}THxQRN5xIDApnGAI^X@*HBMl=&4G%nMZEdfTbzRdsLD7avb; z&X0t0NP3$q$ue%nYu9j^vwfEA8u|+Zsg@|$?=5bd{tY{ObBHn@EzaEi2}7sRtfR|R z@j<)y$im2jmSigi39oPz^;4r~?+~|4dy3kLBIR~Rh_&AzpcC;5CJ#>%H8<5^PM8Gt z#!E!y7T55Ah6J*uH^ePDHQ2hD1paLQAb#6dh7*k>FiWD0L;MO+*`0Lbx76?&?Kf*< ziAQR!fw_B6W0EiBkotHBb0RJ!#j~ZZM*d z`a9ZnK6|(xQmM8aWSIxz{Kt|Xx%wG`L#KA~v-(gDgSo2wd^U&EJhqkm?B0?1lNVIvX9M#> zc<@?De*T+H49N?>S;tZznsHKIUgB4Iy?VKhbnjDsknhh2&K)QM>%$+|%>h2JrIxsM z3*In&WqMW+8_F@Lo*B@dZcs91!3=!FCQtLB-4wl>Qtq;E&XnbJNeVY#+#;Qe512K0 zGbi7WfBg!2_YG-(L4LmOR6_YRmGW~2%}d+n{;Q=MG81EM{?*cxsm4w;D`64eEHT5S z2-?tG_sTmvG;}Ni=?)Xz^o(@IlrM8B*o1Oz7)mIEW;6}ko|ccrUlWR9uftR{dajG5 zj>Vv}$e7-n{jr|BY!5t*aopja81j*Jqcf*c)=5V^)m}>T{b`u7p(XB}A%!{QlZrX@ zL)=?HTE~wwu+Zj(xJ#WhEgG{?r^Ov{$$%30&~^@1<(?P!KbL~<@;TUS-zm|Z-sw52 zb5Z$HjCfG11Txmo#k_q1;x;4N3nZDNp~F(qm39r)PtEarf*@AWdt}&fOKiKfr)b+p z28LfO@oUI!$vHtrx_m4AsJTtD(1$c9Wmb54(TswWdopO>(HiIURWh`&r%cR|3o+ax z-0(Z;PPh2j;ya5MhQIccfBcL+cJJRw;N-np;kFVR*Xq?zM+zG#E6P53H8!r*7rmSz z-0xft7A9+()a^R^+lgDS*@9@H z+4*wfeR$xsstjStt8(a>xV1@bf9_eHFz#tN^pE$##VdLv(bKVL=Nc%m`od&KAZIuTM1)ZFmn>Ogk?pon6@8 zp+5`!L3+P+yHS)5XKe>mP`2Y9R7xJtE}2u7_n^J_Y`qavJ5fP75&JN5=L{z3R>HdA z{aBM^$;#p?!E#|RUJYBwlwVas1Tmvhl$NsxI#n>^=>a@gwT4~ZL77(PLvW{`D;r!~ z1t(@vZ4=?i!dg^=x9eeaQ{T>1$umA-O(=HH-N8J_8(wG^hAHy{*~f}%IHwej^S1}F zPZ~8~|2w=%4WG4mAFCKu13T76HmT<)z71vpHZ_zDdIaBJ3t>BE*TA8&quBU*wBKQ7 z+Mxypyp6&RHQ{V^eKlAdiN-+>jxe2?YA~M}gY^>9T&7mTO^8L$`3Y=8c{P~n#NorI z$JsN|g!j1h8aSDHR<+)|HF$m-u%2b!j9d^4gaqBy1od0hUskc z4@c{H$3){Mf*MzS`i4qzS1rmS0~$^UPW_lAnFz3y9Y;Nq*juM4I6VOnx@6 zD@PpNED@p5 zu($ktTt*t;%pUS{_x=c6{oi}xmkZSxfnDU+?UNh!5gp~{Jtd?$AwF%x_qKrQnZAx{ z^0PN_kJ}FZ_g>gZ?Bb9WE#=o6SRYBRmF4G#%+s$=nt|VMA81R@G`8uA{F%(?JY@R6 z^S!YpQ0Z7JzaH;j0v$`r<>&wZd~W!CZw{h5c9o1xQ%Yk?wpGK5$^?9OKa2U3K69&h z3~K{2SO?-NEb~8xp20c9aH%40>~ZW;bB2xTS4B+NARr{Ytpwm4rKY$e40?B~)}zZgRbGKlr=oJhN<331{MxG3jU(+aFp16R#xW z5|0Zk#;5|GW+Y>k-DMV5Mf>h8$tXl#XQe&JOLCL0zq-u^Cla#)QgH06d+eGL<@yDu z;Gf*bR6CYI?B)~{%bv3yk4vF=cM5LBH*B{TWju9G#jA@xGB?U~vVD?@KZWmXz;qdC zr=;O|wPrA@u7t7}(((H+Wf&YwdWOO2c(Y$i$em5^2#YkFH&Ye#K1;!@CKX%UR)eQB zZw&EGMJ@Xdq#>pEi+w5{+0q&4p#@78r{IG0uArVPg?3|-@%+G^u%=E5rza-i*yWnA z$e45#ED;08X~D0Q5=i`Xyh#seQlkw62Ft)(DG}@M41mexBbzoM5sOC-hMPGu2)%k7 z^-OhO);Ae>NRJaYQWxfFl#+&@uHP6Ar52^&DLaO*zKwwXfu+#zWCGs1I})7oOF?sE zJQjqHh64$t2bdOz2Bl+R@e1;keU8Dm3noCuM7m#y#@%WLPNM~$wYbkUMApWHHYIM_G0dq-9@P74j zwDxd-L)KIqn9_c{w<9d1&*<7?8{!Q*5!Xou3zyBq1sUsLOFPOP^E1a$rRyQMTPeIF zO=;tv@jo|L82OgGgda_DL)s?zMLqcO$5U~R#}+uTj(XmmMrhrCD=5Dt7EM<`Su-yX z&C4KirvWa1;|=-;%0TJc`2W>Ep3^)Jv&@JaNzeJzwZysVkjz%7Y~zRhsb|@7j5VL; z$(@Ls-6JH9Wv<%7yHPI|m=wjXEZxi#-V=k)KZ4Ev;Kq-H7lCjzl)>K(+-Yzze2F~7 zRtJD9CZTFd))lEQ=c`eX@d^(!ZAv7yVefG0XW^W%BsX@MRMm?71P;qC1yuWp$qy z^DWa#8W>%y`yyN3g?1?Zb{iS>^<2@{H|d2*&%hOW21XiSuFwE8^67JhPoFr|R$ReX zWW)vK3N9%1ycU$NAuUS?a9d(rljHgEZ1w=1ghsEbdCWsexIuS&P6K{0`;X zdxV%WrzlfCiC7Bvx*IXoBon@FQxWL&o4}_3oWh-{7hX7BkBtbN%;WP4;auhrCiP)F z?F#LlD*Lcv4MTpIG-L6xJy=&hk=xVWHpQYdJF;awf3b;!($CiHcHJ1RM|wg8S z{UiA%vW>)Mz7ZBi4d<&qh*V$I2}whBIF3M=pY8NO3JnO-8ypZz$Y=ykh-FWRy1ou_L1*29P+$oB5 zZuYH&RYyB>wLbLc{BqmS)}|8={6+l#f>VZVKB)8KGRh%(w$0F}svQrnARd}?OT$;+ z+Vb4p90ChN^p|c_<;Jr)aVl>YbmA@fHtJj3tl1*DzDtGQ+d~=LCS2kh)0}s-;&3mu znfP&EGhSd!eQx3a(W=jH{7${Fm&ar=!Q?wG)8lac=PZ#A`;4P95v~kbAwK&34u5y1 zp6k;N@$99Sc=m`0-7kiTN_tOmfV~JW!c)Y{#~xs~EnFl2c*8sS zn&oYX_mz#H@jDN4M|nY=t~)F}lt=y=;;0pS!Y}fMx4X9)I-K-|(cjO3!Fo6O zukU7>2UFvSuTNi#Z6+Sz3@7>d!4cB^2Ce>gk3$}1r>&Hqb;stxmTAl6=a?yZ&~MRV z`B_$$2kDb+A+Bab*9^X2E^1Mtj*=;YgGGn@th?; zr>@P1E9(DhzsZ;LVXx`G+ONvEAv5k@?RS9cy&g9IYCq@X0?3~8ul8#mTL7K?1o_vQ z@UZ|!h3L!APo_v9cijZ}dFONqESWq`evYP`6#L_&Rfo^vUmMUSC$dNAU55pshV?xUTA3(a=I1_1WD>5oaO zlzs3N$OpY0i)hy5e_=AZcHf4MV~JhA)rfdpZm4#cIGNX`V6XO+2TafNe9;&k|1L*e z((24VHx=)HvBDKJLzw(wHWu}^L!+D`__%R4J{o6+8vBZ%$YK`d9|7LHP((QeGjYtc zarm=kF-Tg@!ndizaPuf)#66pdlmU<1h$r*RVkS!Md*I>3V(@gGg+4#ju^0JSuKk&f z{p(b4w+`w3Ea#%P<~Q+nq7+WtHOGbRo{Op9i2YJyfhy&<#fL2$IIdQxHKj}(abF5U zI?TsjD^7_IRp?z1WsM>4qQzmKq|mdw4Q77!7uyaYX3nIAm>6g;+LEUu+H?`sfrjEF z@~T|gzX&t-_ZIKGra6Y1E$->@K(hK}35*K1#YLxmCFwN#)q7`)6OZoCH#H?b&ymG= zr++U)cdDsg``KgP&Z&kC_0MGWm6*`3nb2V}X_f6);m7%!!t%Fe@aCcuu3Dxqc&)LzaEXQb} zCXIY*x4rQ|LZ+}&EQj1U?gwhMpF>%dITltcZe51^nkg;@-#gzA$asP8_5o!DIo#%m6e@4rmJ=HmRRxyrq1fz!8%tNIhH;z1Fg?eU z?J=j_lT$cG&)Ci!j#a~=HW65&x|5B1QVmy)BC+rGK+?fi!^7$$7};SDTh^rpo+(A) zgTeb*?4la*u#TpD;R7sgPYskwVrYkWkhtqLuxd~oX8%6S`UKU0awzSgWZ}$lehoMs zO~6@oN0@on8rZLW4E2RrHv3&Q3~Y5ARre&Yt#mzYcp@g)B{K1EHB6n6gvYc}Sb{2j z{TazPv~L>w_^cY1UrNUQ+?(6a<4}|w-|+93{~>Ky+bPGH-n(r)g!EK;?PHj`t`F}; z=dUfISbmqSd|zZCK#V4h5T?D?om<*aj(o>pwyxZjClWVaX>>62 z+_#Cp$ti}oUHjOYF&lXA)=~&vv5y_KapOtqq}SEl!`!B==P#)q`}jDB_58JgPnty@ zw5naiy(5ngX;+eTcd^5xUHBbODcE%jV97a7T+2%el9T?dWUDj3RxYKPGtELyI`XYF zbBjyd!FKFg%bQ;(7PsAYHuK&po?Ib?`}Em%-?oPL{2_&`{@(0D)Ji_KE&W?_*vfXT zApV#V^*)B~O#Hc=N6aA(wsbQyjdkE99;Ca_bY;TOW&8{6$Oi9lV?FP#;MNhuyDo8N zXJ0Sj-`1DV-o=GwwOYReH)Gpg0OqE=_L>*0!B4;%4dE&0y>y=NQV zl@0vcddjb9I1d_=2cYC4Kg&Y$h!gH8KgaFLgZ;{@@Vt?0AspSd`{H)bh3Spsl<>!~_v^V^AOMZUS zqJ+Nx|7Ng8^j>)Dc72AI!k-@yqaW0O@uf&BShg8O$WK8ea5I!PMd`mPPY{PDLr`ZIwez z6Pg=bPoe$8S!Qcp1!tG0Vza&yHjaFq9v*2pabO`kt48^H#c6oMLCQ{jsU!_Z8h&^! zV?M=|Fjq4j50##0_bIb)`LcA}zOagNA}U~3Ksp9Isb$LU6~u^3$28x|?EHmts5+C5 z7HT(GGHDfN?#{ptHg#-I;dz)k{RAGHf1i!gKMxkhnYhL0G5g^~eh@Jehqrpc0%#6k z@Hmq)HQulT)Sp&7%)~XFKG7Vc6r^u6G4RiKc8~mqZ^E-Ma%eM187qS>ud=Y{Z*v&( zf%u|#vnV6J1$og+D6=gKGb~jp3yFSiduO3Tof_3dQp)+t!s{bCz*qX&?&h0`v@;?v z6YYF^Wn!&aS7HPa&&}ZkW&ib{JUuBC^~k`KiJJ7^CGfX@I?BdtffLOfG*6^qyAo}9 zOWONO4^nZ}+W~Nse3Talq+%B~7+yY+QJ!lGI$G<%PBY5xNv64ni7v=C(Z0J&3Kn_{ zr~ME4Cf+1rsq+Zva-kHgLle=?VkB{YOX>4HhG7dw!y?*0I>a@d3FvGZ3ma>RGgjDi zKCoCa9>i4I3*U;voe?ah>=@PiVfez%81CJpIRN=af6p)hTl!oM6F1WQ^E9ZxL%Y$U{Y|bno)u)c zni7wV`d{b0P3~_zL!caRP~?DP;~4^FvC%AqJWc-vHklO=D;^ZAcx-qMR5+Ev++aa| z{(Pz3>#l>JZB*N zIVkk!NcwY7=+B$X9H`F)MW2iG+@l$r{JDqp+yljP59do(l81&^c>ycYYtd@hrAyj| zHTD==z6Sca%V0w@JH#(*!I*a0QBDi+_vrO7l4eI!cUa*&=?3UXejJSq+IMu>M2ssL z%~)n*(rb5^N&0~*yBX-X*At?t{t53p9lb)gQN~CqF=3`+>Kt!aPrj1Z1xE7kPaW+> z_w0^tvR`i8M>po zU3IuHN~s&~qru@&hO*GO2fVNM0HS=LVQPE(v{yktXffG;}rJ1O-F?=RMNE?3x+m26eHEu#ou4s|Q%%qxCaz zIBDjkURLC90^Ai(eT116p3obPw#4dO>~DqU8vU_-mtr`XVTE<--7#iKF=<%m;VKh# zTt@Hol#Kb9(NhJTu9NOG*BU3_7s_>$Qhm4pHG0;ISB^@d{Gbi`PrfN?oh6TLpGEkN zhSCjwoZ}X@cts~mTvAJV)E9QR643p+ z3?~okCAwr&Z&J4$pBg@rG>@ZfL9dng&Dl+|`d|sH*I9+J_4@f;ztQ};g63einc;~f z(wzKuMCTtlh6_mNPTiviK!bsrT&O^JP&7{w< z7hWor1Ha^f_jNsm9tXvCYR}t?d)IViK=wC z)-7bG4^~0jmtokyU>WOtwu-c@;g~$Yi5(NGCSF z_z1Rw?d;QDn$MHRzf)I#=6<^xPDMqLW@#7OJ){QwBV%wv!X7qjO%1dqKUY@xe%33h z25zOs;|Bc@Hv38qgtR$^UXu^89lvUz$n`kBULMNYJ*a`{mWf!V8^Mm3)Ii|wB+O}Z zlv#M!fZnxaoPRWyxv!{!r2G^dsB(-sB-B8LYig4^dC~Jk7Iv}*+6ScJf90v{+WHz| zJ*8uQU5FP~-YlB?in%S>FoK*FlR zs^EJx=>;Bf_H08HV7DyPw3f1i3#(v@Q5Je_lCh|+#2s?a!bHdO>vu4dHA1D7bj`{GM?OR+1cHd89^UrUH4OL3d_gvIB{KSeTPzK8G zTpVrrgWWD67Uhmyw3*oqcF-RDc}y z{QF7CN~GuK4`$$WhLP7{S=zd>H&Wz zm%uxVQ<&C96BvCRnJgPe{O${WG=I+ca}p=oYeTey4ED7@iF4Bjkf%)sr9U!Juiapn z+q)E8!cQR4(kRo3=J4Ax@XO1gl#@eykhpZz{y7X@eJzC;d-@z75sS5b8F;lwMXSep z@Jp!-_WVr7J$FXI&m z(1+gj#ou-#WwU}Jn-wV|1{4`FNSsnoa7vMw1E63IATb9(!5l!EIn$g>K66IuM?le! zAoU}l=tr>K?p2^xL+|ARM`YEGpsy^034SXOhpz>hiVTcAmf-YaXWAdih)ZdUKelcF zwSF>KebNSB1#Se{JQ-L$osY#%?l3f61~!3~_*B~ymJDd9oy_rQpKTD7MZ191*|_(X z7dX>r(GOysyx$!HcjU49OB5|gBInXWF2MXssKOP)E!srr*M|<~ZTAJzBXHkp|Md$qcHc=)-?KEF|w`IBTfEt`Q%p z_lt0*Vz`cX>{SAH=Xx*K zI3!%bAz{QS;R;p>Bc3o<@PrxVKygJ56#G7F9#`a)v8!5EyvKMMB&%38IoEx*;Jt2? zKx8`$RvoKbLuSCJa!JxrQW1sju~Yq&Em~XXl|Kq!qTf}@UAqwo0tb|`f*d< z_6_kf1IDx3HKyFYsEBw6!M4jZ1fV&$90bB$mQ zo4fuNYOjysIc+!;uX`;FiyOl~DwBS`q)yONAIT|l07ka15~gh)$*stz-+xD)FuZ0M z_w7h|vSkwCUJo69gYtcvB3rm#?_H+O1Jp1v>}0poh`v84T*rmrmA zouI*oUnEc2-U`FhN?mwM@*W;u6WiphlHQ4XmJw@r!BWHVJv(rRogDsV)*AHFY|pz; zJ`wSr^8-hz@eE7auXR+F4BDs4`}`o^Syz9_Z`yavZclke%2iGF9cxdk@Tr|RI9*o} zN7gpyS=t-|Du;>-&o$!}v@1C?+)Ruf@dpb94(6+E#EYpl_@193?mzVuC8TGtte1!_cRt0Ft`ac2bXB}pavxio zNWfk9r5K`q3m>XTpki$^nh#t?-FpSFcV!zqZc&9!*9xF!e;2emFT>4`3Ls!}A5{Ir z@i|>rsUM6Ng&aJ-y8w=~Ho)i`>1Zkzz|T$7@K1CiS~Zst7sCP_C{L$>G1Bn-87lLH z)RB2GV~eN!e|yn0$A5@B1Y1Pn4f0tS4O~pm%osegQv!n?+F^~$A?$KUqPz8rw`KJC zTo(mm@`%OD@SRhMxZaFrcXL*tvQfII=}LWsrUTCQ2@}KGln^&&HMSbOObnrVV@CNh z)H7KjrqO#)2ORP2#Ytk#h7!0kbPZ;kcNI^qCcPYYLgSw|ByoWyvBN1@~r@jnlFH|Y^n_xTF{Q9VD=+qcQ}#=XPvoL$0!!g3g;>DQ#EIJW7q z@Qpkyv(N6tyM2xeBaWBT3?cxNymExPqvfz^-Y)FfqeK`*UKOP^K`3*(Cgjn1j@Dk% z;Xf0+vdiIhcm!KFz803cr{RUIN7=Eywa{%vIzAr~%Vz$rf!!C=aoLvy=F+B?vc1yLVMY=Q z(XEAoBUG;rNMWOkNH0es?$7FJ?9$H~_+FTa6-gP)DY^!FNwTmi{49Gjuo`yW$R_lr zgk`;{fXNgUe>0XIeRxFloeT zywa|UiJIhLNjOb=-de^yD#$;Ui)Xi8VJ@VHeA)aAmYLpUDeKG0|9%GVc->{g`j+@R0RWE{6^Jc{t4e3F}DxMS5i(I=z2Rn!PgUsF{yyC*QJrmSs?smXB-VKe6v$ zN?}e&0gl%A!J4^}9wxc~E7hC9cB=iRJm>6cdq)ANvh}fga@PSali? zjU5Du@ue`<;}jak4T0%2$NSLoB*rHU1=FErkQ|bUKK{d?)zmT=aQXy34*U=FrV(HI zcm^&H*Mmz`qt3}l$K=hUXwO^*PifA%u51h(99RaP4^wfh+IV8Sl|ks>6dYGI0Tw%! z!H$3=j5(tZsdT-rJ-tsJ8$!r(Vm^?c=(HPy-rLGRT|FMB^_c{wre(miV{nVA5yTVU z*x@_%7aGR$nNr2!}ygS^a@7Q#B8k~uxK0@mtHom8EKXSC6Db4AL z=VlX(jr$P;w;7c6Dub?td$DmpqThEmEF)jf!)8HEdK0tDbD{f|68O(G5Gl(N6j_!? zc?y(OD9=+sVz+{V-HOCXqbxc(Ck;s(0}5>n(hda_I~1fH3Mh6cNVP5~YF(sSmvXk{ zwJxg6C$GwZ5||t0fC2R`Fe0%8vb2|DN8)d2R#3k~S=jmCHxoaV@+tgmaruRYyg3=T zy4au&ao5k2mulzq`4~FX3#t#3NBEOPlj{xd_$|g|aHw=T?UsF@^EH|UMUn2BYWVE? zg%Duyubw~HpEN~kp)9zUH`iNM1d{qgEaKNz-ryI`{T|HJ`gn3ixx-K1?`3zbwoukX zF-&*a!xAQM<}PoGA#~_&cB|J${*L^@Gi3p6Vz?`B6(NONy>_ynd%-u;$vdJ2?ie@NW#{Na;X-HN$O%q?kUBaV-7yY(DM)>FVo7%b6kZUuX_lFpOS|gf-n!P|?((?}G@XchiNapkX}Vi3o{)X+mPcK-xu$a2X?o?Cv`Jz%h|L zQ<1`{7;WxTEYiGpr*JcDAoo5%{9Y25w3yYG2hh1^-F%^9pEiHAUWBb0Ho}^@z4_At zR9ElS5k?vG9056@N-lbKI0jO{0_Q?8?3r=pF-+|+ub%OYuA~(cyj0@ z?ll;0r@VI`B~XLPST-DmH#Y9plm(KYacbfrxa-Ucp^LMu5CiHiF_zXnnuF9O#*S~0I zA*zJ5;1}zOmDj;m{4hX?U+PU-thFn}6A8+EF=?AO)o&E*%>LreeDce9Zxe?;P~sEM zA>;-5i|=>*#14iCA5R2}m7SaM-1SKFj>BT}onJ}&D8jG~(c&ZNFRUjGTbkN2aovIU zlou{Svp(5k<+rbRc#Q~yN>7PuPhMf$w-T7qvQYf=>pgxHL}+teDmK6JiU1L$?^=6R z^wxihK$@$R(wE}G<@fP^Ckf=={408S+$3&W0a(0M#i<3CP`jjnm=;~oCZQ4s#}$yr zK@(@&%P^<50Ct%U!M~gH(BV!2w070QqWv5PW)^_M$dQ;8k%w*kNXt~OPrR&Ccwun? zED1BgE6dZdJ9*)Q$UpMp&~g0mmcIT$TkNpFgP2nP`k)aSTZsoq`KqhEVO)P72s%lb ztyjs%Pu?XQl?RvW{`E&hKP7FC2dMrsN9EUrAhWSYpKmsJEQ>O8e=Q{+u_+ppera@x zJ#HQk#8E8*tKSRp{!qX-tx4ze!Jc$JV{nB5`SSiQBmb-}X1ErChSduEIY}GWdl$j5 zt1B`6byw_srU<5GIbh6yc3Awa2*i1`Ob%AUfwskPb<=80Q2iw0mtxAKTO*%4eR*37 zPVZ*pmoRVQc^1JAjbQn#CVN*AEDH=_)@&<`e(*p0vf|l!FyWggD0Pj*xbM`HdOBcM z{}^=gCLJ9ypU-+6!bm?6%wDg=qbk8D>rMH*eOBVsYeCqJJPRtDR}#M~02k2D@Mp)B z*x(^wY{mioSEAn4Z8*_~!;--(X@2O6X^|XmwpflX7ah^AME z6O;QaD|f4gr7F3Ydpw6_f2)SeKXOpJ`!g}O2WdN7t;P6G*Ts6uxE$oR7Rlo$W_Faq ztGVm&=Atyw(USB_JDssyGfW&$zTni|&iM32p!jhD)mI}O(fUxJDEmun_QmUQi|0x) z>8+G}BI~ignSrQ0pacd)Z@>|AJBbA}r?O-lvADQgGMcmyg?5`UWYA*CJ9=OLdb|aP z8hGWK-==Jc{u|IB?MQx7B+Zlid!jx}HQYkA-{88fxZSSWP>c3=2V%WYc5swXJhBXm zHGFYLR|{e7%QC3a*^Ubytrc2DlAm<6A5INXrh&NiM~ZNob~JU@cjM&zb3#dIIYh1Bi<%qDg*ln!uyXf)4BvlK za4w;TY0pG)u0ofa|*=aDr&SET&b$ER4hglNqe_`AWF_ z^+=OmDfWaV8{Mr6ibo!8a=rQcg~afxqI~x#T(xusySaqUtD^Bnv@^RxJDO3IF{t6X ziCtY(4XOXp?ptjeySbJ8`-bsYW8ueEXI8_-R>#miE`U8Dz0kzV$MLCc5Y4=5VA0?t zbojcLZEIUg`CrL6vL={KURDd{w4+ZOc92=0tc9D}sg%Kbn5k6O5@R6^dxwRw=qt4l zYnXwuiU{UXTMJ`7Phdh=47+4i3u#fA|7YJcYgPj5pj8V(Oy>XDPo4KpVkr}A;oynP zCVf`nq7=5vq!xC?pTNkx6xPnA7TyMDVdLxW+tZlJgjzTdcM|Gox%Dq#q8~~DsY>27EfK3vCSz}q=z_* zZ>`QVpU%WN_dQ3?$trehLnY;7=3!~_1$I-l5(Z4mNBxsmSbL`mIHXyCd+y$3>eOGG zc9M{{^d8d;DTlu5BL1iOh_$9Zz4E$=CmWn+`;qb9syQ%%oP{mF4w$9Jsz zCF(m|IIi#TnQb{*Mmg`K?G5_Q_7X>QkBlVLYyPs>;8Hj;n3Eo+Ie7IgCA|m7HMd&8 zi6R;8F%dlsRY`9}`yeO8++sB_rhR%Mov)>+!@NWpM0^oZ*`pKrvxz<8D3Ufq19XTR z^W&-nXFlvsJTS_Sn3*+Y!6VEpvy$|$*7Nm>#Z(bh8EbR|% zsaNVX{VaB$GLZO7WwbxYMOo!w*r!UFZYen!HfbniP`+E#>{I0T9|p$j%OH4sHufC% zAN=(!gZslzVxM(-kiDyn7*koOZ#N3+;;B}*&O+TeV?c!%{}B=x~U3Sl=SB@jZ=uJqLdi z%9SXE9ppo4+{gK7OoyHiWH7hnAQo*jgO-%ZXv7X+bjMk6hnrVJ^IRB?W_^ zJ=o=#eYd*bcS_?C@meHrO${lyshpnp|((yE*>yhP^vW;e@}9{5|eb zL;9#E=JFoxFU=U$b@sEf_S<;zZhG%eqMVUSp8Vx+@_Lx>X8rnj@P}Gbc<~~D%^v8^ z`w3EbH+LsX*51T3qogn{V>=67=EkSh)4OkyH``jUfj_XL*`TinvzxnwJ5XP_dDL{) zWwRai9mKB)oJza&MSR%|8EF!Xn)FchH*EM1FB#m7G-BwqfG?!^#uJmt>}vLWt`%Ma zao-KuFq3(_gAHke+v~HENK0-RMq0#EW7(f*bFSH3O1VFJtXh8#S2rq#-l4i|(Ab$A zX*O$era!xGZpt4|FCqp@Z#HA234cxV-k=3t*koN}-Zz@|XouUf>q(QjwQV8gTq+Y2 zlJQO&g>Xy%n{e%^0avM~IzO;p_;O|75jDd58>9IbADU6C zbKy^0JwAtYdTu*2gzW={agPiUY?~bs@{)#dTQ_16U*9fhxDMo%jv`1+7Yasgv`L34 zg3&fDq5Yh`{H+qgx4-WVZ)Nu8qvj#(j5}s%n@&B*C4?8%LkxTN=+37Ha(J=G!N9&p zH@=y;d}f!m3Zz#x_?bBJXuSPZP<630A3m7!0WDWaE|2cWA5fh?`~5k|?+)sGSs}t9 z*RPVlRcd@5aTN6r_Y>n>+VG#7iLsDlDu%Ug&F>?^h$2Vv<)0ROGxZMc!?%mpOI7%x z^9Yx^?-ScQHRtNS2(r!LVn&~4y!}js>AjN0cH@5IpvNLO_B<_C*?&cgVIs|sO2iHW zKVYAGq}A_rRg@{cLWwQ$pl-ep?H)YAbrU4eD)+C5MfdRAee#M9Q^kiFHz>Qe0P1da zqAbfx*xa{({3g9|^TP_vbt!-wW<#h~km2$p1z=UKhikqe-djU;_$GbqSAPyWS`>h> z(^MSdl})<@x~Hc({yCe5Uk?>D>~8S(ont5^p7|(i2mG4p1qaF3&@j(v_|M7IJUH;p z3xs@gY@J3s0$V4X7-fS8Hx&M@V1njJyj^fo7d5<_Rs`xxH&8BOGi=?j z7{Y2@v2(i*q5*jgR$X&NTcszWwF+hFX1d|w+tGYT-Qe5Aa9Yp9!Xt^U$Rx03G5E3SlkEp@-%!Y+Q>f=OhSI&C0>y z%kCz1>7<|8!W#0Jr^W1*XP`G^#2h&jjE%3W`&0{e+EQ&P9K;db>jb+$%&5^@3o&o3i;fxQdV!r{i;kmk#+&G;go@*!Ia3iesX*yY3cj2(PJpn>d+Cq z`DzG@cc_3JbB>~lFoxxpR6x$+D9krCWaeuq3+8Y%K9U)+%&1Cu9C!pTZZTpbDDT_B zAqLf+nXyq7mBd?&MYTzm?6gu9&4Odmzh)8pF_1V^2jcL@g_SIIbrmu96VU#iGxMQ5 zpr~=j@a_D~ENyx;=-HKu)-U%m%|$e;ucvwJnPBqi*FxK^X-(?YJr54DE>xGA^YkXQ>n-I_W~gxi zoV%Yub=7e8)9?cQoM&R=>&h1*n4azhC~uL4yUdO<%fq#xqDAxkT}RpXkF_vg{Upsf zW7sZ9E%=Pi#t%91?8b^(=>0AmGae?g|ET^P2&bCVsErg#-`<^%qzpLTk!MYswW`Q$~JRuJFS$^22h4AGXQ;#987B&JrWe5?64R81bdK zf-lX8FU=KvX-4@hT#?VhD4&HZ@>!bPPua>`k*&-qPnj$7lv&Sj_S}nV??s`;?D-HM zc>nQ#p6yvRd9e8|F-P+wa9|bXP#ku~X<9L8JWB#M7p}+Np|rPKOtZ%TXEgr3A8*!( zF!s$l+#m$uxcQV_dy1az75>RB-A?3nQ9*R5{2FVKy z3NJ8{mjo1E5+pAPD7+*{`X5l}e~|P)pwRyy{mg^nXCCQi9uzetv$=8+?}$o6Bgayf!|2lsp1zcJgyWw#BJ0*77=8 zlXerUU+!WjA1&dI`x-KjCbQ@fi+N(43_jgwEU}9%w}_BIp$cPmMGJY%Vi`hNOA05lqtIy~6JC(rNoRMtQJS+aqnYgAt!`aW~7JRg{ z7?N^z*oqc&c(=A>~6465;L>ZDGrYe%!T4gv~vl8(tdQmoFJY{*+OXhJ)jK^I%tm1(lkH|NZU3 z?++!9^H&r7X2IQg%q7|ptdkZPWp(3kA9B!i>myO?)0Ib&r+EK??UJXJG#hV8yMxyy z62Z44Uw;LmO@|g@fss0&8$`8thoRzLjdpxZ0BL?M&LzEb8@?+FL2tz-ajT>?zm$RW zvlS>R=d|SgMVdtq4iy)7Xu+FP4Sd`sT6~+{oO^ah2ue>A%Y&P7Neh~v2cHuw&g{QBN_a{NV9W(D+)9*oYbD{$({0vKdH5{c7>pGFrzo~1rs zUW@p;LjlZqVT`4}&r()k0c^{ggDGhz@l($N=((2o{5Mn4d2RtP!2wnN9>ca53qUo+ z1s`{|z>mR&Q1{stM?GGEH|z^Rb*vk@$4ti-PKEG0)(w}c2AlMb}fPB?{`q9>KIAGZZxZfKPGr(>Yn-GYOJ-Y}Ib4ZVRJ`ks+jS$qDQwHLbK++k_6>{v$;PH%I7<kxCggSNfCy8B6ekqeZ>9C6ZCD%!T-hn zCbj6}o#n!1sv*zYhG64bbobHA!jmbKE!gcaHooVF*FE9NkP67P3d6?t>|OCzkoBy9 zX%i#xSMR^V`1_=dpKt^lU!U`=jhwC8kWZ(?yRuI7`=-W6W5_ZsHc+Slo%$I3?5o3! z*HpkbA&zw2W7x5(3h?e8k1mT1nLA~<9^D*|AyeRGP86>y_|T^B6Ao zvSc?~5HK_*Xw@af8+(5SPRSirXk&eGLg4iOcg}mf+v`O5{E(g>? zSpN)kc@xYuLTEnOfjm~r53vP*YiS0XiI$T?na-pO#5B)pQkU9K2xn$?7a&&iBsQ)~ z4S58G6I=kPNj5gVr*VzyrxeB1UeG*t*eTSijbZB7Y9Vn=4kolsV9ldzsh2s8@n(rE zJE#_Zugb+y^HLa}QVSv5a&b*jI%}&_OFPXoO|FmXm&tySzD4KYS#%wh&5Fp=I;%?_ zHhX-UCFxKtx;h_U_Q_)ppI5_!mjzg!DPj3HtD(nJ3A*1ZW*XzFLBDlAjwjx6*@r5y z@FopO`FYll^g@pw72xxWRjfU)1fy3HbeeXN4Kb~Rw;>{`ow~~Y=2Sp{7RMVOZZY>+ z6|hdJ2#-I!$2O`}fJ*OTG`sSMUHV12qPo&1Gu4%@FK7;b9=dy$V2121D`)57cVG#6 zSbt{XZ_>J0m!P2gow-mp$B*z5{O`{ncKd!Q=nO2uF;UHlyG(lK8Y$ikYXQQrQsU%G z@%3<3nEj4;r@f>oJD^6~YMK$n7o&=eI=t^t3eC?I;rU6Oz~lwZg<2J%kD~_l=`zTv zDa6|N?xbI)j4GQ#^fTxU-s8v<7sp9Q*B2T*DMytMFPzqbJ9cFd@vQ(SduxLlWteLB z$p1g*tG)#TV6{;hWi+1qKj*HUW)FrBPzK|R&f<+5IyBQN19QJKIQz6NOg>9lR3maR z@#}DC$dr7oej0Z;{y)0TJe;cbefw!vAx%W38I>fBSocNqT+%#fqS8Fms6v@S$SkFS ziljugy{?;W*qe<_Dy2bbp7S(mey{xYalHBC``kZSr8v+1>2f z{Jne}5ckh<8|#?Ao7X7wpmE$r_Uy$@-upWFhGwi~R9|s*eZ^=#$<_1827L!32hmosu7#s8jvmdPF8?WWV z6CBGzf}HsM@V}ZvJNDdnIb|T`L*P2b+Fp!6<1rQJ_js@t!%8{4Hrj?uyDi5PzbO|uXe(B2=WHu6ndfMW zXm?P?W}8!f>u3@EZ*yjFs03I^W`pOt(zk%s6%@nzA`yqz6td#I#W3|YqGERm+xk&S zoT6;(uXmj_UZI4wZDhD=StaS~lwfc-7p-33CFV{MRJi10T+%~knMj$cfdvhoaT~8E zEGwf3oOa4dYx;~i`;yl2WiC#;`i%Xi_mNUmP+#-UJ;|?_OJE^TP8BYm@t!SxNpqX* zLQHt`i3P1u5SO?R6^p(xRXYV(Sr=l_hTm)ey+g}`3h}=^jVWKK09@M@;+MtEAmL&G z@rV?d^tdJH&MkmhkK}lCbQ=&U3+zZ=IsW{m4PoGC||IaOc18~IyRz_IA5%z^%i;FeOiZ@#4|y-- z(D*|JzDqNMzCYxovCP1+pUk1ghO+FRQU=IP3(DW1e4LKuT zy8>2kzl=xAhJl3s4hIHZ!vB_xfFY|Du*&2je!nrY{@hUNBsIAH@0sB3Yz={r<)DB4 zT!ZtW(MADMcFRHhlYsOx1+UR^0E4rr{mB+?Qr7M9*QapC&{4E!D1aurPB!QnYcof~ zA<`xGrrpi=ed8dSw20q4V{lgC1eg<(2Ycs7HRvVV#Z9JvL(09ijlfPnr@^9mxo{uC zaMSCVFx@B@UQ8nGtM(koB`wqDt--i!#C))&oqI3@;e&uhuwXpRCtn@Gqozw>-Zt_x zy7`gsbs4C0&yg}lL7g#5ocvXw=1L(k3P8;$Kw=btno)q{69KhP1Zg(`>fHo+mbZa= zmeQb?q`3;H=PC{QN;(5UeFiq@F_-Mz1AZIwp;!EB{IqT#n7$^z?SIbo{bR9X0lZQ! zumAitxBxnCT2kLj7EQ~Audh5P7j7xqxJ)_j$NYl(7--G8UoDoGvyI z_FcF&^>nR>B9af^pWoI~Sco-n{u;|1y`qF&n zrd%3KedQC5|Eqnv(mX|M+@=X1`$>f0U=&X^)!@w% zNuPGRNPPa}7ykZ8+L#?xV(g8t7`sXeVdXEx>hB*=`iyoHfj`B&gI?jQ(kw`M-2#^^ ze}Z0NSzxZGi++|5u(OZ_+NTXsdwM0#X_E!tEc#+XuQK%bE`f~lK{$7G5nAeJLC*(P zDEpR&HlHPsb73rgvZwgwo0LU+Xgc~G&cHCG1VW_?aK)ZW=y^v1=@u(-PUJaUv^@*b zGs(+kej3-_$bz!vJ5lCoj}r{CVP*DC4E30gTiazryYD;E>F78dNPe_2-n&t=+8Q@6 zp#6w^51I_Hz<~kTaQoms{L9Q*Uz1Jzoc);kup6#wl>?7!_G9ne9dMov%`}`3;9K2R zXmgS@OY#G#h|<6&w4*ePJAkpC|A{_!G6=kI0G~$Hh?hNNP;PV(9bR1*Rn%`j3O|UE zx+uPllEIHx2PrG_0_nqKFi6V-$Mz2whtYm;QkVz+Wn`Dq%<9ft51d@IShTRCbBT5k zHYWy%qn75vy;v`77ynbLt0109_#s>#dtO>iePzE{hp}a|KGMaMgGnA747ikNwb3IF zHjVPZ+_+^nlBzt=^z+5(NfkChtBAeX)(@i%+mpwk048tsLoVqj^ph7rT(BSd{g^KF zYeMfAZ@&ip=9sD5gcu*nhBolWFD-lpueWrb!x0>HK5MCTqKx@q) zyzGv`m$wSocH=0%JfIS`yONgyLmKpnu5IrMG2aR)3-}oR+e_{%cq&ZOq#O-t1pa%^ z3$v9M7H9Vk=q|f%csf=(0_ZC0i81=p*qs=y(sd zYIhL?o+IwWj(%*Pya*QPoty!%lahSF30Qc+f%>vy=+Gh&ebN@Qm9+b~@H!FS9$3j1*O0e5`W#lx-N3pHE`bZ0 z#Oj>BgSl)Wj!@uv4AI!nR$L*5&y@@05%6S{YfE9^<|LeR>k#w&KzyO~N!a9_5BqFJ z9)#A(4f@T0d(41W{!C-N3KkP^E^BNMn-iy^OxzUQwJwBJ)Tv;^TGGaZ9b?ajmVx)G zRNRvp&UQ>MBPQ)-)R+>LH;hX*^=zb~49&IQ@&{miB788*|Me)eTXgMKq-Ln7P6RHSdnMAg>| zOxjWfE2m5Fvvvxzd{_#5oU%}3`ei1M`^!@jiSKoltyoeDvu1L&_2shfgAWemf}dcA^L?luj?cBi84W^4lcs)AD%E>eI-0T zUxe0OU$CpyMR221iR%qsGyTOyP`s}MkJ!Cu>qvXHb3rMF_DccSqkDC0 z(rp#c_fv@)-?S-bsQ}LC(&7D37kd7o{NjKjjC$Px{Pg5-YJMSBe9?on*`yKbq#$;_ z0o9ChSP@y!pyq5=-Gy?E$jczf!zL|_AY4Iuyu&h-?&tw=)B|od%4u-@-&*u;``*MI zmqXY~j?RicFp=g<8|ZA-++YI7ugIZ-OYvRP{!|mmDPy`}%^7BA2Hsi<%A}Xz#{hFU zHi3NZ=9zeZmj%>DQ)Wt826|QwhP_G!q{pV?gIPmhe6j*&*k7gmy`gaOxPsmtS1`h5 zINWnmz)Ppp2KDF4uOq;_p91<@q%^qa-@0^6q7@8Hr+U&Txj~KEyOjXl-APjveF1fo z7(}d<17Aj-pjNiD=cEjmCBzXLYX@#L6S&aqY=i5m4@bf2+?|a97O2@-NZtfcdlQg!GN9JUAno`-z2igL z@qv2Bhtzk2y6?s=Z^*L^lo1oSw*E}WPR)nCuU6Ne3CrkxG`Fcc``g#IUzrEnpYLqY zoBz89oV|7#pI=41qqL!{E^!HW8<$T#)ezQ4wU`$h|MeUVX4YL7@x^B;pKgwMgBo({ z$NBuLH8J=4^kYTqNRwlp2kv@(X*WBUyPnL2&x3li7QJV4z5O!E%Q0e)M$P0t#E(7d z)QM@Ho6bL*Q8wHf9o98v3ZLzh4RhMGU{fq7@)-YY82{vl@SxFnu0z_J+igAwUqi?6 z2-4g1_kJW;U$EmZ-x7Q6X}K`%J>z>aIqVyu5Ugx%_y!9OFO8+b*36N7j2}{V)g|Fj z*I~T1N`%z=vBK(|gZZXbA`A@h6_(B$$fFffh#$9181tCJZ@6JbnUxJ|*?9{eq_RqqaKV>6Cw%VMf6XI>vI**CWfx4DOukJeiHZ#_9< zr~xl@rQA$mll0Nv&irK*2Tk9&2KP)b(B~0TC{M)rmegWQC;n58AZ^)R9MrZ0-<(34 z84Fu+)RK05Z5;9CZY&pDKG)&tq^oIa$fH! z`kFqcCyDEATJl#^mv%gIRs8j(8K=1y)cNF!{-n>pPMKv>&C5lvR1N-NDtRa-SBndx ze`EPY^82rSE5^2~qupB;ES>jT{M?}y(*m>L)#aAB&+ru*k!B`fyDldFe2i0R2XQpg z5ZzDRCw_zk%&E={QQX3=DH6D5H3;*QRA?wlKsD7GiOGRopGx4&@v)dqvqFEWCwKjv zMj2-!K8lu5&$s{=_RK&PN}z-0N_0Jyg2q&@TD;kW{f3{z;P5Qy8n_cHJY(^F7b&Fl zK7a$0s7EDM{EUMAIQC8m4$v0CiS5TZwE?)rM}&xP`>^{iU%b?avR&NwVR^4Z_|^#_ zB6}|;1Rub;#R#<%_Mlh9Zt}s>j_K#_26LNJ8tX8KdX}9fyXk$m9NQ>q_w;xdNBRsPmq~nN9~WJaHhNbjqf_)dT&e z^+h8ha_H~!#0$1vQHOdfCFxt-@3u#W-Z^mC;SdgWY*nA5Q8()l`KKFWcrtl*3=iQ* zty)oXHwRuEA`MKZN1|^x;w@Vo#+d3daRYHUzq~t)ZnY?Oog)Kfdv828E=hD-DkE0L zVVrs}TrAungV@!Fap0c=qFI;>zA6vnS(CY9Dfx+_w|b-T8dEW?2eF#L2Tk0+N`q*h zVtLL7<6EAS8i~1(VB?GCE^VZGw{zhg_25tYAF$qFp9g)b{mF~G#m2Upylk@qFl1(# z%|O~CYtvqMQ}4Edo;Gnj-Ur~(cgDi1-39QjS0MWNOcjEu|NR{u*q{b>%-SY=`$T%z zXO!JA|A?TXz4ou1Anf1%xX^=ql&&j-G4@unkW1O_^Jayj(STfG{5%Cr3qOXk>HI=yH6^aW^}F6J*fOebw|Au` zZ*yA~H@65JdY#5@3Hq$j(IOcB;0$KJpx(H&2=W#t;JC&8nW>!;l9CfCqtcRXI7GVT zHRo_doE1A;ri7--bJ+im9s6`&37xl{$8JL=vvYMyknr$n zlr%hhQ}EToLu~8GQrKUaf@wW{neLNP`Zv9VL#7;IiKH7}JdM1uJA#-%yNT;RQ_15W z!pz>Os3*FN34OwtW#=-m(M`kj{Sj=gV;Qu_xJrJ6NH%{)87NFL8eG4;GKQ5mEu$>< zYZ$yMj+H!7!JY$|q%n?XQ?pgDdVvIwE<3}vyQ;wDNf!QUcaDvitb*r1rPyR?5}RtS zf@MRIw6!Vh$=6a?n#9pD_6i$Jzw_0>IhdB5&K_2h4(GlMJ)<%yQ>qkPC+6YN15%bw zUi8sGC#c}vDZHkE*3J9+*4(L6q%SobbC=Ds`m z=JMd$yv_CR$F(=}z_-g5M(FwzfjwSIt+ zet@g>1B|q|T&=}rq{ZcGEiNM;C0F|>8Tlx=+DFNV{leAk7xGNIQl4@>`-KscjjNe# zjF@a(&17T5jpu4^JR?>-SF_?7G32>AcZ^Z)7+2?xG0I!#>b!MEdFx!Ax8C4>`@3s+ z>wYv-{VUz;VQC zZc?@%9Uu_r4-p}(#FL(JUo^?2obIlk7#w^E^-SsgXyt)+w+~IA4CJ+-MH@$ z!ryC-Ufb}U8;AJ4E54Js!OILcvjUV752X~!l?r0-XENCjVrt3c=<<*=+2m64 zQ5WIq&bcgs__1%k6=B)U0`{K1pS~eVjN7VWF~rO5>05|Si*K;T1B$`wMG^TvZnI-F z!~gbKiECF9OFB;pQ}j#FWcedDB|!;^c_rA#_9-i-+5Td`QvBG3Jm!6ska|XiQr9;u z`gsw|dtQcncYR`0D+}S|lnT7K{2N=fq!7M4R$%3iU&N+Sz|%1m_}ote){av^;j`-) zlid^)lsTI}@;Wx{){@Q@IZRknjuVEphAq?O#Az?X=nLBQUhKS9Dm?3?OIfD06K`CK zB|SS(4u%{IrWd0V=t0kOa(KS6h`hs{Vb)W+Cs2WNTXcc;bZ*amS%CkmKYG8p8?3k? z2k*-K2K~{|Ha(!rJ2||1lZTJS_5y>>3MlWHi{?}N!1q=P@>1oX&39wiNPm7zUN$aX z*AISD_CX2b=u|QQ?9CP6N?r_)?*r@S>bLx*$Vvwhn2+Y_}m91Q1j6i|ISvq66p zBDaJpxq`G4*GMNY6vC4fAbpwMpjSE=Fbv!r74WXlRRrr1Ak$MomGu>zR6COTGx9`) zrc##i|L=)Dd)YwL5;@E&NWnQK3`%y$NlTWDmD7Q=FyupVPHNEmY}jB6#-uyi?Q$NI z%}3F$kMs$f6S3*JG0^!>9z`wG!-<7>#MjP zhaOYyNmE1b{TH$LEp8S}e<}mJHZi30oC_E4kgoVzByLJw04E;E;Mp!cX&HCq5ef~4jbaAz&i;+KqtNjs-JP};&XJ^FS;%e>|BL*f{GcXzDaqypp z^?4kO@*KH3&#}R|`h3%7?tPp*JF9G2oXsZgaI^rv_5gO{!+P#X=VzN&)-1ZoIzGgs zfM(Id*(`@O+>y@Pgq}lLPUqFUs55a;y$4Z_#!9|{GF+DHn2{f0Ip0q^&216p%-zR{ z`_hhkNZbAm&d-1QxPNy9|IYl+Q?4R=CBh)n<3dH*HxY4s_aud%Zb z^T3RE+$x2rh=Iby{rz|n`DZVG`D)Wj?8_7XNC9R=*&M6w#n+q`;Z8{#n}7SAe|ww? zm-{&JkOZ814MNu97M@)qfo~nHakx(*CMN!0&42NDE`D*8fT`wutgV#Njz?rTrn_}^N*XHGp`4=-%H%?V%iq}_qN z7iqK>;OBha#?ZaqHBzt>Awijka4@VC#%D>=; z@LJ#iVi0G8(MtLqQhQF1% z1is{ldMBR9&ViNahiw);5MT9?!SQ4MXy8*O{vIy_?fd@N&p%oGttEpaF-LIZ(r{6u zvkdUW5mcQzC>jtu=&wFgIdGmh!dV91U;Xh@Vx4pid3()z9l_fJ!ljI69l1IIs3^Ug z<#IlkxUqr6@kq2DXpjfrql2(yhnLOYo&MUrN73|E8=;9RpU$aZ)RUSB>E;DcE`;Dm z>#4$);RT>o6N0^5T!l?k|Lf@NPyXR4q@`u|Of zBhhn0fpGSg9QO2$#*Y{72t#NdwOcn9zm&cZj?#R)zeOCen!X4r#MqB3I@zF}kAB*i zp-4RZWv3~#yA_)ZSwkOT^L1NuE z^S(@4KM$tuO!Wh?A4eJ=V!>C4w{!Fg?Oyy@H0j=(-ynUFV-TxZpn{TlX?RN>!j_#? zfqeB%z6yUGbWo*KkVyJmmjM{ZK*iiRk zSlzu8V@}^;srJRNZ>tKAUA<3p@?u!CstotUJYp~D?>wbQAbxoI4PxtlV1et3VD{7Uu>=t$# z_KkVBF9P1L68k0mVlSiU`_r=$3+HJ-;x7e!yL$__Z)*xycGI5y`Yk+oqy=OcD3Yb($pye;52IarJ>$DWq$p-%~YZ$f8O?h$8`ee34;X`WkrqIHael|cxtl9zO!&bo7emU65 zb0BnDs~~SvHhyv#1YLs^5Hpz59C9$MA*Q;Kk8DG_#{D9wi-FOqPy(HKbUkq@TA1-un7 z4&?jEBOiVatEW$dGg*{PJShSDR!;#J^722eJ&oFNGvLHM84OQ|$E)8QVDJmdC7F2w zE3@aoikp-%I-Pb{cjv>XNICny0#ql-zJ@E zRv0##$y({HMQ) z>irRWacU_~r>v9n(f!$)fh)KWO>A&IW47eABR8SGIMb&evG$koXsdkiUD$^m{;`OQ zv+`iyqdu%r(Gq?kA`i@rd$5@M3wXt#Jg~0m&MeQ++<0^zH1g}hQWnhT{`Yc$G{Q`) zW+6}3C;eEM0qgN{E?@qMc-JGkuyC6NTz?U1bhGs6`J2rhh#j%^eS7A$XC8k>y87yl zx-7VOCJ)|0Jc^60*^7I#`N_&0n3>*^?bn^b&)m%hr=HE&j+qYJU>arMrZi^G`BV7n zo!QXy*B3$Fb_Q>BF`ImapM~4UC-R$gy|&+Lq1VSL{0F^fQ{$frhlY>m5%$@T6HqO< zy_?8QM`Z)+aaZVkWDHMfnN4#Em5@JTJdf1MhRrWZgjwh8xJM2Ly-5Xv|H(1@ENSLv zZO#>{o-w|D9x-8BNCaKF$9W{pqQ_kmY8Kk?hcuh5nVTfMtYrN2ZDO9!I4{_G+VH89 zDaR)~Mp&_QBtK$Dwb@EPA?LzSet(ga81Act9ljRaQcnse49ta|d1m}1`B02I)!FC{ z>BmiXN#W(hNE^?6eR&yaA-Z4Hw3+YIgQw~d_GHIBN%)0c{KH`pP6d9GXy_Ypm#y`> zdTH!|9^8nSDpxxjOZV^X!V~^_RhoHAue37ak;@UZSB6NhKQZ8EmvhRa%9ge%>cUSy zA`Xnt1L?9Ko%w)q9NMP5miD=9$bZh{aPy6Z`0xE&o%MO&Y9#hfXR*st1AeUqhhN`& zh-R*x_&aKi7T+5u8u;k*C%0(sdUKjMVQmNAq?EWcE!K&x#7_KX8G^IEt7w+mj@zE3 zd{TXHG4E{$?*4#yp7sHv&bYRG>T!hfmyx2@i1vKKeT3bsQTC(eGSSVgb<(!v2ex()SP65u-lVtPyTq(U{w! z6h5N{nn4}9#$`dr&8;x9%^%c%nFXf1Thnu0i?=#wK@Vj+s(I@0=`!-YPV9i;Nw1K- zl)#pCUGV@TuR*m0+`o3i2i>0FD5{_574)SHqt|Fdv-k6@P0-Bo2`0NpAU@mzYbW1F zd&(MHM7)~rJ5`jEA%U}*V@Y3n6O+0~h-om6&S4eROcGGW&!G2mA+EQPKsVVudX>n~ zZL9?NEn>oNmg1Y$l6wBhokdr1jF$u+{^v$K(Tn7bmr#AUAHPjX#LbPfK&P)4cT?io6vgeetjV{6Ykh2gir97f0dfCkT2Hx}Go$-DoD?|10^ciu$3~ zRmx%C;fE=gy5nw_Z1DE*Cx&xpJV89M*Np?PN3brw9g_p`H)zhhqBR<=&VfsRd~r%% zYw|tjz|H1?n3>ZEMXIHJmIdP0$*)CrDF@!j0`chEd*Utw;%C|hA$cFg6MD1<)IEw5 zesFQj5E-=VbOa}6W{DP*d+0bY7>UgxCee(2m2(KOyQ4+7zB0IO5P}*ryu`5PGRS7Z zXxd|**qSsd^ET5Cv2j1qc!mr{D}yn-(NF1x1u`hS6pZ&i8H+s6hd10t5{=T2)%Y(^7{?B|AHobRWy znPQL+r4Gl)x6ww(J(y3LieorBz)Z-ep0VSjFx;|srjS~f52q7|gJ<9_$m}Tt^hG2s zi-LvOrweEn9gTOr&I&u56AQvV78_Y-2!Hb>y_&^gNJ6pTMJx#WsVC7p=7A6~m1ZE@ zPGOT??}ZU}6absf5O?;MVDCjF3aKKpU2`>8}ptJZiUV$1bE4 z(d>qJfE5O;ITk?}y~mec=*==aDZ#lq8F%~`z+%0W;9{SG&CXh~FYlBvc=jcn*3XK4 z>Re1*@k=nL zcOfgjQA~cQD=62Y8G9>Y?9WQWxHV<{2lG$yl^Y2F#U}}d{CL5}P7O&-~X?c~sC2frBghKqc zp0~2S#!iu6SlnEMj!qJGW`GKO+?4q5^*lF`J$qS7HBbrVU1YPki=~kNrv&G=%w;$F zl|qeMDY8CtrkPLz#JIt(Ta?U|^v|s$%828%kE=Nq4Q4gO9^`8FAR|UPS2NNX<&|)C zUJ0Y@RIbiWWmD{T@NIi2UuGzEBSQ)|{|=N5Wj5M$)o$Of~Tcg-p1^k4xb z8jc`s%LeXAUUlnPmdvDL9Y4FG05*qMu*LV*@Vk`d`YP3oy-Z)t{i)}@)6OZUX1AjkrwPuz5{jAokGG*OxA(b?!Ev=$({bns;E^(+TDeLD*^a8=;7HMDa zM5EJ7530ioVCltJ9CkF4_}vAt;cgtd4onhmb(O>f1g1^4o)t@uVC#9h@bQ0^Zs2G0crx8nR7W4BihW|!i z#q;kMvG8ZbVAzlJT4SBqFryNfHYTIN*|M-=9m_GGogMLxTG+X=f;Hsry>ShrBKENn zw<)*%N+#xAJ;*wl({9U*Sg-TF*fP?m9S@hFDBFsT%d^pWB`t8i8xrXt28VwP4EYo4VdZX}{ti&!>8qm1_B4bKF_ z8^_t*L1mEeItTwfH$3W2uv=Zqz%DBn|Gj6;*;DMse=6u6mXARe2`naGMfw;yhN;f8 z+w|Yk^;6*Q$HsVq841>GJf@v`Stw)VIRB7PKOk8RhO70nr>&q}ZZ z%VHZ3sz`gL!j?}(R=SQj0LRNP>J4WD8>@iRcU4%D%N8y!1-paSi3KiaKdWhnQdogz zuavBV8|936+`uChWo!Y>Smc>Ev6FrkGw>@W-){weeQ}?;PcDY8&ngm3MIC zCr!AsLjjLZ-^NQCTJXt10j7N`(ea=T^yx_&&T%*Y=RD!d(soc*MxKI66%FPL1&2FA z9qG+H#c~YUtPgEzSAKm+88#ni2zqT45G0o3qtRW#!$LthkU_yn z8Qh@G;6}=S1ap5uhXsUXH!J*NVRQ$hJ5^_+_O zcY#`KTK_Ikd*PW=kULj%eHrDFaCI&Tql_@F&In_aSI*UW<;>2fAaE-`_MreSdRR7iF9(-wri=#4-#Ks28g1Xm^GP>S zV>5u=DPGS_7Z-p@g$bMJv6e5Ucd_Q_-gM@<@H521+V;K&3vaZV|E+s~4+?9~(vJGf*BMW~}pT$Dm5XcK8UnPOA@FnB80obNiA;acc~&SxuhtGoe&JhvKa{Qb;>W*(?@8Sbj+giZQ{M66ue1 zh9dQDL1>ZgjVjuMe0dkxpswh>)DvYhMEFCj&GHxfaJsDsvE~6Zli!Nwej-dfa0C}P ztwr~2nkSU{OlID|5@n$IO49g z_n}xpo_e=Yfw=mZDUPN+$aVtFI85FTXgG_1IIFt z;?m?+^_dIS=YuKpu@U+i=0KyFA$axsEAelBanp+-_}KD}I9{FuKkY*?H&!Wb=|I^f z5yyxHl_|D0l7VICFtna?PSoE;8ETR+eD?g1IPX~wXl93F&BA%&l4#7f=)f;&Q186sqhRGWhqod=)uhYs1kcaY`Tm$}(4F&G zXmiwo`_R8#b@f9*&txjcN!bwVd`s{hIfIuk%!Z%m$_1O%lX!XaZ0K{WP%zw2_n2qH zn!&lkMW^xn4RMd7UZPM_GKt5hbK>DhgdB~rylgx%C`zsfbq~h#V=Fo3kR}N`9^3I_ z*N6w(jRt$ALn-PD6RGFIg}#^M{Rf%^-fHHj9|{5jGRnnDMcH{h>8A z);FU1@}CcBpZIHDR$QZgyxlq}1e641=@#@Nc8v(z!pBIbW%lK$ON`>#i==nLdhok- zB2=D?l485wJS33*yKj=D@Vgs7=1e&?*)K^?*Mn!=5Mf%YkJ5W)UAcQZ4%wwzVpK09 zzVQHp*L6K{(6rU127EWoA>V546Ia!C;$?j~SS$<{uQ=-Sayw4D#bB{}zm9w` z%`hETof7S(op>M8$%M~2B?c^N&y5Fh(3*KkJlnS;$9N9Tid512Yg@ixAZc-Dqd0t6 zd(NFWYc?`%1EX2`|1f-W!G$l=J2}3xn>sis@ z{)K&8^EZ^?axn3(*nE%{e@=eeUi^WWmeP`+(m>Mfyb*gFx8}uKNLIC9#S%__5<6w13wO{RcGTvl68+^*|e3pZ^r1yC)%gfq2?b6xYc$;uJZ@i9>@aO)}d&KLou4> zsB-gA+}h6+Pi7$)(Pux0u9&)>!w(jU!!C8i_9ofj5)j(p%=gLA#+{T|@1b|B!TB#c z-4eUs%%(as48v`Hi>W*t95lo6Rnc=Xr&|uVy$Q$5A8(1y{yDHu9)UX13h~W-I@^ge zt$3RuzWpx;ruU3$@Gc1bmLNt9k->iVC_L3PR&=Aix$)s}`a6gcXLpo=)_3A&tn?D? z?-A#uZwyY0TqtIx=fK3u7!2QJB0iw^&Y%x5*sk46X~g#&2v3g1QKh@3H{6NWcj-7v z=O$-;`XvK%uQ+@ca>}}LT`pAX#bH+3GMhETJL+S79E&xptb2Lp!dTMYJbonFtZJPH zx{qV2zt<9`lg7SfqvO~*!$uf^dE}Klj&plB3tvc|ANM>C#Uvl0e-qpirP)N@g9*X3@=$nX@gYO8%OBM9&pKoxzN%(W&eb++B z%um8n%P+!s@^rVFco82;8nfU1iokp(&C@JfvXf#F?KO!jOMQ1uGbM~GrM$w9?O8VM z&^ye(LRln+?5d%Xe70%y=l5X~HW17AeHxbUG-I+mO3K{4iU*chvROvO&`6%%;PZLY zk!)DcV$ffj(ct=s({?O}`t;tdui>fzlUNPS00S;v!=-Z_*!J1Q5Zsh_S?w0HE)m6$ zGba<%wmGx)zlvd-tps&9u4mk&1m2Zr;i3RnHgazX>{3Y4*mED#{zlx4AQ2rF9%RFZ zmcq6%#PT)tVp~^~f(A$2HN%_rCY|lLWgHEL__Jel-K}3X>c0wN;9m-f-N;M+IF!Xx zevPX%hwAVs_WpN?I#ty@hL^s>8s43S_Q)jRk--qH8%F93Yxqw!^}ofreCIlMn|q=vOY5DWfe@w zslZb^vzfv~1&XmZajZuk^Uf-T)8B95l?pj4qyOK#ez$RR_hNSZY6Y=%d#U7vRpj z0*Jtj20isRDT9`?3t&{MbevH@41r7ekd~5$=gddLZpyw{RelB62aN?UV)o8Ca2Y2z zp8&1j(2l!vDvld98N4Zfu!N=HyrOAvHSa4D91!> zdvP8Z9+1H`o3pt6!b14Vm1@!IG%h;t2)h!9F;#gI|MXZ!doUR&GU9M@@e0a7m%$WS zEWXuR31dIYAlxtp!+H^i`4R1CY9euo`x+>@AcK!h!qLo)^ooI`mFg6VtNLw%K>8h) ztvibA3%5}Ikqk5}DR=J3c6fJ1Mm)VEp96tOh`~OA+hwlJE)nE z^*yzkwNn3C?ftLs9n>6V_IK8*&d_0$wawL8+bqA)UjBD46X|Kq-j(m>8!X8OVK9QN zFWSlX5>Na3pTX?sBUiq&mmD@$m^bLDvs>=qE>^?|FEnFKc5mZ)I&$i#`m=%=Tlj@5 z1z`2um<16ZGCHLIe1+a@;JFRF^QHpmG^htNT)B?d%_soB8C}@R*fm@r-T3*B`oxD^ z&HECcXV!2%mfd6(e_u%R6P@-fc}fH}CvW&A(o0+@j=|uCSzzZLi4K=Tv4ncnUpWz^ z?LUg+H%lomEF6Qk9l;i~*ABD~BQ}u_?F9ek71Dg8&=af9OQEYWgmSUnaq(#>F+4+X z!N;u_c}oiJKZ3E(%Qg6f{PMY`A-Ji`5evJB&}B&oR-V4gN~f1VlUDc9{812dK3fV` zKICJ@GJnR%JCMB~AG>*nvQDI5T4Y5mk$`a4o^~_~(+h~XUCl<&nU>J!0nY6Igt-t~ zNq(RjUvGZSo;VXjwbMgPy6}pf?_UC&XljTL-m>Paib2uhK5n;p$KqR-K+K_snDDxm zc}j`R;`|6Vm3(GXj!-t4-y@vb;TyB+Q4G509^w8^pV|BzCB)5sfQIIz%??q*_1QJ} zwUGv_ZmtBkj2e`kX#&mTieO`A4W6uP2FJ{bVC0?})Zf(-TAeH;R`4U#b8k&v&qCOj zSB;ex+K}C>5H>A(fF{@4f_Du0#HZdzd2M@GGllftM)%O>b|;9PMC_(sRVW_m3?HT` zAl~sd-hX3A`Y#1EeR>NQw(JJC<|)AQ(+!kN?GB^qtb6|ZI;L0lguHT^t@)N?aErc> zbxjUmp$xBFF#)X~a+tGUg%8{Jr~F@meX!~_2 zxYMjMzaS6)JrB3=;Sj8(OtBalK3q8xL_cEDmu2JgYAdK7LVB&Qi2D!Nz|zzL+P9Jp ziZM81S^!}?v+&R+Td4HHxMb43)Goh^c?L0H6Q*j7Z=oA-1;+3&6TP@ z)6^L;?D8jPzREctGKcH1AKRSxC>7<)ziY#8j9tzZ#>9?ZrpZQ{E+u|uF8K$VvG}o$ zyg$uX546-^i#smjwc}*KYd;Gsr_AR{Ne;+wz7T?+&*5P`DMzgKo*>V1;I3=3L1$dC zF#OC6K4WM$lsSsRpYGFm-8T*<$FB&}Z6@QyI9J1fNPn7~a;s1JP=BTU*mmj7CV zG|xFI3^EA*DeTnPA?^I6FJJjt3Qd!< zrFjv(>op`>9GZxCUiaVuq%(O|)Lo1@Y{d1JA)FMg#KhlSc@+KgwEH?w?9#gnozDmx zPwb}vD+AuTC1oyO4;3X7_4$1AtqlKhszINwyQLFXgi>Cu;T3U@R!9Cify1a2;)4HZ z$2HGzSW;dhW=+uLQ>ZUnb>Nnm6QINY`XX1kKNJJDYw>cL;|-quL3}=0#i=O;Ow{cmp zVQN1dVOEFJZcvY@I~2DE)S}ffVvJZYe5(B#+gMA$^1(PfUiKKv8%voO!_^XaSuXdtbJlYc%X2Q`i#7=Lbz$cZNG$+}CGj(#XO-Uwv>#!ejnuPq} znb6h93k}KJ)}uHR+)R9NUv3hH{QcRAKy3B#EY6uIffs|1;fFORaXanWV6n8#6S^Y`t}I4(;158^gX$q9)V(j3GwRb`_n8E>xOm3 z)ud%wpcRQ}n>*mNT^z=mMxy;dEnH4B&ufjNP+Z>}?Z#!p*=tcatLD4dhqx#Pccbz7 zqbK6-Y~pS1jlt0Po8ocEfoml(IAdgiXuB>46uV<_dPMTzn%jDP27|}cEQt5;{&6O!v5QN^emsDTu6Um@SJ=Y|MV%gT84f@m5=N<@oI~8#MSTg?GpW1(Z zEp)ange{#@(E8zbVb0A$%8p4zjj2u9d;cOxnt2)1Kec4-NL$ix>lLhx(PC4l(f&6r z4fl^}&lXT-&>u*rTGx=-m?`1dfDFut>cb{4An(e`5_EIWxJ07$%O0L%cSysqIRj6OBhVn!2*%OG`*|oQ)eS+*wso3DiBx##SB& zS#AGPpxj?v)6t7{5K6(oHy2ND_GUh#OToiC4;SZ0v12hRs49@-n?c8!lo*u(&lG6u zd4ictCXpo}R+uih8foYrNu z4^`o|L1_ zgQZVy;;HAz;1B6Z>?#{vPxQ@UPt#QpJ>m|Eo%7kAu`2L7R)yQr6|9c*fbw0$H`&Ru?cL& zyM5d$NDdlx!akj=cRkl2-tyRwS|H}XF_ z3uyPM&o<9q&xg5^wyIr67U#OQ-UrldeLEHqi&ci}#tTMEmaX&1Df zJTOL5SlcfeZx8gM{90lKS4W~*bNBiT?r&2mo1k_J$|p&omiCF0_PSs??YTlWMPiPT zBYEMZP)swZQ{5l3tPiBUSz3egwn1!uHsu1WE5h?S{>(L=*raYn7~CwBX?~;Y_C+`; zDx9)aXz%~4h(9ih$dh@SP3;3o}wUWMqIig%Bg>f!wOrFKBWlmEP6^=x~-rv zxe%JKc!KY@XhG%FLdeyAjK`O>h3_AzzSXWl4btr&sZhYzmk;sKs|wE7R;Qp;{9OFeAf_>3kr0O8bcZrV)N>!-~$hR=suHj(+ZPX zoHwtZmnM&eN2T=pXC}3H{gmC~X|^3lddLJ^*J~o|B`@TrCGq&J*JOyM_qORpEc!m4 z0x{2G;d5y;ewaHAREP(t`7;vNXBxnYH!*P9Bm!MffK!GsP;Dp2*582UG|}L%!|}Gs zO!zW68YFi_j5{_PdQx47i)5(tVlD`siEVx_3{9iv!&TZZ`&&pbsl#G;OnUp%YQd-+ zwG8@NM!>i=L8vo+73H5$-Fqbf-FvM4SNE1F`=ey-ddS&8J$`#%ywiRYoTPnRRIL|r z7`8y~YqTp@e~Hz7w?hYFNS3dbZx|_YkM`HwRl8Ww?KHz$Fcb;UTe2gh%&q zQmGYqz6d8)xjlB>cN`QU;m}Tc8!6M4*fsw$ZU5#ZQa;qboWy^1^8d?^_;>yPc=G@5 zU6)qGLc6omnPJmT{&;6J^dG9il1`ZNkHm*Rlh~HMTDyZ!t)Z-z2d&som2KQ^O(cA~ z{7pF8eG9)F8UeRE)(Y-!8~JJSe|@}ABpAi6gYDwCg25`{%)g`jnv=0Y@Q79X zDdi#F7!o3U7`mLFGL*y8DlcJ}?-G79iNp3i&O(0tLSD6=SSugy39Wz5 zP!~IgdwmoE^G^v2*UjXiv_}r?yisU39C&dg_4wz<3%6tj+;P4PI+ZF3=~JfgQi&AO z%H0fWhfLtrUQ&pC>S^HcQlBfemcg{6Qt3!js+sBa@AJ;doF@(E+B65~);V1^Y=#~W z8zs^_Q%$`4Z7@IV^tbLBDh^yZkdMd_;nw`QV%v`WIn8e2{;TccDJ31=*PL|brf0mH{yUcXMc`79@6YHDzagl4y<{LA%`ztiN><%w8IS z^XDIAMoP)B*d>yfct_c>ZOQOdJDM^`ZQ1x2q(SN*gU>C`u?56u{;d~_1~C`dt2-$W z_$dze?z+q(ol@X_2YTiZk(F@65ux5i+*bSOF=T*?8$2C-$xadKBfLr$q$2 z*-t^NkM|hznx4xcsi3Eyho{5hS&?xnjC!4qONOMd4=Sm!I=2whJ<{1?PBqE?A{_3M z#g3jyflUXC@y+pEX6}^&Q9&gb{I-CdB;9Q2)Y5;S^Mrk|q^}Uz%;UD4W}ncOjbV$Q z*znG);)pFXf(;&aihHl2dsoE}HvQR2u0}qrxdR8YK`zHB4<(K?MXpU8NW); z=)5hR*+&m*ptOni6|dUjx!m{WUVbbi8tSGfvz<-5`5BsRt~}YAHQ$F`^zF_AE>mrP zG+9)3RpGu88C+Y{6NgN0!z(UH!614#W#0bAQ>s!>Nu7Y>yqd5p>GMzZV_4to6E31X z-5&F~c>Qf9&g>9Iy5(gkMikK!EffyKtix5m-r-N5P?&Sh1P!~t!H~>Q(l(gk>IFzBNpFSg+k&RTkN?(jz8Cj(!BdTZVn5@WrspR-Rdefx&-0!#i7vI(+>a6 z-84y)zhbKkv34l`G9(PFom_B+>0O*jyHRfo7d$iQHVXApm`djvqi%y^35 zT{n?;KnC&VPsz`|3boT^aB2Kg%(z(0j9;Ws{alLqb_;R+7a5rSe1abwr{m4mBD7I| zisp%Ws1iUqVtG&Sl7}{WuRwq)PjQS{H+)q}yYk~t@tAc-)Vst%Me!7GDl4NbnSa7 z_cLzTuE|YI@eGG88E$yb$zEJV&xL(7hv~h~R{WDnS=;0_t4drU_N)nqt?}+SC`?bZ zREmIMgNSX|rA*dAgLGnZJn%@!K3T>EVo~n$K-m#{=@|V;a0~Eg(Q_p>PBN5kp`2Mw z@<0#ahF9o1^{gk3?4%)#BaPP4QRH{KG)u7f6$w3ly+FGNOCgM&5y6xty06PEL1!HC z!K%G5!`V}CDvSo79zHl&S0n>o46HHo#nVsIgc-zSOAPbF;wy#1SK2|;yZhtZj`f1H zOFZm*8_=S+`nLa{G&&Hv}PRMhlvU^+`vq0d4E z8frdb3GS&dz)nHmizjSXX9aZVo`z5D%UIn_%1#|xisy$_u~Co${kN9l=h7OM-6@55 z=5(L*`NWibli}I2G8|Lb$QID<@=d#PG&20oTxk9rJ*6Dq+Wlh3LXu#~<8r+CrxmQ6 znFOVqE6|qa#-7EAaJy3_?F5zKg?l2{?y1CsXH}qA>qKINR?H*MiL>y@{-($X^F4R)iTQX^A z=LYJ5%?;A5UM8LGhhfwwkyf@K3$;d#gxpVY5Z(JN&Ly7q^@Z_}29`vWY$n9u^Nj52v-LnQN`a!dcp>Nv0`Cdo~W7B1p4Zk%GT2O@LDyD8E2XGivim zP(-ut;@^q*vvM-n7sZmME&-38oeDZ;v83aQ!-%m4knx>*K;szPrX_&wQpzSEAMT~= z0OMk)zau_LO8yMUrI}}{G#vGsX2Edcb@(Yb<*>|!DNCZD-CV?1O7n^5M~seO8BXo6 z2#hKt;LEiz>{-1O9M(oarjZ2Y0W0CtE@IdY2&SBoHT1cTfS}{Au*PN`oF~rS#N&Zj zyLBUUxf}rpNBR>ZeKT~UInYUN8bTeO3`M-edOpeM?!OyIt+<;UKH9|5pS5 zzufSD*Z(hv^k1FONc#nEgGua&-fljSd{3r-{uA^r@8m`HQQ-6Zt8m=dgzt$YmbFc- zuu*9{H=9VD-VG&!+50Wr)roosmG^?qq)q&Kb~yZ=qYxfUSkEPE!pWBrA^Orpoa*0?1+CxwI5@wV`F@FK3P#bJHsB|&+@ zeC{%zczyei3RBbPaOEo^%|?uck;7;5dvD0Ud1#Wb(3kw7D`iktr6SlaGT;M}q;SgK z!%#PVGS{Q$m^* zUIt(Cdy0(`J?^oUX2omAi<1m>`3QFrc9|>_XUGQf$Dc*ebTbos9Hx3$4`EdLc`>Jh z4o^2j7`gp{I9gkq?`t5g^*2wkd}43@n6j4UguW8jn`-ilUL4jH$i>APJ$dyS4hIfJ zh-t?(c`MR!weFE38n^1k+aKl7=~#}q{AqWtL9f}4x#Ew98oaL(hluzxMR^Sdg%{;CWfB@D!3ZDp=gBn9o+BTyLLhX0r&g?*hT;;x2YXj2phYqm4I z%9?QXr7)15nv3mr)uUhgFk(V3!G_ujoG*rgWxzV@H%Q@s|-b@zM=5E zJ!y5Vys^NO=F*aTI8Q4G`wtF<1vU35-`)fDM}(1Xk6D@3^5)g2Q_$<@%FaH|E+Fd?!l zE+akO#Oh}lZr6cWg&gk9cgJN>ZSbHChuQibn6>1KSeVUW^luN$3@s8*j*=5^_c@lR zr-^x_=~@=~9IKDWMT1{*cru;1d8-3OgH_?M!O;^fxSROKDjcp7Pj8*8y;yveJl$J8 z$(v~{4z{M(Z16-UwaftJZ7vVL!=zYc$a3#`p#A(ZoL z`uhcb|8`z_I+L{VJ71Ega_2O69>PCa0LbIke z^Iqe;=s!XpJ!hNl1mlpE%4}mFnpr&vLC2>Z*^ILZaN?!}!~1k)>)t1Tt!o%IuX!ds z>B)}iB|?&}NWQ{;OydAC36F4We*P|T2z%?D2wr#OEoz~6o}<~?ibROE3&)CmlbGY2 zB-nE+0-M)D@^#ZFhbRfM^dqrL&U6;KGzl($iNxmTz4tF*zO?(cejJ7OMy+6VmPv47 zYc%@Z-#|>dBxsx;gKaWR*pWv`FrX?1AMZHC%-+#_&nK2LL5?%QCK=o_kFFZ)Z(ybTSq=Xdk>p+XC=a-r7&lKo+D!IkE`)C)YeVlxeO6gd= zf_mrsq?@{*j_z~&_@bbGbfvJb%QCZQUQ%)a$5Auk#j?t!hz=7-QKl$&Gg+Ot0Zscq(Sc~3q#H> zT_V29;arS0ie!^EDxg>^zs0%1wHUUtodVu^7NFLf1ZGbxms0Bwm~5BIwx3A_zx&1L z?wrAH???sbm{Q6C&Spt-Q^EFPITj7bWhYjr!l1lztUFTh?|fr!w z-*Zz!pSQ&e#~->t=^Q@r)NI5;t70PAIF&5u4Ij@exu zX14eQ-wKpTv`w4I?jPgC9f8ANda}*utoWj+SWvyvojF7w;krktcW_l_Jj{ZZ>Jh^^ zwG(@gdx)pLkAXue?U_yQgFJ(Le+gPjtk(YkS0&$Zyx$+eN8HDa+QvZr&nDsIn7w@9 zk7#&ORWFS1RYnXY;y|vbK=T`RtZGIoC^AWN_1`si&xqy^n2z($*)t=HRA}Scr z;!37Z%*<9ti1aUhV#$>EdcM8_7v61T?HZF|vw9^S>+qd9o=qmcWhLGT{KaB5=(Czu ziOVLnhCyNyD*5IDZp$04FL;z+&@hS`BaGk5C?|Nxj1h92neE?^ZnF!G!GaBH`m9LCM^dStsV_- z$Kv6GZZ@$-#}M}@9QYvxXdh;PKZD^8~Tr73XzOe`!SMppB>I{Wc7fMUu8o0)){JPqM9Y01(c z9zT3!r2UD8AqGY1if#homfCwKWaS^-nHkVaxV?TSCGhI>>?=cSQfJII(c zkEA!Ve~mGFH_*MAa()K};roJ3)aOOO+#&uLG;1r^Sr8vDz^BD|^V<8yrtPqOQ3TDS zyjs-ZXTSuezYB+77b&N)Sxw&5W*5yQ!s+*V;;JcoDVIAO9z=Rz^E!Nk|9*fEa<~-! z41@O`gsKyA@U(D63O0a4Gvx5~fis53SW;Fby@o#_-_SAIwbC{1jKaE~gd2`>c>Urb z`EgDW3r!9SRR8%_;LaeLV|TiT?L=GnuSgCX4?Fz3hg@76NBK~rnSAgbet8GYzLGx* z_7=N%yj>I&wJsInhM4j_#3;x;|6b^ku$?zeiv-^%8G?MnRz8*bl!i?SLd>O2ylrqe zd?OihJJa<%bZR)%83qV5POaq+h~Y4Iy1Vewb`>|J_xvLNp-{49IWI5duwkp6V3z&MLgsM$QW^Y7oG7e+JA?P?OFpShDuSmO z<0d{*@+f*58a7Si1~;Y99bybT%_s9@(rh&D%#=n-#`7hwq_E+^1(_O|9SW(2Txwh- z8@qKB4e<`iyg8D^0+$k zksZ7w=9={9zUl}zb`Qmo!*w`ChC_0aw@4YEoKV{^y{AMhoza_@d?z-kG*axQ8ZasRsA+r}_4Xc6g^u zjTdboU(B7(=+?FiXEc+q>)jofFX_b7j#8aGTN}$K67z&+YY)B+!Zb3KBn#wgTR8&5 zJ}Yre4=D_GoQPu2Hhjl$DcBtZw2b?OKYhbU*EkpbE52gts4z$iT!Ie{)KTVrD0J+! z4wY6_;Gm14klC;U8{h-6GeSXDy&q!=b8w{)3dtKRalxDnnpcLxtXLbAv`xlkA0+g- zJ&z;y6JOw(1SXqbMde8x`)5cX$Nm;&T!vzDsf2oPVp&ig-gPzd${l-zzA|rYbv+dP zeMn0`i0a7asHZ8B4&o;MRy^4E0r7*VEgLJbtc#eE_-U%K!cGh9kJ12#82Rv}c z=3RI}AqD*|9w@o92~}px;Ph#C?EiW``Ya(0%uUkOk6eYPJIf#_;3Zn8F=CO+Xb1Wd zHLj1xqoNE7zP-fEvwFlSBfX;HCF*|cgMWLRvO6!a^;Zpi*%85Z|4a1j(;mergq}mZ zaO&pPIGflzS?|2?)ZI_wT7SytrR>Wl-w$G-h8%{adZUXhRlKl;vVB9msjlbZT7{hQ z!M!oO$X{GNJ{+E{CZ_a#cX2rN@+z}@X!deXwC@`Z(%0UY>0~XgRSE}_cyHPjFA|l< zQRdEXZ(ON7NK7%KpFQM*&;FFklBgy(PV^yt^#NI&g1irLKKRmcqO`~=0(z|Q#ZFd{ z21=Bz6K3j%liHXY_E;H7wnl%_(?%J-KS0`&)Bt?(qX&KeX|{PF5Qj{dFYK?T{8raM z+}!1)Fl|E{##}hGrdKp8E*7#Hw1Uc#YpLMhI%BW56&s7|%;H1e?jR z5FighL-%6g9O)0AI7;w$O@k2UK>EYcp?Gh2Yu0gFJQVOy?C?#Q)mG87OihZW6Fakz zVF}Q9Muux7J=ke!0?l&}ZQ}Z{Z{%4>J}Sp7?9VPFCBlBCh!*Fa4E0!YSt1C;&^R7H zhB<2`!IqRLwDO$9YVRh2Lvb|Txj&6H5r-rqHwFhSn!)r*>wbD@9M+6nz|^ghV8r)0 z@)fRNYtAKsVYdYQ@NmOF-}=aTiS)cPWh)%X2QeTC$LAhmJ&KdSrF$~%`cJU5yEOMJ zNyh%$PP4f~Qee7E3ZB|{j_U0cSadZNw;Eq$tKw7OyD2eyt*)>?{ZeU1OY_E~ZfwIn z1%y~<>mM@rDqyn^4v#{eVZ`PVCpyW(8PAc(ZNg)bovnvPRdIz!g zu?pxr^&OsX2xhYjsdkNehq`5b3$No-D);yJFe)u?m)Am8m#&nN9wC!83{t={ssoh| zW-~)#6qsJE#PzoC+3>y!7(T5Ee|IWipD1^A*fGjjepSToB&LFKLKPlZQ_5DHN(G<) zs{TH|Ab_4P7Y+XJS#}|r_;qzdnbsUzZaAKp@bx-Or|=Yam>LfTy|kG^V$J1L7wO*X z#Y`hl@WwM#FAdRTm$Q%YAkwm)i0H~fYOS~)dC%QPbzz+bS@M#nu^>C%f&Dl6Fb`M~ z3tsn?*dKp$Zb5l5@XyofD&0SE1qf@SOH_`TZ& z^qWPRJ$-LtjoM)Eu~JBy7(%{%yQ5efehk97w@!fEQkO zu4Il~QsKwYYGMo9v6IAwP->NhkK(Q~sROYh{ommCh4xHRN&Jf7EXqW<&w3D>!s<{q zX5=_B8ED1YT<jd2~nGgIP4_*;F%(nr6T1L;gsd(@!mveuAC zETHZuYVc@ITQE;Z0;T@7IDbq#@cqjX>Rg9q%I!h-eiFt3DN;=FmCKgVbiY|e=#UPL+`_&u3)vav9LvgVrC{70rwgFHnHY%55?UTY0Wk3czA z7n3n^J_Fu~m^>4b(0J8!_-RS^_S*@#)MqA0C}%eGP#pTNnFF~-QSe+j7WsgZcB^AcEkmoyK0;W#v8Iq7gB;KTvMiFK>MVG6Mv9i`YlX)W=+ zh_&@rf(}#G!&K5ak1KxNqR#JIxe;zrzQ#-lYEko#dA0@q?)W;G24M60|CekVOr|}c z>2p84qGAGx3<}8DE^@wi5!r%VGUUA8cOdPrJK^o`G`88}`C;WA?)^dpZ5@USOYW zGZ;La*n@XH@!|jr=-ZlV_-YSqP_?A2U^$d2x#M-$qjZ0gLu!sIwlO+EnXYomNOea2 zdTY2%Kday62_79`OB@KFySS(!ppvMCRE9|^C=CkaODc5t=Mk@WeC7A^#CB@Q9!!|TF? zbFQ1X&n24Y_w*H}9a+x}yOV$XwyRKoZ7rX5gR&r_9fX4+t9Z|94yXLD3tOz0^E;%2 z&G$Yd^eA1zYio%0_hFxKX8j_*xf{Y^(`ABnfyXA~;*&>BmYeEco*fbtY{@k>x5~<6@$=vgW6t?}oD$_C<&o{YAA?j$6 zEWUIM&o`!-@cDt_)KjDQx8E|D7(#>3sNwv;D$@4~n?;wAL;0_LBKhNviNh>)`F-Ln z?XJ8ke)~O;`%-OhV(%mt?&{CSO+$!Y=_jr+(&2iDu-Ql^UJBRdd893I(ux%?@1%O3 zSO;UbWr`u2dUE4(Bu##iSm&k5S5_hP>RT`F_}HCKszhR){}PvO=*E2_D90zR9gcjX z!PgUax_U|%V%Vzl`-8~Cp4$VnG`sN2G7;{b)j`K6op|ha5zZ*-qRZ$G{NV!`B<763 zw`-}Mub}(9(j@F0p~SC|-oU{NaGyG94|+(!v!@ZZnfD9Vtq6lw-b+xn{wwzN4+Y2J z#@P2}Ee=^re&moHs9sr)x-67@H~aCiOCg5kN}6CdqnruK-AL+ zh0trxxFgM*GEqX|*1~6K5cM3V%nya0G~?aa$CW&;p`dT;gWJ2!$GUjZPQ?0SuE{EV z_EJh-qyQ}IC*VTTAEP-dUZw?JecIn3P>fFs7H ziWcM}Skpi`Xknt5c}1JEhoUA(Rl4ksG}a3ujD`z8^~!YUA( zVo!=^{N%89Gx3~PMh2OIR zalPpfX>b$ix19oU(X}52iBBRRn9j>ToHtY^p6%e^AmZa?7#<|wT;W&ZQyKRZl1@az ztSQ0xA#j0kCNL5-wLG#4%P@3`d?VZ!sFseBqGhWRVJYPo&p9WfIZ1S#6QH8=t2zJu?ywMYw;0H^E2@vkm+)Rsh0dlk{5mR|jAAp0UugvgOm z#BvyV8T1Bh{sU+U2#VS3M)c*wwoVupO6=&99r+vGab3?9Cko z#8y*1Z2kBndFo4kjYpKk2T^pkw|eacQcrB3|C<9zw}IAQ{KWa6QtyjJz^&RvDQ*k{Sl zkuLPanl@}~I@Pyw$}U{}UGVH{!DkR#DemDX!SUfC-j#fa`a7xw%UCn6oEHP#9g17j zvF)<<^Y*ui$ulEQ_?fVeAJL70#_YF(eCB=hQ-nei@t1T~IH57^#ayxjaqO!*I7Jo) zS-S)9XwxlpXiHjXg8`TtV?e80;GvKpG{=d3{UVhSq^} zL$$^}pTpp3av+-avY>nyntMD5M2CL6vCR%CbR&l3vlp8&hIX>vWdV5d{YUo3Fcp-a z)!@Rl`b?YnZ|#r9qSLs^Eae4hMNH!GO@BjHM}1jCC(=bX>-E0|u9~bx)y;B-acy*1pJ!HB(`HpG;hJllYUwg&XOV ziSlwgHny6$>y|m_Q*fQ>lGl4;W;WU`vS+V!6i{mN4#gGs*{KcGm(kAR;wncr+FSvn zZ@)(;cPBR1hIST9bFoeRQ#Rq80;CUf@kfXodlIOCr>*mFLnjZ`=aYgwZh3h4OFe5y zOM%P!wb=bcBYR7l7XOM`bX)hGwKq(G-41oQIP4b-El!46N9wWLsMavdlIn1IJ#lN5 zpmusP9NX~;56^1{AISUAUAX~Ody%(sK{E7S-hlQVsxVeH8RiBxV7*62$UH;-acn@> zH=RMFPZFrjYe0ud>fm*cm;+-zVZXCoA$5Ktyw0y9&uDj0ex3kJ9@gTGhgx8yod7%c z)!^guT?z6j{ZQpno+Rgbv!)$*s?x9 z8#fx3P%lt>H@`)#Ui_Of;^}AEu{^AsG8Ud1#}nT#7n`4Vjv5D1dhyUL{T*e~jfa59 zIB0l~gEK}?gq_{uK%SI^-Dvi1zcvg#U&EfDNRYD$<%}};392QmtWApla!RBr7WGHDlX1~Vf_4%6M z9bnlu9MXxuI=SagV!O$qm0=*-|F@fFx^mz){^(t@4|WY9mdHC_-2T`M?olm$t;mP` zU*@1s`|Hg{-o)KK0$OzK((NVsC0o(|m-5P~PFZm3I2gPj7O{gnnkZSr-3uJ9pL4@O z+y=I-CLYdnmw&Z)ZVrcQSBRra^9S?(a^k5y`g_goXy)J;+W%i2-jnt$&jb20i)DNH zrhSyT>6s$zytJGD_c98|A0nJux04S~Al6(*F2tqp;92h@D1YR&VESh(`59?;7yMGt z$=$@AmWM+|_7kDk%k_NQb2)rhzbm}XU(4^&{yk&tC1F{s)qMYP4o^B96K>Zp=S~F( zcXPH1a~3T9mu2~5&U|68?IM2ORs^$&BLuP6e7=SlAzeUtd7|!oZ7h&>LYjM@2q5m}Gsp>by?XJ3f=`j(; zDLIS7+YaKAIFa^o0iumre|}~b!hgL`+;UQf&j==eqIse?wLzOVx*{x*WQny8dh=)3 ziC6QxOne{SlaCGd^FRj`+FH{SUwy=Imgd2BWK zP4YY*9Hxa`yQ%Zffo7yUARRw<+G~|A(n3^{#P$?BXb0ftyASI2gykHKM~C) zs&L&zDL9@6oMWQIFHla6nvoIZ6}ILhohZxZ))MlPcrxNt0wXU;^ZVxn@jtA58wz*3 z8)L?vM!Y;Xlrp2Y+$Kx=FyZ!16CE6{oe6P)6HT6blovi>3rr zX5YfR*HPF>MFLjt_sAnG!9f=!uxpqL?fvhgzELR6OhPg3HhG7ro`+RoI6R)h=X-|1 z#Xb@|zwH+OJQfCj>_c#X?{$1&76t@VZgCDpmvH@g;ssrhpi#_Oba4%X9rY62_WJ~$ zDhq?r(?W4ria9!}OTqYdC`QV5Vf(342-zBn3FEimr|q~c={&>;$}`p9q^dnlZHPPsfCMbzvOApFhWG)@%pVtKT1Pmi+Zk05G}%MzUaqb#1^ zh<7SVg^rZbJmx#6e4@|7a$*9wG|KUQKx;NDF%GPLgrg!zm4#8=Nbe8VJW*$dyCy(d zQY3!X(ISlm?WtX&&@8X--vuq0ABo1na|W}bTZynn8q=ble~~|&&Hj-HmFjUV>Zqp% zV_73{S$mTgsd;_na%KwK_c#f<$P!xASMnf%SiY1ILz+yrGqc!E(vXbEBYy0VMQmFX z&D9-K(RbS#_M#~XzUL?~y>t^hNUR3SHtG26KNA*6*8?Df?!$*z%mvDV|CE8^uj5ST zXEIDM$wXP3Gfd?XX>pIg!BF#atViEe+M~ZEM)3vKiR!?p4OtjU_0w4%gU3fQIBwb zZefdiNSCF4tcm)Rhmem??*y^YmI|=gTYz>4LzoHqMBX#35d$vevl(9$u(WM0=Er_u zb~hBTs;rins1@usc~SSxuE&lv<2}%p*d1#=(QM#5d!CpAT^Basu2;X9xp@lYs(+@; zyVmfkbqa+4{)~Gyl|WvT3~OJ1A#Qd%DEyoZItRXBmqrzE%u0q!i@)H}$EpC{#1kI( zh4NfF!U|%5T)OrJbLVx2@Yp1{(cuf)+*G4HdGh%he#WKo8sI{iM9z~M&|^e*kPJ+O z<5r*0tGyPeJx+idl6rI-*c(iyC%~V9^>}?@U(lrz-y06Y<~V})KK{TIUb%}DaYCQ!$Bh^ z9+LZ)QQtihmi;77NXJqv)*1~%={5E}OHgIw7#Lj?4-wsp(ArTSraXyR1l?dru)9GgyS?tCdMY!?AXw#Q;mhZS%t zC>&mHjlwJUR>Q?L;jqpuocMdjFrYu}I^QB@Id6dCKXN!5Bg4n%H^aCxIhf{$kw0-8 zw5^oG(6^y@dejb>8cceL6%y?K(3H3=a@Z9TOtY`uQ2B|&j5)8d)?pv)C$HQ|%~v=H z%-~fl?d$CWu~+ON&>-HzT!lXlKX@3V*2JB-?u(;Ttf1O}Q&uMJRx*!K4mM?#o_>io zhfl(yXavi6PfS~9193K#fpX>f-?|Zgza`JztY`nOw=L&z>8JDGYhH4mdWRFe*x&0* z*W+Pz6Xg}tb+0?*Z_U!8UTrTgp&4&$_i$lNCb4j@M1kQVsbGF*C!a-L{*li9!r93t zJnvxy{66I&R0-R-I{n=aH#w38C%p84 zuy^ljo6t?dl4C%8K}nh6cjqYfJf&ha&N&2MPzB7jfBr8Jx0eC46j}$20Pz zbkBD*T>fP?cRVcxm-CJW3qoe_M>nJpXwpTd3yd##Af>&}1KGKY(|FPe(q`0rklh+J znHTJr!uf{-#E^_}{37{}I*1q)r*H-FV?V1gmj9sV>ssuAOP_eZ60cda^I+H&kfOJZ`-n9-PyKA21N1WaLP+ z7~hHCC(VG9=R|yEugbstkiu`Z>6G80!fzgyg7lFQ25na2$&{a|vjjw!$99g_vU{fid~E=&oOmS_>o) z+h|KUGdZYDmCfp(=ka2zLbUoX1QO?6z@jxdm>n7d3+=B`-J3?4H6dXA>K6X@Jdu3P zA#ft{9u^&=+3#ivI2As^p>>gzYZwCCyE|dPa$?Xk3FVHtpt4&ankPu0dpmb@9V)@) zyCm>6&>h?A`r!O860o`c0$1J+#1S-ScHi}qvbUaNL6ih~fAGPRdwuY{jfA`azNCqD z#r0tl$bT6`K9uKJzf3~>^jEm^s|!lEOJGxU7+Q^+hx<2@#=aJD@5NPUK(*+{J)HD) z1~~RUect9HuI@et3%gK1(iw65rNLleK-PgjI~S%^x% z)v@C%kvKLS3(Qn8U=l*7JBYmuTI1l82pU&KJh`||w97|g%gC^4YQ9)v${~Quuyb*W zI4yzGUPtyfb5hhM24>K7DMnTKiKetSan_V#=|@rAclxh(D;OO|xQSC}=InP;iuO0} zhzininSPMs?awyi06RIfwGP3$!`9;CU2-@vRfa$BEEaXC&#g3-;clzG;>}}n815}Y zA-zzxlJ-rddLni>Z7y@qkwZGMDO3WVNZZZ~hkiLSEMIOedoqNw=Ho($3n4Msx;7kU z9g?B@`#Xj=oWfyf2l901e>UvWm3D2Umk7)rBK-Ah?`jZn#-oiw7U}ECrgO|WaZxa( zJ>9dOa%_9wN$9sL3RVz=geop}_A6Cafe z8`ltjZ!yh;FMbs?T9GGcLp07k)rReQLOH*)Vrc%^fjLtjty&m^-WD3{LJIA((qnOv zrWSj-H36idaj4ZvhqVbwpzmoMCdzc#re(zU$c)D(s}Yn7nF#COBw*qBaqNt068x!1 z#M&)WnH$abG<1@&d7U}^8L%AU4@{7zw5U1BtI5QOBq)zipl#0Le>1>@$aHLeemrFj z)A^kQ>xX5ws6{;-H#6rI$slR_rbS))B*>I`Y)*z(I&bOT{{Ppgn`H-CUn|O{nUsZ_ z-yCP%Q%RfJkcD^ponaFx8{)z4>=yOvEAMk`YR6O<(LDz@Y`XZbUVWkQ4qeV)VS}Fj zWi=36qsEIBB~u+(l1E-$KbEmn0ns`|IP{4ZGo@N9pR}Vn>=pArLiz7dOw95Sww&t2 zdCN+0go~723Ri&7!ctsCQVobvz)|NioLV2jq@fC$H0hg`k8L_D@0AAHgFm8Q`Wv=;W*WFntHBO$v)P1QX>fmI z4W4-Uo;mbRBOh@MYCM0>yjP}yZdDDgsLf|R4AaOTTGyg(?AoJ<9qyI}M;F%<)3=lz zFIRwfaXsF;P{F2=9>(g&C+Zzb*_Q1JV#(IwGwqKoX((yA6B@9)P|xl@ONDMB4ga3G z1BfHB^lo=H|BDT=LE>p{NtvP-PVrdM<-T6tnJuuj<=M9JU}e^U^72md^lNe82dd1V zj}3S39S>iYx1+qg-g?77+@CWZ>VeqyBp;6tOJ0Bpn!{vOTsKkQr&5woAFWw0!`W*bn;eQ*GE&MSw z=Q}nND{}i=;neyAyvU!lxC0b|-Nb|3sFLcp9!Y}ly!|}9A948o;)N;F1Khzg24FSK zteU-k)ZP8OTSsC-rpbi#RSwvXc6>cv$f?J7!q4#%2u}#d*U#*6R!k^V=yObbYDa(H zFc@i03<{(;= zcJb^lj-`&f(491U9gXC;=Ft{>NbEr<;`rXZkp(YKg(n?9qs3l3#?=)t=X?RCW?g5G zKc&JFMLu3^ZO_c;yRh|k0cEe>`{%pA{H6faf*-J4nt^Z5Dj>eS6MNvQfO~p{IREog zrt?7ocQ$=M6GK-PSF3=R+ly#N>CV>DKIn>Gaf?3g?qyHb_m%>D>xwaJyf?dWf_l2y zrFfv<4`xn1=4G`nxJBhRle8vok8&g3t6M{um;wt+8`0`RTR2MBeT~23*w@PReq!rzbj!KG&j;Qp=-J$4NIn{^NBhPB8$42E*z0Bh*fp!Zr`$jV88J{LZ= zIB(v+96hfGKMfN=*S=+sb7k{zST>br_$RCI#ki5wx6ylOUx|lpM}hwh+B4deW7yu& zlp~rz-rh3oTr>tEzW$w=mtbz!v9OJ1@*gJ@;fgKeAYO-jqm>0M&YSl&2_MG8Me?66 z)oIz|)L)qh^RvnO`6!q6=aXShmssfQ^Nun;rh(hx7?>4Jc`nWRokN=qL8)~N+~}Bv zQx-6=T0#7O;_I%cpH4Y@QBdEMfluRRfw^`Rc|p@@7c&=bKaPZ*t_t#p&4(^MBEjAw z6*Dsy5)X+uC&ZQ2cUb~!RU_coj3hL&SPtDthdKChJenL^1!G7P-m8RW?*(hY{4jC& z$&d5+%X;EEl9t;p0#h3|!HyAfnCd9U-sJ8mre4OKzEj>_+o2Q4DT`dhz`3SyD~p4s zD8)IWcSB!$;>G!gq3XnakbI280G&|m^Yj1=r8VNsjUl+V=^(g_;gH*fa?_q$kR~5t zU0xu1-LnLja|o-K1z^eEW1zeQAz`^cT8%#m&cFX^r2X)+kqzv6Bf{xS-@o@&IMDBJ z@8I?C`o(^PIqLsQy}W-%(>bI`8ABhY?HA{k2dtdk@djr0mhj zUc%h=yLbb!%RYT|7LsgD_;AwyJo|80I6`@*fBl|OcP|U>vd#R4HF^AR92SNbZ{UZC z$z~D0P8d669kJ|4qjGDmaI5O;o(E@eKdLhe8y#iF+GImtDTOI# zDrFy?r}2fxQc!juDy|8~YU-05>>I>A5;T@U{9h)VA+Ye4-RaF`G z&kTWp=NHhC_Vj1%LSXiaYglJUJ8-)4CAyLf^*@E{V8katP$Fa>9G* zk)&M?0W&REe7BaKH-#bKxzYoJ$4D@_t%P*KUbwI%5NGO1plN^~?Vx?oyNrG|?iI29 zp5v9;5SYJMN;RYlPMs}*(l_C#73#-Y9a6ykEoJDN`JTD0OQRmG4y*fQvx@y`u>5^( zi+ZM}F`s4bpgO0juEpz{*DY5D7qLTB3*B5>kIi47cdwKw_eg`?Cq7~G*Uzo4pxixT zxEVE|_n&GeeMmFCsh@F2O&v4)mI^y}f5AWgjqGnG*OpF=EzbXb*Z$bk9@9>V#Y${= z?yz`R@bQPxzV#{2Dv2?bTrU_;JIR*>#X-To3L!}EI46@doFDx`82QL*k z;kQ+0IA*yN7B7j$s_8qi+asDwSV!a8He2wIgB1RhMdOT4tFZrODfH_agAFr(u>6;) zkYv+{Q@YN>pQNo_(Io~k+W?&}lRj33ypTIbejPC#E<(ON4 zl0t&$c_EY2_iUcHTZMX3(o(MO+DrT~R}MyH;rRaQDcSm`l;L6-ft_EtN}m-FuaY=~ zbE`cKE|H(toU+Ap0&W|+bPb09j|jBQ{cWg6`arht7ZO7f}ZE+$b#n^;B3v9@|#EqcJV@mGFZYVlRir;Gf&^!n9k_l* zs%E64ei=uY$x1;sAQswgiAS#)-vkL|sh{{2kB0l(ut%10pm#X|PrvTK>c7Q77yU%k z9o&`W%Hm;23C#?9Yq9q05{OZjguO58vew@d;InrU?z0)m`k5p`)}>@D@)^(W_$I=c z4yia!*?=9QK5^_Z1&;hOgLT-Q1Xb~l#^Fen_E49_4skWa>aZQ02T9y<2wX6?XnyDyThdc|K}@9m^U|^L%3WS!v#25%eA3 zLVnT?YIj)AnWX1;Ey4tkyKFYqw>M@M;g<;y*vR43-`y)}QR_as(x^qy~vq)bM&bf%=d z#d-6dbp1Kb&d_e6&F2cd?iRu3MNrmZyDGfQbLAw#P|Fc&$*ZIxP?Is=3_^-s4Zw;HqrV<1CD_TUh z1+C$!P~5u-TisNKLds6$Sg^>&)DH8v4G zd}>+qr)u;9*|9{}pxTJdYyLhiePH=g%IEd^jMvO{;5F6%)7m%SM8^Tp@lyh6TI#U$ z)gVwGOsv#bwJpw@_W~xyx-e)g^$`&*`+~~OdT=2*0cOZ*vH5E%!iPbKBmr8zAbozb zzM%KA5m1w!0I&Lg#O8fLznqa^8l3>&FaDqJeFXvdv@KU%XUhXFY@1N7C%IQ>$*#Qz$}4!6Tmpc-*@ z!+&XYK2G}o=sL@=sJ`#*6N-gm2X+TyD+rvu#BN3G78_J73=l>Aii+5Qij9hjtqd`9 z)~0KK8AK83?rsp_S^B*A!;9a$xz2S2gfn|q-1p}`G8GzZf?&64B96Ik2>mMqX=WIY zUCIQgSrQ0c6~FMl@icfZ34oftvDi&z27GMrr`(npT>N7ev^n5Uy20CdtPLMq7XtHil7y|Bk8_*Z##I+A=R@>xuJj}1n4~9F1{=(**1AKpR5J={F3+_Gl z^H|CY_U-*yXe;jHU9^ZHAN5LTf6;=UObLLBo-YK+uDzVk3xqB78CbP(E;s8Uh3npZ zWj$th;Dy9Obo&h0;YmBbm}-wx7w2M2ixzwh_kz)*%&<$j3V%b45yNGBaf#Y*Z2OFK zAh(a<#vOMl&(aI}9E(8Ln-6eJvM2Qpk;EJ$FXS;V*kl%tvm>tJc2_S5`69P~2I(2fqxLf=Wmz%HD0G zXH*Kht-{du_Ik9qPxaEHFg!)MR$XsP;m>0^ws&Y?J3Z;Fv#6$;y^a~l6y#m4LX%E& z@S2O1v@~*5U1ESUXs7d+OAHyhcy|x=S(I^O@n|qktd+ss1Ucmh_rmOh#2&vTN3+MY zUm;e^Zqq>YKiv^sN$>HXhB9YYs#88L?bJ#`Q983y>{&#;WO)d7yPhgOATEuIVF+42 z_%7B_4{Kx*jNQ}&#O#9{YL*Ale*cp=^*)E9uYq{t`(rWiJ%>i4K%_io@et|3CiDx$ zBmPIk3>k;q;y?@ynjs1j;;Xv_;hm%1#1&N>!u|x|$UE^emBT);aD^ZCYKWH2=<5Sh zjs@dtBP*HpG9S`ohhVb#Luv3CA1HAM!OMm2hKC;d0Jw(WuiJNwMv_m&UOg18UyK(1 zazq>Mg<`+7O@bY<^?_%?oFo3ARTf5k7f-=uZ2&Zs$kA_a zgy6g)5NzVfUvncta3p`3@>>Mn^{o-KsSY=v7>QY{)Y%pC_(+EnXL3p>HksZR_ctg| z|5tZ*yJHxP-l@R*GyAetcf(*nK{y^s>BFj5he5rY0`1=qVb+#m(A7ps^Nle~78wR9 z)&!HAMm4D?Q}YSKAS}~)&7~}J(QTR z@|)psz~C1S)L6?DKf_@;Wd>=D+QQCI21o4U1gxC1i#^>P0XdzMaFf#kw)RN`)D_V= znQ6^V8bs2pFBx|`*s%`wku*0>MEg}|m^Ed54EUUa2G`CpC4J^5exeHm#lis)(s^Mt#20Y-0s54s0RBxr)qk=X^o^3{F1p4le1<* zE;g-^;_F^B3yBi0w93b(_q2QPmT8dg{o>{V%H;aUzP(h!fi{J-8-C#iYgy3#C(87+*0=Tl0X^|MX;+;O^TtaZyMxE@uCO|LiYc~?efGI!b+ zd_7c#O|LiYf2ZEd`KP71-?|)|zHWL?(;nILY5`kF`kWnD{y%%?x^|W9dWiyJ%PX7p zeNE4|iOW?X-I1QLaW&ZMkUCtpQBVeV4XRFV2^O1)>k?2+zjF=PO!x#B_rLyx9cKqnj#3zGvTj}zhAkcp({sY$Q+;W(IxuC`$!FcR80$1ggDGij2HO{6dfI5S+ZZx44VCxw!Sr(w41Sh^0pSMlzB~}x5ewIGhd_DJfy5R|#1r=c zJiZ3NHmi6%wP-qJ`ca-T@q!l5o&{Eh{veRI+GxpKu<#@nALZ;Mr_QG=O+QGWEb_rS z7lEa>FJzqi-mFgRzH}+PC(ZL4yJ(zp*p#v<$V<5T8&0^s5{hZ(JFiNKjYrnNX5yOK zA5fsS>3WzD!lCa9;u(f*q`4!9Ga+Gw>)S#ZO_YanCIl1jY$JUuf?{_Nnn-t&_X6S7 z%K!{0*bUU~!VEosoVsZbY2*>|2Kr&aSW8&nf@XkYeX-%|0cdfZ=AtWoP_u;<&G|*p zUdqva#W7+V5bK~yM6EeCuvb-tAzMYX&9$Y>7Rpo&l>Mv8_Yn7B$4;+*uPZ2D<4-Jc zv8Yb#1fi%fBWJnPJYST&Eer zgG+)@+%~RSPh62}X9TTpJGl?B2)->lEa|NTbW<2?Y59FLN5N5@$=PM|e)>C7OklcMUKQYsX{1*d-cT{!RXCQPPG(c!& zyMebSy*DOy7M3nw$sY|T?ML?xLh*sMJb3$G?T3nBu-cSAoFl^WmC;7OKCa}uO+@Ir z&e!Oe%~F1h^ws+&*%{4uH{~wjGRU-EXH=fHkar;Op2z0bh9)jc`N}fNqP?}k@Yb(| z{FAm6zN(LroyD1aG5H@`PJAhIJTsRk_mV=VDKc5&CS$%-pX#yYrLvR-v-nW*wj_L4 z5mkFJzHhMTgJQ7_tp4srP#T43YQWK z#n)EvbBM(goezohV{<5ltOg>ih?AsI1I?}M=*tE$_ob`PicV0^wUh6)H9j$cuHJV);n@Pnh24lFcy9`pa zxVRx{1ph($3cFKb;!cSUUqScmEQ=5qZyUy~tVCFJE>>L9dL&;uNrZv#6GWZl!F(m< zv&@{FDP9wY@o>_RUmukxTCE<)gGmD%r(G&WS`Oir3q>gSuUgca(Vq{G6CvKeL9|aF z$Y*U8q3=L-9AMm+TV;~pb8ssh8rq+GT@WcZq%Hc`^yV4e5d3^QpuvZ}T%XgwweN)U z3w!awH6r9Xcco0!K0LZgglXe?pxwP5e8DFXJoB{CeX=%pxk)|9k3MK&){Q@ZLwcT? zf!I2`2T!AZWP{#NT<+L~kEF5NNym}&zM#3fkqEjoM&rW7PF#Nn&FZzrqeXca-gdkQ zWA{zOyki~ti$ob^OX=bGX`Ojag$%y+nTp}3I`Y8fGO8JjasHML|5!J1tLLG^sy2M| zd?_qUHNm}C+Hw7HQaC)ql)Ngf_@0~IuuWqvzH(^8Ju@h~Hh3N7+qB{a{k`Gdm~F`a z&f&?MdHc*hv`$vx>u!6}e)Bl4I$D9F=XsLX@-%s>>hQ#DPq~_0> zjYEIo+D^F;Z4577PWPB|3sDC^e) zUY1I+-t;r&nb9slU54i8U2#;p2kaW+hjEABVsHAlpL+P=<>)7PhqO;W)`nno>`QzV z;6eYd5UeL3?7an^P_ZWxPo~bog{j0TdKX3W>LqxEm_=fM5~~FR+}c_OF)O0*shuve zqcV8zsw5xoAhhpC{#L0HJwNrrIiVtGS}8I9VrRUu5n*{B1=b|D#U12vX!$1s9agBL zNex23ml5b?+7`cjB5gc`;l!jWaS}0wUfM*Ug>#zNiss3B4dGbl8AH4m;+@_P$1lb~ zVwAw4%e?SreUp*+SsXl{GNx_hxcc=I(Q`G2xB+sk&U6&lkVf%tTo|?v+bbq)<&Xz* zEY4(NNAjUy_i)_QR!iLWfkSey2)sT#R2G!Lp?*>%*7w>d3+zLhrIbiqwc)(<=nm54 zQ$G@ZJjig1g%1o2Q{b75hej99`M~gnO4^623B&YhuXiF8M|i0V3%mP*cu0v!Z*&C7 zSzj<%r^K&oHw$lrec^+(5?}9f6zmTZ^Okfw7l*zO3bzw;drcJH)bRiVowOjK z03qLS+5NukgEAEQU5>`m%Arg{Hw?yke@6@ASI?zBE1NQOmS;_2r6pnT`(q5gUMjFb zdUE0^$KrxDv)S}Ja_C?F3p4E&v7$lLPtlAh(S13Kqs+nkn-X!S^Ezf+77oJJWYkME zV?m1|C`U5|-K=-Bm-oqgSec5EdI#B?9}y6+DIM3&wkGy9G1%+UF{q~1l! zI<5!}Ev4)#^(;|0igEpF&cf(*P|p%<*~6a=pxz{;9qGF3f|zbNh+=J)M#0IRr5LdGJ9|n!h0fmQ*H`65G0QVi;9gsdyCQzF z0GioKyh@w(FFlRpS?-J|_+nFrI;21M85RXetQ?#6AhW7c*}^_iuy|tyF^w}=i%ca9 z%x!*8bW#r6?WP1P*8HBPJ;f|9>M!;XKj&&C{<>MhjxHiE@R&;6{=0aj1FxUrUqi`<=$R%A zxNpm4Yv?%~5GM>IZPLsH%5%IN-E8*N$?`b2unU1XmqP{LkfVI8We6-Z4QMt8J7;}_ zccuJC=X9A+d5-i&U4y}F^cUgyhl9M`{UET}{YH3|v7bMm8U)90J{C-*mfSRqazYQ? z6Qo6Zd8;;oaI@D{LG}Dy)a&g9Ye@fKZ1(`;X@94w7L7AfZ{pE~Uhp_G3O`ded4io6 z?7kdDJXHs5?dC;!KT+s(*&b)27ko-mqR&@5>=x`rxl2kkd3+f6Os8DAa|+7lu)zL5 z>GSS`0_We^iW;M(#M@Nh*y=Utwt@6Q!F0CFRE2kO3b<2HgLxaTvRkzZn0hh?-)wed zEA}d2PkuIrrCej@G?XyJJ*U|{)s%%aF_p4BR^*~*i@VI?J8_4`=HZgJ&P=~r0hfaE zP=CT>mQQ&fKcD9}n*-EVx-j$3O4#|R0JGM)vMl14dfYFhzug zDDv1IquyuwM^^e%3EOf?Fl_G^)`L7C7dMrX_SNH`PrQ3vDPAs7gG34CIJc|CDd8>P z&PD~8$JgLk9}RfXO##EwYnoke+J~yewuWvYk&r*NwpmZA_|+C>lh$b7x!Pv^>GK1c zpf!^+o_g1z>9h{eml*YaCUto9QAdcKMZ2x`b(F>28OG;P2KULjX1(h1@UGB?ShC4~ zYMb?>bNBRshcR+kK+ka4KJw=hH{jgHYHWJFY2RvgzAt>9FNe0}&3o9LS_2?dkVE#B zD!k-62n;9FYwap5iyi{9HFD62tH4s{VbEo(9A5XRzs;DAX)()_YEokAxP7 z<)FMNtHp(O{k_C?LEH|WT+FB#Pb|j}=v|hLyE7(&8EK9F)=(}vlR=fZQU_}?u(O{YG~NoL z9M5!&o?rmFia_YjQ=9dq+us<0`p`g_BBWsAV1Q)H05}tngv3RJQLdyfk|pA?;+e$D zr+%|M0ow=9A-CAKBq z(Q_4=wf0ir@ta$r=qM7`B^<9d?tl?G2nV&pFh5{7jOl~m^gaZ&m+XNBOSGS*)BeGh#&k}uuKq2w)2#6l>HH{BbY4N%A@3zue3>1 zxM{G3FD751ex<5lGJYf9-bfgN^S_LY#;@ZIq#>VS=xVfK@+w|aPyNofVMhChEa&&A zH*B1K)nIejQa4Lh=kiBfTi1*f&LdTqN*^L(SxF?YI;8RD@_|z=EvDzCbCq(Rb z-k6^y4btnS8${26jGrdmqj5(&@!?|w-sK);Eydgvd)?6Eo2b7l@p&SKB~rguBBlQH zi>TINJl{m$*JOvkDA_rNulgVZZNDh-laCIc8cn|4W65Hdxg&XEG37CBFBTuK9?ox# z5#fVzqv()5giq8K;nHFaEOs2k!>E@}v~G_l<__R4w2RqM(FOgr`teh=uUU6O8}Hrk z!$WU~aQI7qs?W7~>#5`u={W+^j`ZXWIwIT|G8P}s?#^d*5TRUU3NBsNm0QryP!wf| z+_^J1-$_ixlQXbqUPs<3SxWZ91$g2_2M$x{ceQvqzP#Ix^Js6V?6MJC$lGv(!^Ey^ zy#wo4w&FQYh~=(oi9w57@GRm?E@)wm)nO`Jlh`%0%+6rPBXy{x{$=`%^Qhrs+;$^zZhxN_ z@`<6L{)uYQtG2@MvEQ(zy@cx6SGco?csJ@E@UYSsTfBF}Ps==D<){!GuY7^7Up(N{ zu1G8(Jxta$PvR<5#$py_`fT=uCD&q6I{PMeQuTsaB|ovZ?p5>zFHpq(M31cwsI>XZ z)%=OJ8|-lcWel~k{E22YcH||X%%H3o95?$gT9$c%r%?<}-e`_9-h0Dh;t5E~%y3;B zDdnnAF6*w<*hNPQn+<-TTIWT?3Zz-YA)52QQiHanIUk->OSx&P@Q7-a?$2wRedfBX zorwo&wvcz{2U@31MOQ`{2Xvk!Zqh~9>oOQJA_lws=#57jM4DHB#|vk>{>xhR`1-9` zzmsRx4y(wsb2B5VS?^O)ulAQo1Rt+OA?cyTg3cWFU5G;Y+3(`PMI4l0sID0HRa~jb zVd={#Jm>U8R8i*;aXSi=-Z_dP1vKxni^AmRyTyxz2$@@=(5`rj7}JY`L0A-qJFANg zcC;G`{)Tb1v*{PI6&UshrG)r$PZ17oO$ zd~W3Q#s}hSV zhO$v2guwoRlz9<@QMVF>w7x-5>l1_CyK;o*#8N&KAA|P#Rl-Qh!@B7ZgD*O%v%8dq zZF7Ngy@$4D(d5_bbTHlg#TUEBu~?ljxMC28?ici#>a#G?;}W;0!!+Uu%ORaSuzUN>Vec-= z>9Zi2I1)?Pz-&33rN!N#o~zj9lccM$OvT~jHn35u5s>PXhWqojvhBp~+ukDsZ>m|a zIaF^dW|dWbd&;0mKM~^vM$e*DC&JKV^7P$-@39;o+GIoT`jw7FtozNOPdTBR@%}qy&1F32YY6 zbX$|RqPzlodnK`t^u1#5SK|Nbm2Oq0v$HRhkoBpmSr6rE^*2CG!ZOMll3BAw!#*Gg&A(8T% zx@@b*`I;Rd_&a48wETmgmUM&-J zRLH@4%5O|k)uvnvIc56PHLH6G5)FT|iK}nc;u_!n(0-2`+Nak1t6@HwkWN4u^6$08 zj`93=uUe<5jG!+X?Cvm7gg~t z<)OFo_<`n?m10*q_sn9W@R??%xHJGEEA$6OpG^}x{6v_U`~&+qMTz?+6QlcF4Bj3c zED~u2%5tM{)sP@@>j(~+#WCn0|0E{Y5r<*>PptU;NHo;u#Ak@bGKHh~gR~zpePU7X z$<^eLK4l6 z#%mQD5qaEH$HtR~ zu~MiZ4$tHCcs$xojeUL?4Do*PSp23H`^%LryAzKsyLV)sltneJV*-Zcb!WX}LMSIS z0adQ|V@~R!kguJHho_HVBW8rs9zO|(UYo$a{|p87!X*5>%Yb&@VPMla1uyAMXOd2G z$atKJ;mWzpk^CLMTBhTOkxSW}mf`T&C2pB=?>iS@oEv9}`SgBY zQiU!W{_GO%c2)jVq1&w>_NQwU?WrqqvRM%8FfIz>U8?cWs8HhhM#1XFYRZidXKlJi zLBiRZW@p`12L-!TrGyLfYOqu*nyIEJVNyjkj*X9DK6Ku?CspI;?{Tb=w2LD(YEW~1 z601*B!Zq_69Br4%JTsJV>Uj+|J-Y^M$Y7(T#7uUo#inQ1l506^&^|iHw$$PKlLgF$ zbc{ z#|>=wIhsoh``zpeY@wzKdtWQ42L6rKj%sjr5Bd8{>T&wOK~QpD4(ruu@2o!rMn9xI zZ=Y%$P5juuSum|ts+#q`Qps>=?Is8N_Z7Ij-$*!cQw}S3m*fBHf3;0UK`d!JChaI| z*8e`3q65EM%BeRg!LL@MfuOpy6D>w9r7q;e5{H&p2RS>&(%DSxBcTv&mW+qbW+9aS zm5;fkg?sin7^bYG`APrDaH4%MoN>&dS+O46o*e||6j`|I`cyDGA4u6onK(~&=hG}3!EBqD{*z4_1( z{dYc`g1l@Y=$li1(2`_abz%v8N}!#fa}r7)EQ7J+ow;}~5pUmL0rNWhz^CMRbm+Gl z`ciM}-bmg8&$aNxg2O1PnFpWQ03X`Xta}jgjpuKMv3_(;evC$sXfxgQ4VAFWnJ=e)R{yh|A#nmIy4G zW(6zn%V5L<%Dz!rL){7LXYYmMjR;#9YAl0w_vL@je?HeY6wr>oQP`zl)?e#+-Wz+}3vho;zUm6U)ZZCvN&!c?Gx?s3~ z&O$_<74MTD1fPCi5kfW`=Fbn12XKtNaH;+vFD)guK%K3iM;YjeGXvq9fw|BldJmU~ z{;>a(nefHhk{_HHKpdo1&HCbJBU|xeeJ{8WV~t~bw%}(RY3>(JJfU+Hcx0~!OhZRB z)hHsJs|4EW-o$ZdvT#PQ1X@v6#q4$|nCT@U4ecY;fBp-H`$=G@oeO5&2*dC064<)= z9e!9BfRo}RaFMuzy6#BXpB~_OTY~pLc_OhO$tO-(d)vs@LDwH0i^Pb&FYuIw2h1P( z9lKIq>78kw;F=pvydWnuTj&XSACmDunoquI?+JhXC2JCI;NCZ$kW!I^g%7Ua%l2Mi z_b7=pnHRCsGA{@`l!Wa{&Y|W_FOcsbZ9u#ocDh3SSNkMXeQJgMQoNvdOagZAVu3#d zZ*W-^kB7f+!7J2TWrxI(7J3!Vit~oPH{x(~`-RA;mmjk_4jVSNAU~M`9>mvU)4u85 zt{M1|c1FiG#x=X%w4dsCQ4b%{F6pdK98Negh_tpMq@4SK`^F8yx2Ck4KJp7!>-EE3 zauFW?Wydw?x%NG~!mfW+kcYQ~@&_(4Iq9Y@{Vqn+LD$*41k$v8F2Ufjx7f;`)ayMd z#lFE#%qWonpMWRdpoO&P}8K4!~lj(v7XId<7X^{@_QB!!mauqo8_tyTh# zuRx{q8@8D^HpBW>q9X1cQ&4@||7;~*%>T&j=}dk!yb1^Z`ohF?+7TQlUG#Ymc9pKL z*j0lu`cihefIOHpYw`UU&i3R`o%y*IM>uPM`j<$kW`AfO*BUn2L_&mN1CFR@3x=kV zFuQdlT6$>0++~qqyn}``jqSm)Yb31BXv8tWT6C61K#%W@^mpq-`n3p_gS zje8vj!bUqeteR1WH?9wcm5-@E>QUS5Jhvhp_1Z^rDEeI8>}*db4x#NWIo$tJ)$E*a zb$bMznR0kvS&2>0`6}m;P(wAO^nUX*-_2?iRFbx5!pd@NdQa0cziX5ZIFk;rtyUSf zUaJcd9tsy?OR%=vSmN@9LS-k~9@J*yIMEm~%KczC z&%{?LGhrrW^fVA7{o}hiu+50_-^u%VKz%+GB>R$gF%ugeErdh!eBlRWl{#51frE)O zw@gpRgOiuhp2r8qj!VbE<;x+5Sb4|ars6P@RaED4xaO0L(_XIm$7$K|G!Z*StOunN zg6wcSUW?xZyJ*Kc`}Qwvv@(MwIiyEz5sTZCw?oh#+UbYJ;Ix`uFw8)NC(C{ylUu-W z+TC9)h{ihuEaBo^%Kq3Bjn}swr0hEx40ee|)1y|Txt9IQDfTXBzt?d_ls#P^_V2Uc&KL4< zz55{yWft7#ryp4SoGA=)*vnTqkOpbfL}7CAF3LvqrEIDGLQ#|jUvkF}ye4)LOe}Wr zGsJ(Gee#cy(snm@Xh|IP)|p0r2(3#-Znd^veb?dKXTv{=WxZX(@9OARBduuZ(a z2mZ}zG8}$(6~9QDke}nnzU?QvewxR91Svc$ z6~qVTi}>fqG*dmkKrDDMi{Bk9C0^oAac|~4n)OLx8n+Y;{fzkr%039NJ}W+`oy8vy zpdEd%y=b(E@!>n9BvW=0pVS+37b7Y4aSucX6+`awQ3?j{Uy4W1F+P)gplt%&#Ozmk zeD!rH$mx@@_^=`W<|u`o<(^`U-Xva7LwTTz5Ha3GkCzem=0E3f(fiDJuDM8SIn1z z=YZd${O3sitToM4Tem=!!=t&^D;em!Xy9eaFmfVYmX~&$zu5u&%}CPK+|xfGzb1-fTiBu|LKdwAcjs; zd-2at$R|5{I*$L`m3LSu13@wiqb+*yXES6_IC35y&g;yFca}k?SBufJUpGFO^h?L? znNUtqCvIv*nkbEx7=D8EHs17Xl&!{-mpbt0LEd2ba1*NS?8GbnctcJ7X0&c>$0J{R z6QgMt?H@bvZf=y#k!Oyz<)o!);Z3~C{b;PC$=jHE!~0GL@NIA#e&)Itl+Ln2ub!>= zqH<4g`f~;~Y3BT$e4|AX=W$K7IzL4^kWs5HpzG~AoJsYM*09Ui-&=)`dqm#SxXZ+% ztibU@Jm?v?iR;(Yp&999j;r6ow{Hv4LL#Bx`8~`nEk_HBmt|8C-{{1{YclJ#yqDwD;vw-OF+`$C8iesLcb*v(qz8IPKQ#l%Vr6zI!-x6 zOTOXuDH2dTevcK4;;?O%J7oX)fIW{=t+`491I)glai?f>Z*+&3qulYuuK=_?CV{NC z#A&<{jyatrz?{5rPXuD7jfAv?GW2{Gh@Vp3$qR`%X^|)CEhI3^%@6M%2{X`j}5}30_fq!jA-NGk$;;sk$Hb^0TyD|Dv9!lzrR6ORi0DHEQLcMk>t{3!h|1cTk z5T{q=`WTFHrQCrIDfq@?7>?>E0$xZWzlkntej@G7i#QzSFaY1v^IRF1fNK`@z`ySc ztFZWHwNsjgCKk~1U)wDnU2mvjaT+oFb>lG3v0RK05KKD9p;KzI*mDDA2k(u;6SfiJ zewu;U%j58(t)IA@N|1fjYe?eXi-DQMtB**)(X$_lcUqFy=4S#f)pihRlt5m^M9k^5 zRZI$^Y~L|Ss5N`E_?pIEjbD;5a%zn%ZzG2&^<;E1dL(mu&tb{HWPD}WOE!&q8LiS} zY#q|W;6L(sUTR1|yP^d~!Ok>G*_DQa7s-qUY5PL?m2@EY*uj+BeHeSZdav3(@?(~hijTpGH-SD|l?KT!55-qQ*Z zhJFa3S$ZmVQ~M?04)VM>rr?yfxq`7y5SVUA!CnScf}Tn+7<;GSs-db(?IdYzlqu+( z(TX_O#FQh>#)y&*Ok*sujwy4jXmAhqWM2q9x2f2E*#NeN@(p+QA^+pjk*qCcf*USR z$F3VEu)jPszxZ@qrenmW52t)prwqKbe+Fe$hC$t_OpNa~pS@irhozQT_+Xp~8|+Q5 zUu9#!i8bu%6k<(R<)HS(&1~iOaLP}~!~U`zY&p$Fw7%uzlpG7zUm5{RRSNOvfj;%3*?qt3FGGZpY+K`}1Z zJI}@&E5JFl7+;L`XMugAz_V{1W;X^h|JkHt38=&K-9wovr6ihe{Ee0}IcvEj3O<+p z#*WsJEQ97G{+;SEY|=Njo9g6e(ZBItrx=#trG(QoE9he!$7+$hllOj8O_j*{#}mV6 z@o(H&p29RqZ?lf(4E#(6(|@W2L(AWIZg37`#I96S|3>l;uzH%uX3nWc>&YeTS$ie; zs{SEfSq00b*=&X5A1s&Gu#=>FFYVZX4Ml(0Zz~08*Z-kjTLm1hDxh1|pJp=+A15_X z+oAx2n+=#{MYCD@{k*^5_^*c9McKF$>w|^R1E+{B9|9Yme-sjS+VYMxA8Ygcx$xqg z%|B083$=$rMa^;ECMXy-p1CQcEIh_P8j{at;RV4`Ji;?egP>;O3E}uaE8fzPyyQJC zgn_pXarLM`7+1bQcwc#dht&p<2711rTV%=Y+L7LP;$Y#)QYXr%@q_~dv(Yfb8O;(r zplge4G>W}}4#d$-)XYZn-B(a3^@L5cvhd)gi)cjJm4t_xXm<7-ZhYzm6LKWIq+-{* z8esLFdXw2IJiz7(^CDf!@I|D(4{~7dCMjTEMHwcXyv`oGDIj591$JG3i|vV2fZMc6 z(xy7Gr|}AS`Mr{|ah=)kTm`I~UWFHQ9hc#ieEon~X5IdO|@0v7MzcWacPd%jt`}`sxezGdxpw|gn7(~F0{;Is) z)-IrWj(kIzDtt|CHyBEO2jd?qJj}Nz@j~SAWupr3{j)d7chc-Dq!9<3_oL4)IhZ|d zK#iXRpu;XXbnEp8TSp9n!Dr-P!s+L~GX$p6jEmD8uW2t<=`{?T_se0raV;9v4Tr<` z<&d3UQ*yWX__>RC7vR?wN#xl>iM-pX-|4osX91{=p#Qr6#SFgZ(J zb?pi?{W=E9(?Y;BuM7|UHx5FN5RI#M8MeVXt?=EkDXJw@X0n01L3#E`zZX z6VS4=B}|(rgRhiXFnsqxD5O3pt6v<>zGnscb7gS*(J%5s9-|qf3@)4f!aHqj;K_a& zY*YV*x6a!_>}=wkU#HwF(uByn$cUrH#cknT^=be04!^qNe zD^I8WNY*VC!}Ak1^AOUCYk9txzD-%j=XuLuhy7()dEeFiEor$Ev}$CFA1vqDePmEO zewf(1aw*?NzR3IT%f%C=i?~yW6t09E71id<=MRZ}r z;ytrrd?@MIvxW?z+3XPhc`mUN+v?z}RfD(*X+`#Y9ETRg{rMs49bPZi!-YY8xmOzX zGU@`7w}>x$NE(1avv8}j7x&sDgSughuy?1P{AxYb>K#_#=Fo0@hY$UKH*dfR{ku|s zDuszXw_?hUPTa_svOb6J!4&TfJa2-K1S^9JsQFQypG@_Dy_uJBjfD#7-aTNa)-AL*s{5PmP5FlRDLbqjrFSJ@zT_!R z9$AQaA0<%G(-l`>HohZmMoNdbc*HafO@~Urg?&O3s`-wUxI<8Ygc$ALF)!O4#+{a; zqGKd}404C0430<71>s{icX&s+Np+e&7#QeIpXp(gt>B3Z)7@d(VkL5&&$xb|1f1nR z@atPQ)Hat;?kDY%B3}@{KmwyBsaQ7TDZXCl0XDwb__T5wj`ozo#;w^nb=U%YMD^`S zwH%sP>!UfnN6e}-G5OM1kcf(M`ja_4h^TH-u#;$xG#NPV^_wk@>E4OitJ& zo+K~Q;lgx0qCHalnvEc-OvgSWN@SnOGd@ly1D#)AlbJjx4{!fWOjVRfuXXVOgBDph z%X6OL#r1!A?39iE?vT;pD5_)4bCBf*7?o0{QcaIs(zLV|f}Z=r{d>81-NrzO801I$ z-#iRi7sNu0qu{OSpMURnPP>UJ#h3p-Kc}D9Z;~eE{!%gAj!4o{CYY6oV z7lq1lYyO`!7%a?A3*)qoa|fE4zewCAm_Iwp6%|3m%vvY(EVSaUD9_sBtf>&$c!+Pc z4FvmOCiI+skY6O7PpfHtgpaHCb1(e>Nc~c2^!&;lY-LTESwl!8?cj_zgQ?!QTZBr< z4eb1zd<5k2G@p0{`^@yBJflLasK1EI4|%}@%L2S&c#ga!UXUA;k0;;S;nXi)U~@hn zKlVO?7k+xduj7XT3!>kpSZnRw<;D|S9082SZeV4ZabcD!W>@p&?d zo797e+96=RI1BCC4Pw@g#9=eaM$f*ZsHP45r{D1JFp8~K)eJv`U zxw3b)3hS#Ms=?Kr_+^mPEYGxqc1U{$&(X68|tFvjGon`@u$(C@B-O5ih#Ovf1D0 z=ULZ)XD=kMWLG8hp8uy=-{E;Ph4B+g;+Xuw!&@>~g*p8^I`lP@ve{lE;?los_@8}; z$CqMONPCC16%GHhANgun!SdfJpmo1Sd{+l6_lN=!l!># zgN?chNOn-+cRsg(jM_-JSggW(RA_)m8tMLzRC&CATewZT7#$Ne-tAx;=trK2U|lud zqOlz)zeW-tNv+vEpIqC+xcQM#xl4^VuF--)$r0djPmPzBQEt(u2x6$J@kf*yTIwAR zC9Z0G&h>7vd1W}L98}}HZBGyb*a7{j|v~9GKjvW92Spk#QLDYaDBEM>K*=IRmo5~BjvP%{7v(;;ow0vFz;AL+_Dic zmpF}X%9>`^o7T6doko%uISk}un%BBsX`_fMNbJXsHCV1c8kEF7z3^W(&Kf-i&U50F zUarD*#baUCf)Hr6u@duy@ep<)m~z9*(YJ8|@kfIo$fpcFb0(4gJrIW1mSXJ=J<4kh zfOGV|d*@;Rqn7*A?y?kX92gjrXV&LP3D&0@6KBYezHbTTE6swbI)0E_Sd8rU9Jo+M zGYZmNo$oat-oEk$rYOd8V#V9go;PuNF={6)CJ(GHNX8eT#b^_lMvUcS$^uk8GKFbl zX&1oqaZ=R^xcQd&TB~#M^`6zV*Ctj;=Nud{Y8`wSjNtx)G!iKrsTZL7XMHBx%`+pu zwFqCsGEi>6owWAEB-hBm72+;Pa+ASS_jC*|uz<}pr+vF39s9lB2i`kmP`W)0m-jsg zJ1HxC&)QV{=4b`lQ)KW^HwA~TKL$S+%i!FIWXe0Xfxo#YEnSm{w`~hjnpyqane?w- zom)$v`=z80q1si_k>cv-z*%lqqa45uXH3=dNp|aCUEi`0_4rSGrz(G)9yT zGvbZJ7@2W6N9-1$&%NBFuwqh`xW<1n-%GDYT~WsauP1Qxt}=MMN)tuxaa@aZP_6EC zLGhq2zZXM)ivhjxXEz-_c_uLuZTjOft&!ZH_}(SYhvJK;!}zjcG_QL+8spCo;qT2v zP_3Vc{htovU1&D`X5>`VG#tP;XUkxuG2mDAeq6jlf5*dfXztjDn;w%vpBYQBYL+$+ zr(OJjp8VRA*rVt1{1Od5xSJ<9>s`SQN7ebN4Ic2J z?Je@1sc>_u2`A||qgHV(+J2T$cGpw1eOHcs?n_`sm@7scDMXhW`E>Rup8H6V`2V++! zcgX1)P8mbQjQfx3Rge#T~Ik+gMCo$>hZ@n&uv_>5$kD2-@=WKkX zs*VmVXz$P`8_zy37Pl`IAuTiu!x9q2jK@^phGb!<{UPG$GU`)?W#j&t9-^5&g8$rX zv^(P_&i_hmqA|p^)^HLJJtY3#zHAI1d0M2AIQid+UG`^<=#_>vU&zI2yGMvqsCF%> z&BdvjS+eK7IehG&M;ZfLS7m8wIPa9ug}jXgi;MBis9VCeqy8}8xEKdDz7=Yze$zEB!cmv}glQK7Kzmss z=D+?ScoMr{TWA69|CA<-?HUBqANiQ^v{;Z5d&)K^4>e{t2ztpu@M=;Xwn@=oWBL<2 znugZ9EjzO7G^hP8$;J0ida+Yg!Emx)KECi7#C-RMz+3GC)C?cR7N&%NnpXif44cIC zri8*W@;aGyX6#2qDENlbUbtu$(>xjmtu;ze+Ga8PF<1^?SCkSn)|B1#Bc9CmvS#(0 z`GvLYP_-O-(KFuko~w;!%-kg$>b6uMzqgA8Opkz8UrFQIq^|p6ypP%DMu5TEN_?Yv zh{-!eLYp3CI4|Y^D_Iyx`@~B0N-j(DRKEW1$i-beO`grl!j-BeNp!~Zs zynn}zJu8lc@Z(ij+@I#R^m@5oHFkHgXSaSu!mlsY*tA}Hl@h|j_C~=WI~A@!PtMw% zAlGMZzWPe2-A%Kyg&FLCpoE;qDm-5$ zhxw0IlFnI`dwAqCgVw}p*KZ^bQ9c{qT?wTNRC$?G5z~96AU=R9Uz%3VDwZk0v!5#8 zd%1>1TvvcoY9o2lYgqYe1#zuaxt(o2+c{DJ>ei~fwOj>WQoZ!(t|~v1tp=Jjm(BF)6}?pXB(JIb+zGSb^dn_^ItUS#55iXzt*1O4fjb` zkZ@Yqx7e2R*`#H9aY!&Wv*EWydJey>7iN_m=R=%>VH+$ELXI8d*7V%g6&q9j?Gf&g z9|*}8#t3dV4)Z^q1Hn45i(r57AXmQ?K+Lo(qvCh_`R+ae@cgoik=ZyW^p|>49aw?W zmN;XqrYH0Ysw5`lP25`K3D>I2&>{FT9-Hn3c}8Vuy80r`TfN}nYA6mpxU*=eb zWi#yvUhV~N{_47utnlV!Zy1_YijGhB;D$@yV31dW6|cAAiLb;R?Nx$qM_1zji8pBc zD8i<7=B86^A-t^uI_yyAhRN-~@w12gMl=uu;!oQk< zAC3xv^(y!O^|^i1L%?qH72!8n@*lVTVO|F!RZZQ?r}_Co;ln7y*_sx7BJFw<6D}DH zn!1}GBVSnQuC3BU;w`tFNEwUzRZ{fb%6p!mnck!;GIMbgud@~5b6mZw)N38L87IQt zcVor=9arr}V!^4@q)rpx;!)6d2S zqVFLc{$sER^BxbwZ>l5tTiQoE#_8gp=fn74-&xG^DU_))g!|7Ip`DEZ7CaxsXHkvO zvX?PB+!(+YT$RD7pn3RuNk87*f@Uls%P{MBAKruJmJYBM_ngq?PifxRd!8A#ckRi$ zrAc9u{cc=b+?@~EM0qzhmiX4PD}Ufh`{ip#(KoddZ_uK>^9@^k8`gn`%Prf@G?dXsDTz}x}M0cCbX&G(Z$@3C{ZaKmDew#aJ*nOk9jSnu~ z>Q1c2SX^7_g(;`q0j?zBnS)=jmC_xQ_cCyA@LQa~Byi(S9^No=#T=>`;$M~!bLJ`S zeLWzR_7{*f1E0`5uylSI{^z_94VRJs=wSKZ9A0ckwed^u5-eXa0dE|YLHkLRKl^JW zdcK!IhlNF0=s6Gv4D5L+cb~0^e)7w+tl!+zYKa=72+>t zp-7`xVj31=|M78R^aT;jIv3&fqF_P?L%c<^uXeKwaj5(?#V8~3_X=_H z%-f>&5`_2{h3INzEe6~o4ufwYepEFPKgtpQA6;J=6;=CwO%6k&kBVRbb|QAb+?RnO zcA%oziHhA~i-}?f=3{qD&$%zU8NlvV#Ci-63E|!P`vUJ;|8KL-8Wj&S_u1FJc3c?! zMK0^+q$HH$yEEfI>Db_<_E<~)>xDN_PuA`R-{t4@Rc_7dA648b8k+yFvQCM)Td(WU zls^8ute<a3}I9Gp2&!}v-P^(y~xjav{ay8eSZ4*n0Cy?`erITjt_E@?$GfzHS zI8O7ZV;nM}^5mhSRhsd~ z*|~B%;a4Yx`ZoU|ca;h;G6y~5PI=PkZ4a?zNhmwJsvUv@gZ=K{IJb-cJ~l!5*!Xt~Gxij2h>G$-+wj2|^a>{aV1RQ{58vXLX# zLr2!#3oBe--FcB%utP^*z7)zwss6$^R!7;nh0^x^D)B5wM{;VB{2I7cY_UfETR^cK zwtu~70iX5d71+JnZ5FedX43Z$C34!vRIzj>IL7S;tiGBo2Kr@_Z4U$9wQZ~TGAfhy zZzz$^(zlD`y_wW^J@&1-UE=9YXy#`ZBj0texP`r*U1_oGIpctM5|BwhyOqdCXOD*euG74>7$xb7cqrvX3IJr{*G@WPuJaCr=4w)&0m!F!stGvJMPbA<7LENZ#JfX{CI zAR4y#lNDU?`qA9a;sWmB!mS3pW5o|~XfV10Qw+HLb$A9ugMrwGelp;04kaSCN+$W| z8StCcdSvrSM`wQuY+U(y5b^5x@VZ zDs`EVPOs7pdFVk~YWh5lb_5%;=PG*|2t8-#{)Rl)widF+)4-n?u&D1qcah&a%i4g~ zmpPK(=rk(oqR+RLI^<=aM$6pwc*U!Fv<0AWG4gm1mQ>(^Le4fs z)??~lovQn+# zXY3e2QHP?bM&vj7{nH?_Gl-@greCFv_YjI1#B_Mo7kI|O?O;!lZ}S;@(h(%kaj;+c zB>S8nP0jFpf7$qx{OvNHtgyE-9Q9E~kDf#u614Pa#|Lk(ub{1c%e}J^0=^^q)SodC*&3thIow9>JrneJk4!fS&Vl6zPiI$oB30X$SUh z;oIIw-K*s^6W5~-y!pG2ut`g%NkNk|6Up^*UbU3NKi{7%$Hs0O zx607o5tR7!m+X|e5&a4gBu4*|&ac)=N3%$3?Dk8#2Cc;Th1X+#$yzxJrE^dur9;D< z+hm6P91)3*t)H^Z@riQ7i%42^FkiN|AC4VdB$b>8_I_keHSXxJ6Ev>yo$3-5h;9Y& zN7B_IE48q@2Ng#jlJ+U zOXQj#&Pn&n;!`X5jGi0t*T+|d=?0u#*Y&un!8MUKIg2(6Ll#SKh-m@P*c>tB!>d9? zmnm69TMa9m)pRLRM2&~%XpbR(dL)I|3toM!*hN zVtumcj?SzbnTA~c8PvfhRTNxAzRep$p1seKjx2-LqPH=BYhq2On(L68XUy}j+t3f} zL4sEp^MS6`WQ$&*TXs0dMpP!FS{c}*8FTYnRVZv(I-SSsrfqG>7diP8AyWJK)s7Zi zL7rqoW3JSxCN2WL9hScv<3RSvLCRgV+qAR;o$Oymd@@G`{-c6`x*A!~J z`!}-Gno>ab6!ZWU%G%GG(w&fGbk_VvDPeQU@k*u#ktK3*7_=6blE_C@BBwNPAzfl3 zc$Ff#qkAiwayWsOeJ+$=tG1>2H{+4SP~V@pUX~~KMD?chaWUize!l#Bs*8T~%pry*!Uy4QJAgPinjC|F zO7oS2DCz?o6IY(3KAmrxl z_%0WJ8AsQuDYXCCHyLF$2|gw*ZSVi}@BCPLH;UGE$^H9!BX-Tl?)~qKs+WZ>vnlKT z&XO6a$#m}5N{y(OE-sA8rhg(0x%}s?{O9o33}5QH6d1egiyU-oI`-c1`vVW}^PWS0 zbkVW}GHhSZr`|iG=<#M?>F$fk@@y1+xco`Zar39Dm<{W^{3t`Gpi2n37Ly+$BNtpj z5YEini4!$*f>!XCF3FU2r>VxrbU6<~x7ztewJV&T?Na>NkMMi{Xs+qrY$>sHckF@MJIy-(X4a7ixUOC`uvzB|F~!u5GBTDO|jW>F9#3+FSD`@U2dgI_)jch72CVht4YWahr=WSm(p)n$Sq7hbRVL zhjB18%pOcL+vS(Cle1zWllJ9-SwEwcgYp{5j5#{X@zq*zTs9Gy(j`1 z7o}2}w^7#r1l}0ByL%Vc%GX08k;U;F{KQK6^F}0DZYhx)W-dghVL`7eXsLRaAIJf)l`r6Z$ieJ3?5d><#yoEE;fE~C)R(O>f9*8RlQY|XR5oDl{X;b@QzcVdg2HK6&ehoxE>Y;pz-(`ej z!)Vep`6-7y>EPz7A4AK~zfi~PoLg~j3_Y;;CC^7Zaoe^vma@M5l6$XPXr_TP>2R`8 z)=wR+dG8xX?F&-8Dvh0+m*THzo*!fFVF^<$+dLB=oC;pO;XJu$! zj!&S@j|yZ~#AD6vrwR1&)lcc=@LrRE9Ia-aKjo|3e9fV@iKMj2m&w6&6u&m>Chn=jpZ)fZ{#-`RLSUxxTK7nA=@riV*^%A5}E#oAUW z&|DVC>SIYn=cYg_@(cH>hd4hul~jk38TG8c7>|sjK5@U~yfs6`hx9a>5K>rSw%Yb; zq%a?!4h)3PNx7NJ_{4azMlXYowJesM-ua2{_cM_BSzKYZiugTO%p9nr=@UxiyK4)P z|E8lAHGfO<3I1Yhs1Dukzh!aCD&d?8T-~fxHn9I+hC|eT?1Epd7u{UpJG)XQyY9{u zeOqK>r)kJB=QoS22Jjs}(B~9) zZng$|IB&18((35;KL&iG^Fh%#Q%9FJ8t})r$ntujqyOd`@~$%{#YXIiU*nnR#%D$J zZp>VPM(7Z}DAMbJo2_Tevm0C%$>=U=waA#4f4C}shCl)ge+89?qg?X~x{qLW)`!vS?g_F%Q+oh)a0xAJ}8e!xqJh#r3n% ze_+f5rzMFoID4Ht8MBQhMZ5;*JnpFxmt9X2ku9^yqHe|O<JfB zM|@d?{0GI5yE;7*)xilT9Wvyc4$sAbFMl+;*g?I2EjAlw(TdH6Jg!5IaC1fnO;5xB zb4F|TAy>S^`|r3LR+!z&&t(nyvpBX2xNEH;2VE)w6q9V&uBg^zS-~`p<|9I+;?#A{|xgXv`wr zjB;!R`E}DEpnKQx$L1a+gdx&KR;4Q|Ai6v zGIb)KJ=mMKFyid@b&yq%O5eK}a^h3;yx)U|_p|}eeA0kk?oXi}WWd%v8qvmH=o`JQ zQ~&g2}_I*I1>(&M*Xoaq&wYkoV+D&U-!VJ(oi zl!$DZGHE=u6^W1W@IIHxCsWXG*fgFV>dNH$;T>qkmN@F!Qjc%AyV5oLIEu!u;YSTY zwKvAn`=@%W^5{adO=HO`L61uU-KqFm3>8*EmeNHJN`PK8`9rB}wbPS^KZ~KUyM7~s zv^VWr5JP>rq{8*`c&3fEFS?qeX+}`7d}2L-TsKA2e~Cr%YNtW;zJQ5)6iMA?FM86L z=>>EPH?Iz($)3nNh3TPEdmnmvOCbm6LS$Errml+=GA%8T0Y}DB*E;B`EB+~`UYba5 z=%mZ)0iCnEFS&NmLYsu_ln2wX|AC+SL!Q*?W|H0z_(9fx!Onda{R2(uGp{_^`^p>| z4bFCHa-KYsGM~J`*)9&rLl4&?I+*~^*PH=GqM3dF_QsML zyKnoLFMqL9BK&Bh+I;$pRo($FJy|*NFLp{hj=tB1o|=ByGq}gcSeo(9CTjic+57{2 z%1^%Uh-!3TIyZ*T@nKd*)Mi)g^nb_FzA_tai_=qiQ~elP7g|$$x}hJp{~bfEL?7)P z^J$zD1fS#SVC`r4_3qYXTJ2MyeO>}Do|B|5q0N->&BpMbE|t*FxXcun|M83Cj_ONnd+dw`J4*zP-1;swji_bmNqSO3}5`3s1e}rxU znQO|5w*&dVM9jYhtgL~4(%Ujr4jL1{&&*;qm#v@m%ou2%99Pcp(-@eg6{z`P? zpj7a{|C-9JOFMIPdK8H)GpUQ!iPp%jNos=cdpRun2Ol28bFd)QO{0tJ$e{&M6f&T) z%zM&~&9S?`k!>fNXG?J5h>>u{}|S~{WMN4Cv!|M3_-Yjs`zedVlnKik-tCo&5o+uC8vgf^Kz)0==eVeQt zqvqU0VU!-cN7kODVhub~du|<+HpYe=_brZh0BlSNoZXE z^l?{8zAHzs38AiLI(fZMCis*Pin(+f91gO~8imlZu!r))$QbD}GK7q_J(pU?NO@vU z2vvUkRv!6y1OGR?$NiI>5`0O%^A4rfGr!AT?q|{K2A`L%Kt3)yCS$gQ(J5IXHI4Sm zAFsmcT3-V`_2jUuikyL%H_%oM*(LY4j-bmH2AnW^t86qrf=;c~=ZKOGGDsCkS(f@d zzej*f86HWSuIcgV;1x1!StOmBq{lt0E|A;aMA9edtmZwKA!ouLYB5v~&+*AJp+*!n z#F?44ZiJM!_{?7}lgUf^OWW1RNgG@$yS=g^We#}eZzf#(g(Y&TbYynegblBINNr{m zRR<<7kEJgSBsm`1Yzv=aS^T~Yc85{a=w6|0wzi2}uGW&dMWK9A;DDWkmgbfKr>(3i zt(R$$179d#&9#tD;HDT{oT#fWRa!0eJ6I^4hvX`qpx+KWTPVX-_mtc)^eFu*l;-u4 zm0_lmjy21Zp9Y324ST_lwzCjj?WdJ_eIzX(T_{a%Z&xygN~-NwC^O#8QKAk=I&~a* zZcBP7`Ore#&MTCjhpH+)%#atox=7yJmZ6r>sSds`mR;`4j%|8J zBR9K5p1;@CtuAt#>ufBRq0S+0-iEPsGpV=&u71-m*Nu_mF$CErfyLIEmkr|3+gKuh z|7@$#qSLC;a%3X49I07|Y!N)OTwdP4B=xI%V%O0V-G?#nC6W{+OqZgdg$mn<13Ry19ajvb1#Dr*H85KLFXWz<9(*j6E%KjQ2py= z6>#OEj1>oLCdR(PTfM_4Dqk|pvxjf#U zF>8Z(Sr2=PqZM&=!I9h`|SnEO6kv;taX&qacC3Ak92! z#BEmZ6escb8)g~tm5jaO`~l<$0W)7JI4I`96EtzBG3yx~6DN$I$#hlm!}lkJ8a^_W zRB?gPIkEXYG_X>k8_$4t5nLL(uCfuXJRS|V3i^c<+d2hKcE@GEq z(#3?Q{tgk(E@e^MeI`6KI6~Y2CZ~%g{K7*K89MAcaQ&w)T3jncAKY3Kt~4i36gA4G z&eKddRwjs(HL`(iRGfb=S-gdh$ueG50dJSb*q**=;#zfRHquo*zPU~`Mjpk~mntrg zvGrR%6z<5%nBCQwU!^<~+Y+%m5XQVQ>XlgiA(KY6HfBxsTd_6<+-9;-1&lp$XRfeW zg#E%MBlgz+A{shpQaxbZvx9z!bYNzYX2}1|FA%eS=x9n$V-8qdCQLDBy;yC`D-{E} zI8R4E#~D|^%=#^jspmQL3{I|iy*!q-=xjpCn9*(n)0V%!wUH^!&(_gq{JzR#?Ck4i z7Xk!z10fOPWJsCj*jn)Gmg8a$yU6|R@Z z?Q=TTrk0;l(bs6gyIVU_F|fMR4iz{0=0t@B$kTpc%o*PG$ZcZ^+2J!EFrfj>9+N_| zcN_7F_=efMG3{8H{C93Ls?n6TLm$=41iq7*%_!72iNqp2o2og}=@p6e zu8sjZOj^+1{R!xiH{cVOT2a0I@iZVFJFL*QG_W9!=2bG}kFz__fWdL(+7W#3HdlI; zhECOXhMY22P`jP6)NZ&TJAUm<IE6la&E}wH$6AFt9HzJo)FW*5hOM`=jeJn&SQ|mCeTv0w2JnJ5wrc zE_=~=aEvwgmP+r-!)V?VNk8V7${IgLApcdN-O6uSRUeof{TE4jCGvW}IO_Q254Tey zXX_@CbufJTp*UAPe902I7NL)d<@_7dk^8GfM@g|X=`xG1)Q2xSuSjmmpF{VC!ovlx zeE6>U@I7nE6VJq(7Z;J~^C()@s8CjJ?N8azTi!bRORjvf0=Ndx;!o(=gdQdr+|*Cx zxBq$l>R>i!p>a|Aly7q~UhEKi%w3ogV_7wfj#pvyCPLrg3UNL;L49O8%XPYimS zE@*ukPUF|M(bU7VNb8(4nfIe_Zm@S_r6g%QPqoJ`sp%*swfY$Du@644@f(z=aX#D> zy4exkk1Ag@-ndo=2{+=DZU%$66Euyco9-wz?(}2-jlh2HZxk2H z-n_jPuwUDsif>mBUSI_Lxz$K^G;` zldL-N=-$xST&pQJ4A8JvgRYtS4zg>v_Izu$mNKK9Z9Crwr$#v?>uu*Mz({e2> z-roRxYw`m^$dLmUaE3`o`bw`Mjkpf}&J$M#NUv9QxH3Fqlb#Qe*}D4t zUrpS%Hr}#Zf+MF*#Q)cIG`xOw`F%C~oxx+^-LK7Gkqhx|)Fhes%aM21fj(sP6q%7; zlcSyB4eT)!9*Ww0{X2R$-prEMTGn8rH@Kg!3*^Siwb%~#+&g6vx|8hK7P%jjTP>6I z7uVpnp_u7ft&nH8+p^|fB+>lUa@J8hZZ4we`jIuVic?iSgs#R@lLF+-cw5dwE`5*s z>*OG-%6#uqI9bMQlBXL~<<9@Wn>K5+T=m0>&pi&KQAOKiLhZ`jv`sjLoY*b{4w>_> zz%bH#wO6J>C+rJ7k4w}(S@cQG@Z8e4mxpBYOmqHcTo?_HJ1m1It9UMSK3B4j%Z61= z`H^E7Z8&j4p1Ng&x=08cNANq4HbhJo(Bkl)6lbl(vyYGS)Ygwp7;28V^59_co!x z;Vcaz@?;~cP%0S^Bik9|%3kVF8W<2S&*guS`gX{U$V`;pb6!cmDy#+!R6?s%&XtcuzhX5<&x=k+J6aR37S&8R5!3`Q|<{ z)T)Nip6`#)&3zv|Rq)?!d?M!`OqPu>Q%r98Quf-DCHplDA@e)0Qo4lv)d0`9 zkRn~0g}^WRUXJJyDFg9uF)}mYf03OuAvFEy7dhnkO<7zwl&r&k$WbpMW%%0=?6LA? z>G;cX&;3yFc!l!Ky_+(1Lns9tE|RX*&q*imFw$iImMO+p^$f>d!Cc-C&Flbjy|^(W2re#v&QAOGf!*^33-seIy z%$Ztb%9qKVd&-ncm`T+JdK}j9y)p|KEFI0D38{Bi5t+!oSPMO8k0iyno}`FD@C0Rr zDh;7=YCfh+7OPGxN047JWJVcseYY!Dz_%~yREAvc*~+oClE|P;`d%lcUxY;d8?dXe zQXV#7D#LT+{nTjfiCs)XJ@t6$Kv!)&>u7R-26d2Ut;k6Dh^rmbT&tG!2U@!O=zv2@~RhpL#eeSmHfyTcufpl&3`I^fc%___VyN2kq-OeA# z??!+90DXRN)JRE!-c zpSM4nD8~OvC(AN@E`PoJ`x9UKiRd~RR0@2O8aG$mI}dJujR7aREE4SufeF_daO+rq z@xC?s3ZV-+TYI%Q1>aL@bwf@K3=j)}@ot|oNK+RzmTg7YYctGm_uA}+(Dmm92N`xoEE7t9^afy0xR zeiwG{b=U{1I4NGcMYPv~g>Iu(c2D-+&Bb?7Np@zlU#5e&S&ae^^l z8)!hcE9vONOL%%}O8{LMhge7abp@^lno zu-okx%h_Xi5-loN<@O+SF@HLdKu^1Mb<+j z33n1GVd0`qQBCG^C41~rUp0&BwqqgR3&fw@e*JN4}n~cEp7JGUrSjALyad{V&bwqo+X!-)guXKUAo->j zyfdao+{|O6ta>qmM$IzhHow-&wkDC(!4tcQ)63;Z5lOea4A}}DF?~6b!s_AmKQrWA zbrfaYHQ;OgCP~+hQFQsC0oQryBj3A3Q4us|<>!u3gOTTaB7^FbsrgdhK=A{suYXf+~})@)a^Z_Y_kLyH^_Ma?I-oE0nEWYNeZHFB`di(1>^&Ag%JuKt%qB<9@9 zx78Kq-=h6j#3*FjzIvzThd$SZzJku6?`mFJGgLf8kIV}XQ?}5Bi&k&2ds<=2U&d-h ztE4Q|RC9JpW%>o~;`16)9<#p+ZL-Lq z41F_hw5%F+4NixT(u}uls!n->aW2`Jv0GnzWDTZ+TQ}toS87nb@HF&VnpT+IIxeq8 zEltqvQr(ol9(N%Bqp39MyqeqebfQW%uyet`8@9YIxvx*5+%OZq99EywnnF|hMul92 zhV-}~nK}s-Z(Q35K7i!E`+pd7O^xY+n7&o?S@S57-}-dnA^ASL3y)~Q=MeQ+fVkS zZXIK2(Jw=m8+%bf4mwAi4Y~4@K2)Sj(IIZpM}l~ z&mu`Fm-N{*dKg8!;rV`DpYJ7)pn*{eo!X$!?+ZqeQ3vE1w%6xJ-s9+a7_!vh`*>VD zk2t^&?>W%0OfC&V zZwuxZyOdIy@NN;+egaS5vr;+H(VtdA|5oX2soZ>F1u~W}$Ho5j=2IigZkDGD|ITjT zeqeUH{dcD0j{A~HJ=f;%4#nYEGPV4o(i|B*hv&?Xqm3nUo=q6`cA`sfyvgwS&2I`nL8Yl)MWl>K}VG4 zK0d68ROp1;4P`+mZ?=ZVp-b~brE0AqeA)wpts`PI*ZsiT%=XIV+_S?(N*Ik)EqTY2SbXMT)X??yu>sXCK5 zb@^xx{0KZv9vSV#qoMinGny;o>pO5X=E|JprLym&TDO31P!$bl;f?d^3avxlu~<#Y*<){pCQx0sqTLC4_a~bqA*%; z^@t45HRqKr!^k83qzrJzxl;(=;=A+m;%{T_gY4gcyH}<02?O4a-Nd*KVNw7KZa9tC ztrYp(uULNa3#Es_vGVfdd}-e*lvX4q%iZ#;Jm-v=Wo!oW+doK;tMC_uqO-5g8+3|= zP~7SVGN#ir*=2GFRUh?CHs5n!8jcE~scqlLBS5E$RF4Jod?Tm1EXkov=Il5=pwE9Mv=i?L++m6P9}GUK4+vM zdu(qa|3#*yE%eFYret&Iorat=;CA!>k>0hnNk3OY7m;^TIkQ-j zdOr3eL$@nCCc>vM!hl~5^HcuhdA^3GQ4`Wh8TeR|PbjWmF;!0WM&^Hp0Z;iHs?APi zvifPj_Jdutnu*aATVTMZftw?r7e!McW>A~q_1q?oj3IygKF40U>h`r-EcNaL{q~Qq zZjRvjCw4Xf-mb3sw_h9`?uDPNYA4N}FmzW7Ich z*Gk>4v0E5VV`~|5WZ`K|&V_h%CmC`_E3M{~O9FOYhTLRmhUP<70=<7^$RoZ#(6k#0 zKjRSW;{9K199AXL<(@|T--7R&M&RQ9aM#mX8HzKD6RBS#Bfb%0C7LSG)|SDKcD}l> ztC>WVN({N}*Sey}KZ!;`|ImH1vv}o@Oh14zA}+KSo^TtTAw$lXPofceQW}{X^32U1 zV(pU@I@!jMUuF&vtpii(2y_&O)_V)%foXK?ry=meXz|J^o#r();*|Ge#fZb{)U>}5 zyjGKiaWt++R=n;*Geql_8RSF8ToOM=Yydvl2yEPY+d^TB9tx+C#+A&)akFI$u25B=Nljvhv+DJxQbn8uNQxG>^ml^c%;{DAzNpW@p?4}#jG#!!46sz|EG&;YFeE#V!NnS~#iMdH!cn z|C$b3cf8ho7Z1Sm_Zh4PZ=Wx&E`+~wlA4Xu3PrJj4&Ng+FS9NaORi=hze~;b?F^u+ z%AlLO)qM1-5v3i?pvbjq9x~O0R$qtKXq_7Qsiss=TSu*n)%?E5jPeHRsI#9bH`!r9 z9>Ci_E|_xbQAz54~>o*L!$jC+4r)cinE> zUdhvtJ-8umkegxVa=yPVi5mU)+V$*Pf6k3eB$x3H;Sahm;W}*+ff3(EeM1k_&dUk3 z^52o#OPdz(@vaFprpp0su+sDB60+m>WDF zDdF;`Yrq(93Myk~l|fbNn)CTdfkN9kle*-oIWKObP=WLJxvAzeK0)wkWYWvgrkr+f zr|`|id~w*6*UsE0=Kex2$$eAqHv5q1S|^kG8=7%rV9sBGn2*|-as2+1Lcb`J5;vRi zsQ5D?%N?`TCNmzq;52i7aXd;)dgBuS+YMnt#=9_by$<=_V(81-2Zt8riM`YfvNPxvA@zvu&kXRI3*JM4!y~iiramgry=&;m_acNJ+@MnDN#W zI<7iY1bxo#4W=Bgt4EcQQS->ql&79)Kq=dxEAFL625lp{_$rC^SO7oIYl3+lyj}{cX?G z?BLmv9zmbe-p-WwE^#HZUU3xM+>{SL(jebG7P?$DA6wm-Cb-Aa!JYW7b?8P;Z;|aV zM9r)Bbw>s{@Q)6=GiZ!Q){LR=CMI0#jVGmUh^8uzDqel15B9W7{q`C2%<26pZVe-! z$C$^r97N}>n3g^_;`m%IYJNr16HGT?=KmE*Zt#n{PWr@FA9Cf|I2!+yCIoW9w~ok;c*+2$#ddSx5!F!ISkoH*N;5X z_RpNf)e2&$v#q7lbjA#xln_mi+P7ECBBpV_V5aJ~#wlYjP3BWtNiIz`DNYy1vuPVi zrqM?g@5IsE-$YWI$0172CLazdQ@}AME2;_JydfGp5$z+TO`jo{qZM*(^GP|rauC01 zfnM^QpUR;b{rJotaP=0(@@!l$Znr>7&U3A0-J>4dFaY=Jkeyt!#hs5rOEV&%jvS`y z!o8qTslKd<9E3jixi8VNZsQ^=OINO%wQC#~%1^f4O~XbAH(sSYpI5=y;p*U|`pAL8GM@-k4vs0DriC z5_+QHhmA%K_M{oo{a0Nc3%yfl)A_Rhd?((F*R889M}~j{dxJ}FJ7G0)#%l3pV8wYh z0W#-o4L+#{-|oE)(zcg9FaH>UY|=p4>a8uedKXUJN_QaNtSWC+hg1CL{nDUPWv+S= zx(+@nCw#Z!*a2af3r@+04K0u_7e*1W7vwL@s8w=8>CU~YGWUQn57`t-Uk8TCJ;4T? zj7$u#*NRkX>+w_M20Q#4C$+hw?fvPZ0ZR}Y+dXo*x_M9Jgms?fdG<7P)gj_Lad(QN z=%vn>UGAC4J!`Zy?W8eBY$;Zn7$Q?{zcJr*$Wk)`O}>tW0>wR{zaqv%or&MEBE zP8saTblJn0XN^}YHIAWs1vB{h;1KPfY>m}Mz(2b++Q+A{r-Q~oMqi9{uO35oJB+x) zx~gt%*2Iv-b|Vg)b=EE3B$ga{8F8WSH@Em(u{6Az5wFzRYP{OVK^F~v=?!YLfj_5q zG-A&wV>P|&#?!o`Mr?C!wI+1~dS_l4arBZMn%N=o)D1s_#fY<-5%=S%#c^Xk-BW6= z4M?C7O;y}qm!)y3oJil7sn{U=p{936BKFGA22^^jss0K4a7@MPs(arw$sf?S@<7Fh z`Wc96Pm#-U5B%W~OK}5U+Q$1-Ogn5v=)@$NI!ML8i=2eml|%zus`$>`=Hh_`cA6>` zd){p)9MR<$ZKPuN-$I;nNgyy5kV#h+@39^zT<4~eG8BAfS8uTo-kdw# zRb1pTMub#Lr;@oUu6cc&*cb(0Z6y<)0WHcOuVUwQCKawXHl86IS3-Z1V!~ebb3|Tz z2K~n8^Y!V4qIFRQ&1#07)thCafOMoDrsny3R||V+65cKco?LcM{D&Ng_&Wc?UH74x z`Nw^fo0Uy~m|&Vou_x8MC+x9sg5T=q8&l3Z7bw(2Gf6+r3|!ep;nyvbmMk&j9=n6Y zQ+H&7Ih*r^{X2!8eI^wwH0M#%_lZW}>w+WA*`>!Jka{`{)0PsoUVOb+h2} zV^4}O3+PGkdZObQ;ny{b_6@P%j0NX~^MWjD?PtNW#U-%{x{+g#EO^-BE8_7J^HJn<=hW%A#tg&AD>x+oJt%^oGZq^Y*8A#nkheWZuXEyZ-0G0(d?( z+LVuEy%sf~=i&XP+;9K;zZm}38DOoMpT)f`I(l3c+}*uzV$A{_6;3hZd-L*Odr-c^us5FC~0n1g2w}ciVgOYcfSHSHLKUh%}%mObPTkyFU z8>%ldsQVEMF46yoF8z~%{3{D+B&*Trd+Epzx8#ixRmjFLgHq~P^5VO;ROf6ug>|vy zeYNfAaEo*rD=gXUi9PkchCFaROKvv4Ce>|$ZmbO!JiK3RvR;)+KK}tXdO1?uS9HbR zG_QaaM-Hz;VWZ(;pJL9AJ?fDUGB>K(nsZLu2DAxY&Xjj%yuE)T8oV=!dcOzfIlIZ< z-m9HCX8hQ%8R>!&>Dxmy4jS%EJ3oL|cfcNaqYG8TJR9R}&hvV=CVT9v?gX2&{JpfR5xI8%KdL=3LFsl}@jWqy87oIcT?r7QBz82HVW}?dZ<*Cr9XxJ2au6 zx{}*JvDEXI8BcTRPLD3dfbTNn!=4^=u~Q6HvcvalpeJ<*h$h25rhK7GA3Bo7q)k`z zt+xGu)_Ah5=Os5BUzVzIp z;(lXi!Uup}j3z3sy@*f^}Z@vD1@nQ7vWV(9phim1&^Vwuf zJY8*nP3wMkE^mGtOO|i!lm|U#bJCp{dSOk<)*CZ8;9)c^O`59IN}k5UnbCE%SxM4P zX2f&Tseb<|_4bcPhS>k`q1*A%yx&*Shm2$;Vula@c9Ep{@>tQEjl2{~Nwb%IRz@xu z!ehbPtlacV`Nv}rA2n9!&?zH1rCC4hAhp!%fVCWXz85b#qNQ7>?d9P+9-I`8>;84+ zm%Z-%4X>N;ZYGTfcj3*c$VTqjN*>)Mct9zx=XQ__gc~#i;3|!U{OZyXnPa%;Dc#WR z-i}*!Kpx8)Pjt1n;wj^`WP5aw{IbY}Yj#04SN-8~K~8i2XRMacohXY_n{w;H_&xgi z$~Uqx=i=UO^O_~Csy1XtWPCjxwMgD}smBv{M$z0;E98b#PCWk(_`~2e&(&}sBSTJhRxVKnXeMLBJN1uv|L?u>=kq-&g-=Wa&##5Ul=mB1zY zL+L=SlxMDD4|F_~8m^C*FDB^mPvEqLgHxqJuVQ%<+KHxZvgF64pR(QdP}*PZt}Gh+ zO)dehTafffx=lge==Tuv&UqozJHM6k0r2MgiMjOrGiQFpP3Xo%u`FcXrjk3Tkf}S~=ao11Fq`5~VRsL7SUluNxJSmc9 z;>@31d4cSSTpHsx*b}|}$m-Ltq zJ;QKwPH68X_YI1ojZ@9}T%Rt|a9S>PsAwGZG(UtQ8KhLse$O4EWkD+E<=Zu5g z!q86R88o$R6?8jksd6<_zIMt)_6NURAG2*0QLHS7zr(1bn$2Xc@+m+;_W|}|o_Ce@ z2@2`GGy$g?qpTeuDR;jKKM1>_{ANk5x0vt|^ApO=REeG%6W-^wRoR4?yUP(KeE7Ss z^5wHcH<<|^YSmu(f!-pc+0YzLw@|F1dD~ybgwJGzYxh{7N8>imqKK~Ae*2>-AHJba zF()H;>BUgnFcnuxukLpFPz>#7V5dC?-M&@<&Rh?kt^H>=DP!rEy^7a3RMj-D2i@{J zV_t34T@$<}j&kq7D-=3ev!-J_rB1^ccxw$f$#}{Q$8IrfkH$GMo)Uq{_g=rK8DX99 zR}XpRQ>P|KBdU_I_OjNUNn3Gs_G>H~us5z%o zbMdb&{6|KnT&<*?=yo3dBPUaK9!8?=xD*=L*OY(Rc?i!(Da7MV`R(`q;?m|+3TtA@ z>uwH3pG6wY1dlQ8_!#l;%QWg90UX$9f*3E;DYmfU^+Wc)!UmmdH@BHqc+cDYe&YUV zTu(9OdA@VRt=AcUc`fshg<`v>j)HreaY2&5I0#JArKcG;@48wzrRm7X)r>c6Tq|zW zM+Pi#X3&*&Vhph2$WCT_pxYx+8<_xWADQ#Jz0XAQ7ahD&<{UEkwJ_X|{x~;t{xR&m z7(Yb^PnS8k^v~iV_WoZMoAd35-$d|a9aYINXNQP<(We9QVQ}6AYYW91eH~56wqWb< zQt_ut?xqvI3-+bL2-=Cf)|TuwPaoRR3`%Te$@Q8TQCVGZwi-+BcvnR`-7>%}SaNH7 zQ@Y&`J;D~2ymW{;)wz&Co82rc;38ySBDWqswL_Ndkz`4A&ScQ_hn8Ia`Uy8{Xsf}O zdRp<+cpK7T51V+(iu1uSF15{|qHrr@QdXgURvEN3){3J{SD+UOe$v8&k$*G;-^U?0 zEGgXe#0P)2{hA0*S6S4$&MWxqvn1O6$Xx3&cL@hfNu)l{R%zF~^XFFjNytoDtF4l; zh&P!gQuK%r?WA){c(pE(t}Kn#`UfoJLCe95T4rf&8!zV3zKL`_;)8am)dJqt9%-0e ze`@DdTEvA^RTC@hqqoY`!f<+W-;#gq+#pvEkAP3ll8YCvkt2}RR>Rti?_OI2|8peWSZv8F zX0O0A0B7I>3*H($U;fGCiaTV%Cv<*tnROI-ds%RT!zAh97DfF(nDekPqvX_KQB-@A zIhWW~qZ_xW$5U@4$+Cp1dU7&t_56%GNBOToKpchkCfgn)6y+7dl(?$o#H&Jz&yJ zQMX?z;?h#S!fHZR%N9cu)DcX6{Mwy;rlyZkttw8K+hU z7GF1JA-Bq^!d#OxD^{G?nMK-q=+sJ%7s*TU9#bnGpr0((BHL$GcPoB9D@~N3qok&} zRfV}mxu6rB(lhDVMN95ka!c$8&7`f%EqU*vyW-hy}&efQZy z>zYo^m#p9~sE(YHbgFv6iZ!10lpdN!y?0r0N@@+thOVGiM=Ru1)S}n@(I15Szr)m# zw8*YZzir9?mN*f$L*Gy$X244IfXkApS)?V0s~Vt73c7+T_>Q-0M6;mps z2z+;T;xl$=b2AE<0RPB-OWw1_nYz72A5DZMPrUAeez^pAnJxL$y4L7YjHe_k^pXX& zLk0;x^G;UWw?#*~^)`;a;9l*Y;R?PXj#|C8pwfwDh>YPf9{AgP0=fkysMhWqh7_*g#WrLU;JnD zr>8O0`h}lzB4Y-(Gm1f{W1wOhIE_`fCtEy^Dp}(uv(kadzRgYLlgoI15{1r!bxBI` z!qMyo4dlvcPn1VtCXj1`pxDK;#NS4^X-4ARhl1yla1J zS!&sj*M)-j9$rHRW%T0QuUgu%tiHUb-;?dYr@gdrmdii5^G)R0wrpfM4`=Q>8MyuQG@0I@8Mp1GCCpgz{e#BH2}N$<(IwcqH{?FZ zT^#GUO5Rvfk2miE_seVL@?0mr1g+(Q>h{=GNJe`9O$(gDy*mmxQ( zMNOU*8$qcrcggJG_S`@(f+`mU%cLk<-ZnR!hMfKv-4s=MLlHCsAAslKZQQghjOGl# zB)2xO=6fo9h`vu z1!-g$PN7pR*#5*R`SyDleR^cYK8-x(DrhqrPPJku-C&u#7dqkHR-A*LyDJTmfh?@} z=#`H0EPh{suPnLg)8_JN27CeiEjh{ANe=yrK1y&St!h`5Q{ZvFhi8*^p{Xp`i8(sR zoIBq5t)v#h1A75DyvBRQa;`#=z*JS7?kc^$DFhWiDi&m6UDx%r7>rfVYeMHz_yMu`^n4%I?*sDxQ^?05I6UUnh7Qn5G{Bzx3Hcd3%`Y zdH{B6qZDniK{TE5Hsu$-9@^&{qv^vZHP7t7J<`l3hP+bLJgj~tw{KA~RJ2dcNlmxA zwQ&J|+egh$nmuzX!?_oA*Mv{LtfCR=;62X6n}5+$bJH!39@t=ZNSmSA)BtBG^l27v z12nC{FcFaa|#fEd_{fytb$*qzvj zVs{`mc6a-+yE})Ndp6x^cXwhp{FZ+Ik@tDt|L$|2>p0B4_nfuYUVAN5RbY=U=Sy)9 z??h8}n7gQ51 z`e9GGX2-?*)fF$0QPMrnj`QCOQE^Ku!8L=srneBQ>ZGBcZO3b(+KVD5(r9fqj%Ngl z+m7(@z&)KB)=w<9z@uP-9nUom61wFX)M1((&yRvnGPtr322a>@l&E<=lP2A<2eDP zKJWHHw0V?x0(FmRWeOzKL?ZL(|KKBGW2pO7N^To z`O@bks^$O1vRIkI%f@5Qbf2B_FE+LcoXqdKVqVp+yfSi57zgPRNX~DgAirm|JPF%8I zki518$4?#Exr-~+ngma<<|TNM`0DPf;JMxIH%S3nkY$|iup%7;F@K`0zmPNMUH-|#_ zIc)v9zq*LB3mkdDn@wWtMEJm1J8|s?JH@cfY&t&7iBEa#6U~ub*f+(A*Bv@2_K(b= z6~QXx${rEBp_`2;7o5SFgzepWQ!o=fQ#c=`W> zpDF2_xDu30x)siaaPs9!X0f+KE^^eIx%0v(;j$OLaIVgr(npFk_;A*Jrs8MrvG79A zL0zEYqQeqIRO=i%*IUJH8zhVFEpupKfQloYrHayTkg=#ZanP?!v3NKBu02j%W`C|o zpPx-vRs1E`odRB`(Sa5!HqP*%kQ!-p zx4?-nU-F_|`%@|Lp%bf~d1L-2m99Q@;(I^K(s5v2OK}y;yXEPg3*436@%?{SpxXnJ zX_<=(x|GVa<}xzrDyYzds7n0?CDD{7Dt@`9IypQ{qwn} zDe%92>BQfbHzQwF9L*o%#O9eT$S^(@eoBtuOj<$j8bh8VaeS%`FcDJ<@O<{?_OujP zs~6ChsqWR8egwc*1Z&j2{oTkqRw30Hd%p3a2W75OXkq|*Mh|*ZI4SfTYuydoepDqM z_-c(ES9c3RhN^|C&b4EAIhaPTfL3-n`T`qA(ga}Iu4KoCz%jHOxOYaLEq`b_o?^k@ z+Gn5-QhFkEg_z3&#!hyg{Fkr3_plW2%b!NSp^3E}UWzXsm`TpyS0nnC`n#T7!n?C? zd_~K&?jzX2ErvEVI;%{sI)t5?GszoCN_XcF-itkVmHv*BcqEW#4_4^0#Yx)0qod^` z;P7nsLj39;A2)W`A3DmNQSIzG~#7Y{q9oZN&gk^%Ny zW8@y?c8H{e-uB$#(jw)@Z0MHBo^{0sDWAVeasl^Z-PJ)!-hn)KXM0XqpJI7e6k5a> zJAUlk*V3QztA`&I8R+LeUZjRk{BhB99K5-nsCnMa zlcL3@T;#}TczDq>!n7IZi>ldw{%JAzK`zx9tl6ZpR^jtWzcNJg+3m#xvVbW!tZ ztp|C!rD1Mg4Nk+0o+AfV^~xDh%-(eRH?m*vICCS9aAF^T+aG+YaNZtkl@I(=Ww{-Eac z`L$`n9q0@{;rkD-OE1uCXmL@^8`sySdj}Kfz*ZGoGV0UtMhWl;RrBtT4Uv%>k2PG) zJvNw-TN_Vz8>zXWe`9(IKbD!D)tpc=fZiRCqn!=a{9DtEY|&q?d&(K>PYZe*6ib1f zoH=z>D>9#np=d{EHlA-oWp6Qs0e6|Mw5L|Tkb$ms=GNCb(cAu#TrUA9)ai!$5&oYx{Cuip7A86Td2%W zd!GC)6f^PQj!xUN>D?qsLgrM*Flf+jO{3R0Fh>UMLB@YG$*MR0uhr;nfouBXbvbA9 zUrh_;VXvHq-r1j8U=utCZdlK=Tu{&C=6T7qIWopFVZ>xktDQ)L8?;um0inF#IiB3B zPf!Ld9>><`9}R52Lh0=k%F8;#lg($D((>tOcB>sr=U426cj!2NG!B^^4m*^Y%SZF< z0kLGY_LMU3=Wupt5JSKACn~SM4CasHnSQssqdXtlk3mP!YVCWal1&KLGUE3?_CeXZ z0eZ!~*iX;rDkDBXtiu^S4?G9eU^^RZrXS^41FGBCE@9E*&_hpF)#m z4SCG76?efsU3u6k2i)Rz5ZXtiv^H zJ~WjH7n`wRwLjL;jy zOvHos@@7f{-hsJ^(Z9RNjOqTY$9#0iut3?XLtT!A1~u+RkPO<}0D1t-G+Fw|0V`^= z9vn-@GlS)%6?M6wjD_}O50&L|eED7n%YYLU; zL`}?BTIjz8laQfV6<#FpYbrWjMn0_0Yk`-BC(Mv)=gNHGT{LOl&6az^s`7t7Fzaz| zjyyN10{7WrAAv`Kcf;j!e52CrSucuWSFV!Z9+hGLS~z~VT6Qe%$>YvN($^>J<;xSL zdGzr}iYT#Beh4;lesCnUJFrF84EE$f=)a$;zfCqeW@Nip@CGloN8aDz%F}B{kn!9> zxe`3y(a90?Hs_F>=c>aD5j2g;arx<H<{^i%vofE>UiuWGiF`S zNxNxIY^Z0ZW{VJHZ0A=T{WCK?M5c2N^oRlF%oM1 z|3qeYxIhiIe3UAGyuA9{n1 z`O;r~Pwu)4PqrQTa{7>5nYbD{fghOf?sHu(Ouazfn4RhREL9?o1Cz*~83apJl`2z0GpS zd^4plu;p)wimZ!!p@n{+?Wt4Jl8*ZYP1KWtW?5&anFdXE;3F4~%4fgLu4>l5Ix5GNiGbg`nlA_Ml*>j&AX{0-Md}}rcbZ2)!=U55 z1)F8I1zL_YEsyE6PEIO_p#Ht#Z$gjcxd?hpg=j$#)7(6!)0qWksG0l{uQt0muKqBbC|yyu~*G!hSrdm z=2@uSC^hDl%gE5#(4seiw?_|GdFU~;3j3Y8TBd_+{R!F_A7}nluc%Z!6nYb>;_{Q; zD90C}C-TvW*SEQ@{D2SJxe35F^Wu~QA4x~-ojCIM8RhDDNr#f5caGhmlo|uBwKBMu ziwhO!Lz29Ki|#%js1(4*_&9HY^eA(W2)WR zo`d$~SngWKU?$O#=S-epdC>}fKCK-&w$apR)8!c2u*HF$DsFA`tbQ!z#n^M&!Ghpt8s_E1B|a4s zo1Ic<={l!E=Ueo*7nQ)dMPxa#>6)tushL7gt-(?B^%mQp|8EKWpLd{&D4&%=`@w^~ zD_vIv^i4(1nuaeai(?{umF&hT370P!mk`E*qZpMP{Gg1X+}i&!uj`d)8me!c65$QY1G`v07{T#EwHelX^^t<^m7T~SJyl1V29 ztGU*T;#6`vGzNQ|Ir)8YY6|Va@o&JryRE795b(DZG<@`RNecBvE>C?8m$bJf%=XZ^ zJ{tb)Y)>UCX43oC8lJ9lq>KP$G~?a;7n3i|bfOI*nY6BlhX2Ln3w)fZ4LIKL5?byz zNDY256FJ3dp4(GRt%qgO!5}S{+oYkJjWXehuf@!Smd;%NGiRseL6a~m6p}%kTNgeb z=B20cPt%cqt>w)-TG1zH%cpGB@VB4MDHvF5ZnEYtt{c4uTI;^cEDv5y=a;Cp_c#<$ zvN@d73@Ow+q?q!)#x(9z2D+NZI>ox?3_h6!-2Tj{xag+x?)FLKalEqfdfzm*cqdan z!qZwbo66xLiFOZZr9A8%hJHx`ZM!#4d1ai;=BA0r1skoT7EI*mK?!t!_hO~Vmd&z( zLnOtVc7^r^YivRUy{@k3qq*zk)*g{`t)nYH4O)Tx^+?Q{yYQnQi)0aa#cyuu0)NXD z^4g+E%E8|l-gh4IJffhh)NxE!xSUWIYw0qq)sH92(p!+l)u z5cvSOsK#C`AI$D2|HE3^xP}(FrUq)dJe`K-X*mA+QsJ>4vv`4OE>nAvm^d?wTso-v zxo(vhel&}^qOM80wN`{&g9n|xnoo7xBtAaPqU+b4Ipg(KVFceh=@Dv#i@QY0>DgpE z2z3g)0o#_yA(O2J_vMf{j2b*>sfJC>j*5q#$f~}9|M#C7{L7}}V*M!iV3*eN`R^yi zgxk6F@R*i8#A)%-{UY>x+Cnw>Y3L<_YF(t_wmL3me^&I*%%zh3bo}r6e{1%&ndil! zF35P=R``0Grx9Wt>hThDbUeAbMSOxcf~v2MtJGxCYH1FA8>iz&?s4LDXPhsi<95Fj z#B8S=Y7?R5@7ffx;9@rIpReUxzthBnS=r?BRl_G|WQl(0x!erX@MP5`q2H86&9D!a zx49;k!w=+X27be0w?%3S`W-LSyy@@*@e4Jw2i~J8XP=5KsEfA`({S73?(kemr_%P? zzcouT=8TqOeg0Fwd;m5+0}b<^nx)pd6l%L(vFIniLJupGjKLcIwbB}XTJYji>$pc5 zE1H0sdiriHhj2-FV`oxyGadT=rRZLrOp5EEdVsVR6S)}QRc=QGP{=&3h&gQJD7nRGx)vlwgabX}o$ zJg>G3Y5QeR;7DDe_kH#?=s@14Q{ECCPn>R`&ZE+)-U=PBO*2yI@@dqig_aY%y=Z06 zRO(M!&V1=jKQ5)9XNvn$qZ~chip;WVTK28xLrzsv$Y-gR3;I^1+t5wDcERT~s!E!R zN#xXD$Cj|_s2P(eI7r7GpZHSn=0x&uqvNhrnzTIbf#8w=|r)p%rC7uNYt5g}of%EP<->Z@wisxw9n}14ML+t2 zdU^B%^h!DorWJU8>iRqL;vMja2#4OlqTe(%!z&OhtkwWsH4$ia`-Wc#yW#He(A_f*G!}J-=k?6_Wk!YX3{6rXstgx{Cz%~ zY)_%eW0NhN4urEDo4=$Cod)HS{#$ufP&UFqy;CQrX&sEszu z8x%>7bKQ9O@mNYzIuO!+;uOKmQFD6+OWmaDl7_mPCbua zIZqDEMSa&z&+UhY%PYMwt5sCb#wlU4A#y**ZFc2z&qvGgs4Levy7Go*L*yywJq#yY z_;RygnKJ~LBs*iio)`e^Mx}*L}qgM$!u6weLw1CI>VDG~7TQ`w4F_U<6 zt&T^%tuJ>bBlEf}p4;B2+mGVjWoo&lS6O7)Vyy_#@~V0U+3A;s%3|%EB^_jvPC;I_ zh8MRfF75j$e=$JgZ+Xfa^dpST)jT}^y5hJ?q4^)3x!%usWy}wSu5WSXESFP?mcaSr zIH2!l#cC~P#NIn|lANyq7Es4Bz~rw7Da+e49c--TocGSk?;lKKT-E%p-c8HUrZMR0 zIJ3vZC6;EGZ#COF^Z9OfqaULO)C)XPyZv5`Ot!J)ItzNXk|X^$xy4eD3v?y@9{aC= zb~hy(+NwQ9Q_jFR+PfCIuaCl1|5hAbL;vXf?~$gaZt>K(og-@ouQKgA7*C~Vf-7FKEW@q7S&sU?tvprqI#G&V?}TkdY2T=axd#9y;@pJXf)$DSQU7Z@SbjBg|Nf zHq2CWub)*!flVrX$x(ClA|}z?DUF7L(<^nbx#&I*_xB_U#YodNH4J$ zSqA$O)P?YB-xK}BZ_IqzfXB;iG+2arX42pkXYO)&xaheilX}l_E`(QG4;m|$oWqRI zQD?qCdy<$6&#N-|;PGlq6CI!d*iuf-O^~7d74zwh@R|Q&)GpWNikh3Dv+W5yurp8e zf0jYZt84f`@KRBGQ5L*awH&x$A?C24A2^}q8TKoM*L--!j?hB0u~s}^2tMB*b>f+g zq6Uu5Shokh-zqwofrm$Gd6V02(XU!I=JB;WcievQ>Jjt_FSMLJ_mH@?EQdzd)A6jI zN5oM3Tq@pJ$5nS8hi?OL!bBbCzB(zEyv&6swvKo6De=qWB5jT+i~$byI3vcmULLNNm zyyU5{>XAubuxGisyb{iCnbh+b_Rz6k#GB6-+;3{?xT9 z9kfoS6HczYH?%r!3$L<7ifH7@>Cv_5vTY*W{_MiDulP~&&;(j~)CF@n z_31xoD&hyZK-1EQRPYIWQ_+QcG&a%5A@OwLvyKOXDsuc3M-49Ocuj5-+BgZh3>msY zd-2oK&1liLSeo(y&(e@i@VSxH>#mM_n~`%7j(OErI);*kid#$Qpn!!e-D$=gg+hUU zw%6!QMWKgGZ>8h>kbcy5BKU_yEjI80bYiZBJ{h$9q{3jTJkEmLHw`EFgwVq^7TOFQ z!psT7s3ESOwNS&oYK^3nnHG9qS;J3WkH$CtheW4WL4UQtx znOl9E1g~EUIiXjg5158rN8}e5fmUH&IIS#ep)rR4X*oXhv5-fK<6nH3fW3af`Ty;| z&Gw~GQJ3$Qtxw1E#D4J zPA#{!4~8EE)06EQ>EPOnN4`@ica2f{g!bjqn`^OT!H1G(G5KlAlIa*|&!Hp0`= zxn2c1_ef{nj^EsOwy%5}9LOIt6pEhiE05Riz*#F4Qs1a2&&PJ=Y(=5DbsNZDnzkH@ zh!Oo|Cw*gX13qf@&H-}Ktp+?DeR=n&;qv%Bf9?~6{rB2PIpJPiJ_KAeVE+Wn z1~uUGwc)|rV4@WL>hRHW@XqZvRZebGkJWAAB^5bcj?1md9ifTsb9xr?I_t0-e5f3U z&5;c%*Wf>SllJeG=gPb*Hj4cITPfGAD$l>_BInU#t!&h_ zB7bQbMNi(YlO6k%Wrx^Esu90Q3LhU%x*G{C@@5%c%A3n{i^OlcLkjD195y+U%Ff>@ zYybA-n&rStuiPt_?ek{Mz({CB_e=4@2>vSq{pG{*aQOIA8{Uw7Ao5||=J9+)xdpR2m+km7`@~8h7`FXdQ8f^b0 z-w%8(t?)S(>mSm$@_X4R$xQVgewX7eK9&_UIR7GFmfZMCP7F8GoQ?UiM777#s)w0g z?Q|3a5Y{U zr{r={++@w-K1mJabIex`>*dO?HNLX*E$DyjTv;W` z$s-pn$jiVU_s{v*Mh5BTrU28rfQNUIE1E+~pMw4RxRo5#7xQl3I^MPXy|M-MSDUw5 z^h2&I=T0e9;|@5hZwX4scZF_8f~Tr_LIKlC4f~*$EW1f57YS||yw;vsa}`}frVRtM zJbhTOa`QOTlv!GCl2>18x|+cS0h{fqr?ghb(2*@#-s-7U%+q4%%{(nMs81~?B4TK( zNz49=w_B>*#d+{xIaNF@USDG93NYu23UeEFD?lw-OU*Y^`}=S7iKS3r``qK#{3q>) zukR9Pw%g)jQdf^7<(>+n|vO{(e*1TZnAx?Y0kQM8j2qAsRjp4 zwbnqRYj9?>eS~RgpG11{Ud2%{iKeH;lW1a|iYxVwG#Nq@$-0&kCt6)Gm7AVKOKhEa ze~rhcYr15tna+H6`Ug`OX0Bbd>Oy#%iWQiARnV}FQFF~4YjL(*3WXO(k@3&@wNITy zR+kiN6|3Q^NqX^oX9}Gkt>ul@WknhI^nSjoSFZR$ z1wJ4Xx;tR(8_tvoO~}Otu6!m^O<(LYX+oXC=l|uJj+(S|d?9olUas8xvyP+|$L_9N z`=Bed7>K?U4HJ!*-IlMF#O6>t!Ulh80zq!o>PKbU@#+=PIuJv zA$?mq^oyz85b>UmP_awf4nOr@uT#+MyI^s()ElYzya$&vbT@DSh#J@rQPw3*L7kjLma_AdF`XyzvO0;B|7NY?sG7(dswL1L zKb5bix5(7hk+i0T2cQ47OYRAXq<|a`HeXpU17#$+&NcGENh{@?GEsEukvk8(vRLk2 zA4PJMJ4YUzCq2BPDZm=MM9-P>?FRIkr@683+)45ru;Tc~2JY=NR-ObtY~9wtlWz@{ zksaYR~LAPDF;-Hga{;pg~ z`(C(S8~5UrSaKYfwIx8yLU!=#FLI3xfonhxil^eNK z&{NOkH-U8hEih4>D0tPK3&jUs+E$ffn)^gQYni&gh?XyIdhq4WRN zfZMOciEgM>9i^UsdM1hu&}e;`s%O>NWRW%&nK-4f?>tHu4YtB}`i1Ks&l&N}1-^gS zgSh1t@nc&iRX&V5@zG6@tjUBog)8^z_dxu~Pl+h)%0054LJNm?u$(Kr*nI;$`qR2QqR8*`OuM; zm|4KH9XP5Y1?p1BX{(;kHmOYY=OklZL(euns?wm6$@FWLp39D?4!t32v;}&;9PUdy z-XxNKvz~A5t3?4miIkb4=aN(XD0d37%Omwn_3Bf1_+7}6`afQj6g@j0S!sH<@-|V* z+c@-G^bENYWv-5+C3bqOGfl{)W*psf({p^wW>hL6mf!;iKjE%a%})M(2fr=vL_Lp6 z%3G-CovGbv%Q}U+HPo}dY;W526MT3pJ^Nk{LVm0TzJIRVxcvb7*2#kTN>@HrdN6ec z4);cV+I!$IGDGX`+scKjsNrcg0a#k?!b4|{CYxUHW!<3T>uttSFD<-Yv$Q;CQYbBk zN7<8>SZ|d{l=&Pp?{OObnmUzMR zQz+fZsQlsQgOP3B=8d%yUu8U3Y7$TTYep##W{lxW9ph+bLbkFYd?eqW7YlFg=gNm^ z!;pm+Lrp!4%F>kwb7(bagjU(h(&a<=ViJ>SwodMu8O#F$8JU-!^8VbuJmnp*#OVrh zyj3qA)L4Sg^_3zhkk=I`H0*3cndH}nue?;K-uM7HE4BmgLd`WPsio}Sqb--)3cXff z2N{{ziu1wy9mwq_J3epDO$$(`82ZRH?*jNLxJ1LM5NUZ%`~tt>-Q%NVbG3=@;dd@y zEKJ(jHRQ3-;q+@i6FKwscmV2}tB2>xdF}mJWrg4N(gGRwv=%%9qACBw5{yOoa!PnK z_MjEgs&sXJVjE32tyatRzE!v#dS2bSZIDT_B8RA>=-#5OvdbkOUj8`}-p#w^yPoCv z)nUx0{XQT+T9v^*6iLOLj=`(Ii_?cjk|q1J?B2|S+cb})>y<9Z-do-H*0Kmn^pBQb zX1a3AZV@!6SFBu>tYt$!ylq9Y{BJiny9;Kzbt_X2ItFiwJ!Y~ycS$a&XveQY&6M~3 zhMekY!#a56zIby_{XMy-SmOq5X(1 zZv&s(glc&3?+elc{u?WW3wXBEa^K3hA2a(4Se90ZP^%!X=VxiZ2-3#rZHl^XIHyeH|=iIsZ&R{ufkA;p5aA#G|26F2& z%muK4A1(34{HKM^O*HWQPvzu_*H~vN8~E`aH~GA}LJ9r!+-#3ZmZ=Rr$thPpeA`M+ zsH2e2I9E;tA2|G8iW&`;SuG=@U4x7wWeU^!nWmack&yURLh@quon=u#cO zJQZO1Svr9<6~l=2}zh1@YLMzysSJFfn}86Z6%Wzm71~&?UliTf@&fC7C`Z zCDM*28tzi*s;OOlc%}{2uqErMN%ts;dQ8#4Z|ak2^~hxEk*VRvaYe+UTgc(6q~(bL zHbUc<W|JE_$_a9+!eSaUE|qyNLqmK)%?yV1BTi7$;Kc9WciCsH&pLb!2{Zb46Z8 z9kH}g8r2)+$`d-9gv+foTD8=bcRpz?_Cfn`Ws)l!iggmNH5v59)|E?M3>5a@*u7u6 z@bv3_MApF!Nr-V2zO{d&J}azxO=liH|X0-zjfgg7k-G}@Hp+Q*7JhNOT?@Z@ZhRqV7D#{#PpHC z>P-z?&US^^x;l#-s~dQ|TrEQInFDR zayq_aAI#Y+&TNPG>;*mNX%31DU$bfPJm8Q?M}&Jw4qX_G_q6G8VS1lK&e+qvOP>@s z`sad6(Q~`Ir$pD2xu}oyyl}!9(IPXKintlr;rChb;&LvX3^(w<*s1!&^Wx~aTx3fX zzUJt2v$!(@{;^me7Qc@Ya|3f}Y;`xj(n}HQHo2r~?8dMN5*L3$>)xvH`G2uiUVN;W zxFLt^J>7VQV}jVP&Y>PJ4g4>@it|erTY{kZcW^6&wGw-zi??S{EBU$c*e}_ltS@v6 z<=r?X;Ic?VZ$0Rjfma3I6eYf7kbOxv>;w13YV@OTJG*g>noot{1oG(=1Lrhx7tnv#8hD?Y|Fw$~W8hPH)vnAadc^WCSWCQAj z%3k!Ke=60fhMMAIS^BmVStPjz{<_kK{A&SEUNCT_J{753elpF({_?4AWjZ`O89oUH z{@uPRUAuukdnGr_Fjl9?x=9o{0T07eU;45&ksL?5ap`llkO`hZ=R$G6n)}f?Qv!XR z?8d?6>eI6W@ziaF8`iFdG^utx^~uEjs%s)OgWG@U#&Zu5t?3^}#opt-ylq0W^WdF( z!Hws2X-0!FUv@phjnlaW*%yl?yH{?k+1izwx=ZvO+@Y82M9=q2+P2J{_1Udx^@14c zW_0IY-P_W`3?^-WJGU&_0lXJuX3Cw%9OzCd;qc7-j_(}Yo5p*C=gD>Bz)nG^fh^>( z(v6Q58$eaS-?rAeal)HHG@}LflzRp)U11o!XDl?Sn}O@7MpEPXmcQ?B1?SOJeloN= zNAx`9!dUtVycGD&l>@b*)G|4m?xM~uph?KrK#txF7mn;Ul{)W%#u&YcC*d=w(-HVM zm4N;Snvk0*@bapF*^|?=pplG*r`ccK2z%a1fghZ^^85BUHkOFTtYU`J?AB;r4gG&@ z{UhaA(g^M}2HHY>zViO#P;PfWhI*#h%dss6^9t}wTa#Smg5VJD;s}l6Dlb`Vb};{5 z$h72qMX4O_3$9Jl#TCA?^3$H|I9yV4NF%vuVIYSEN^;!UOnz3n@ZHjq9<*p9$5!gd zBewy=r*@L(@3!Rwb1+jjwTEnKYR&dSp$>Na{NS;6ev!P9H$1^+ZW{ndCz6&0yFAFD-K!o zKz3Ge9@(r1U)++Nze7u$Sc=QNxhmbSnCWJc9bY_@BhP`~9=X$zm+wfIe>@-FLUZ`7 zc7l8dKKV83qs}`m@;g39?!?|#<${bT8$sn}8jweSN?y%}?^%G6L#`f`wzDHC5&3>E zPac$7%sWe+H`guEUY59q=l`pbtvhs=e`Y{#&-CCi2~Fj)dw8e7hkV)EK;A8)(BkSw z9yHNc)_{iL%1d`%u-Qj0DGLq5Fn9J&HOjO03YCd>E~sw;El%L3ngWNEv(rcQ zsvAr72fHxnG=B%Yr|Vr@xJ7WRfA$XK%cEa;%1UkW`5jC9e(EsuYcf?B8VCKq3tPL5 zGBsD?s3iKKBOON{6bHL zeSFW86>P=rYss|ajSJsgt`Wv2DfGLID@V=s5H^|6Xgzf0?OT0>&H7a8F=6pn~DZrbf={l zRw{!cI~h3aX$MiFS_VDp0^ITs-kW%)n+TYaK`#aw*!_BMF%fx2X52?r#sD$mUIuz< z2JT*MxcG+sx788@Z-^c%dMlYU{Fs5;TnrOqKV?#16L^(UVd8al%rmANSm!oHEIO1$ zzp%C+zBN^RI}APKmcr-%#fSGR&k{GFqwwi!D1;TwwsXbF4Ox^u1Q=lKT%jyQ{x~?a zR}+4SyQ?$k;Y2q+f44xq%*>$rH{5tktzy&;+^n&gJJ+TED7!l5=BBwL2dpHmhL&&aRs%1)V@ul|pz9mr&Xux}#Q?ou zLa;keTH=V@a`^Cna^tK9Dw<=HNkewIaj%ZfwACt;evQFCJ5`PTKnAV9p=ZAkH9SN! zX#Pw$eqq+o#X1?7r*Pv%OLg=nBApfv;`Vo6^S~ZA6@86ATuSM@6zX!Ry3*#2H&stc zp~u&OCBo_>PbQvdoCl}3@qmNW+=5QfB1-a@?1>q#-gL4YGH1_wu--a| z(r#O*RUHrBcB?`15@ZY_PYlW zdT#lAI@WA>h9|o6@8Pp3t9~?as_Wn1*}N?p9K!#8XWOs9cunglSNvze^DYIPV4(7E zz2CKXINp%2?pnHCHM3X!OT|-g;cMEEX!cbC}F04Urjj@JlL@!42;`Q`aJ5%Rnb#x+r7D5 zkQ2yTk4oT~c2cA2%KbFRzTDhJZrjt5y^kx%6zDCdEp5m3#wnE$xbfO)i1m}gwJT8_O`o88d6|NU*9v_4dmPdG$Vy=9xE|Ly90 zWKa}6J+WQpp02{-z#biD?v1+u1oAgC zWt>jSzrTUYdUi?XT0_rg8$p%5Zpx0Hm?2Mr57MD~az&6Ww|Z!%?3+)Jk6Mzi^ou}_ z`6~pCTJx?%;F+~~at3mAB60jM{gYId!lSh>e4=zeWWM=_JOTfcS?U5=%;AfyjUN3; zsA$%Ad?y`_n5plx;{5T^Gr44@89B%$d1CVi(hA&HgNvou@aUE-^$WgCCGGjgw5#$$ zq?sDubL2Oba=`^*PA$rrJx6EAX9vK2fxB4NDM43f7Ods6X(nCI?M^q z_TucCvt^6T$Rqyh$t9;vkw1Vx$8GWCg*`{hl_j9n?C;5e?FP%;;I0?E@_@%$uyl@x zrf9zhzdhMOt}KaJBquMvKe)U62n^GCmlv0+-%M7_vrvQCo?K>W0~uUiAsgYzHy`^- zyB0XM^5o8UE6CS16=c?UaMdavvYj3tWlcS}(>Q1O%z)<{JQ%$Gr6XoPSDrHR%eC*7 zd1DmX-4-*2wl|cpG=-|KaOW?>HLO2v`xuq}Wn<|u_VMbA;*h%{Zzarsq@3 zSD5+@N1ltHo-cOaZwgf>(72aaCyzv!PC^qN6ocMVb<9RBOQf3rK{HV1hN-nGiSnPT7(rQBOn?{@JyRmgb9Z_&P4c^~wyv5F69P>*5 zd+g}jRP@@DPDK}B|NRFSZ3=89R5tKV&v4^4%{q$8Ju)z-?9OM)28vJMKrZcf=X$k! zi}0rzw9&@M_6-M!QKd2oz>s@v941!u2lr((a(KzHqEA*P`4m83Q6fwc+~?v!Z5BEI(y$P%sO!G6AAvUIh}6LL*IOz9^7pj#cVM0f?zjfqovUptpCrFjC8CA zask4P99_kWzFdU1WSo&tUi7AXXtsy1G;(R1a@0Qzx)E?h|8iUo^(s>CXD6na9{7gI9XLZl~%rJt#o}A4liuv8U&6~ zmiC&(bKT)zVI8VWA3l>GK^MAu@SH-|_`RCJ?N%mJ$@0q;tMSt~u_tCRzHL*+UYpF? zphP-*>7)|fEQ}j>N}w<2;*}3U6Oj2455Dq_Qf_)VdI7CY!)zn}r!=D~ezD|`R2tga zUf|mlDzUvZkBRR~qaQ-2YAnq=C-kRjoq&Old-0W%gD~?7PlobdT;c0bstVjYE(d$% ziV^T9z)VD6PoCyCisnaPuY^Wo;nOkHx0r>Z!4Le4jfaLzAU|+r?$A_R2@0c4%cJ3q zY-IPUQ&2NSQ(`0F?a=9T`+XG6h;-*`w`NkWZ&A?U|F71#Q$8BHyZ_-~bg=2F;qNim z|B?c}qKk6TFpjsy#LSCD@k?75bg>!X&SyYT}NH4kIVnQt9gx? zjygU(C1dA0a8O+xS;i+wpD}ivcPSBmB1!W31{;oYO{BCTDY7Kml1~>T(5Zwh*|Hq? z-zf=HbUq*6p7nTmQ(((I7v(X`+I2Dmzcl;0{BDg|R@Vdy{cuO#e`L%Bz^lQpAIU!O z7LRL;^X@ODbEFY-LIO=Uyp;{AROFIN2{ZtBb#ONFq>~fqQS>)??b&ZRC?5+_*sD8`)$Hj+RJk4wRqCiHD$T1Sen{bqw)Rv1rv9P2{|oi1a6 zZwo(xOK+ga^Z1PoZ&~t}Cg0+s;_&2t^WXW7P8`%&EQ*C*v$29pT8$z$K5uqm#Rm=%+S z%pMCKx!YK1`oc3a)`BY=YKvXiN1%0K%VH~0@kch9G_>S>za53&)*O0O4cOzByBKSg zOZ9;(w(a*7HREzAF3^%!CI*P0Z@IwRmK?gHrC6~nkIENWa!=sZDez?)`qh#@9P1*! z2O6M+`ygvxHFJ`1n^!

    %5Ji|Tvo0qd%!Qefnpe$m#M4)&G^Ab{N(^SP!58p1j{|)En#vvFl8iiL$n+t z$I4UWI5}RPCnv~>@^U#zULz;Vo8=TaRZc_B$Uuh8luyf9@+F|q9Qig7POkh+&O;ut zDb9+E;;OhQ?n+suqT+$P;;qyHPURJjAB2?AyhR(dL-N|+L^L@1F; zloGAPD6z^MWr=b|DGzi|TV)a78mTSRc4|L0QXQ?1SI?>0@M;6zI~81M2XfK{?SOH@ zxMNSL{oYy8FT?q zRvxV)&y|mX!90`8Db*FC7|4jNfotj`8*Wv-wIx>5AySot5T$oBsQ)V$!lx@WZvYpsqHiR9)X0z|vnxrKOCd)`N*+!-#GM2#JO6GU+ zO@tt!4|dBmAyL=}mU9-o>b2l1R>tmV2qf4W5qm0P^cn1fOu4r@NnNIH!&%!9dq(PG z^|Q#71&v0CBNGq@O2T&+n#rd9ik89o$5a-%qbt*onaXIS1H2=e%mA7{LOu{5t|1r5 z{Q^eRix1;Rf}^bC&+{#WUczAP+?B$9;RNzb7qJI2$7pdT_GF}VKzb$lP#y7jAzUd2b^cZqcpdJYvzf|9i2v`6yPcnvBF+beVjuE;uJK3t-BjJVc zHEmC?(GNfl!NprErncCNv>(&bWpk|-INgEuYSrvWr#9d8KsN?`<$puRc0u&!KZ(ON32j*DQkfgwW6duK%f+K$){asU$z2MNdPv1-f4YOdq9rjO{_+8w zi!(giRNBCIhv66#l-0^Ezbr79 znQP1~=05Wj^bD+TqNAN($jB92kP)1~IJWqKI ztlp1r#`^>32l7FPFTs3IXbK@vD6R?3#5v*;C=(3g@*p}4n$$Qt8OJnJE~&b= z>LvAhdT)IqILdzgr2bTAj22MQLX22rld;G6!u-b0PHowamNa7P%p7K(Gar~vh=XCQ zL9UUaTo@P4E#;1J1Nc<_Eni7!EOdr)FyEdV3xmx`K*(doAAw0*O9K&aGNo+kOIm@} zrfrbv65z8RXd$_@Tm$*64?HkKJ}F;8^eK!yGZJiyQ9G$8)mzw!OTc*F=*z9Rlj~?Z zf}t8S9>}8&JC0q)o+UN8`5ZVm^8G3>w+-ADZacS=+r#bW4njdV!JUDRT;{HUdEVh3 zK=F7EMeH5-jQ12;LQ&f;oD%Aa8Y1*SVChAe;iqDCDOj2!Ed+YqDczSGXe~sfiSz(H zMc>fs$ivg+)p84X{3_*%QcaCgrz5uBW_Nk zi8O`&hW%R$Q7}MGf|hYqIRzfpP~8X4O0-_knNEOxh&`tQs zAgFq4O#2nrJ)G=0w;Y znaMxlD+-os^#ihQGUlMTSQ=f9VHlhx7%o(I!OmbVTyYaxZm>>V)%c z4X=m?Pq?Dp(jI~#^fh)H4-6HEItEzT#yHt~k*l&2YqBFr4p63yEc-Rrf!iiD7RQKN z5WUJsJ*6?y5}FRqUL83l7W<-*QUR#rl47VmfO3|pb-_~-kWE)>N8o)Iw0Bx_eKzLT z!>DBtLp6MjAh3c1#%1_iRkMNF7E0c9=)>3-zE1YIUxKO3)MUm%!MMUaW)`t-#FvDS z-$*6wi9qb;hWuCjH~e={Q=<53$oxHlLRJZTfK(p}h2e$6#CbT@!{TqEJ5=^Q(g10w z6o{NUj|Rf;h5`|ufL{4Q9<6MI`f~tEX>)ayx<@s%9@=PaHt^DW%~v0%r|3E&T9`4) zhzDX~%qXbswg4x5%Fkx2&G<1rfJ_{*Z{wldU54)boJ-?>#!=+qD5?Sd%!T5cEFKh( zLGyhpI!L9YdJ-pfl4gS;-ba2CknPvdBT#UifOXHwB4WT^rMPMWD}4!$cTwA{zt<0d zElo8yndePguoFI6WV0=0&NI{5`G}q^NM~{ex{41cbGtDwz4?k&s z?MJSXSH#AB!ByqF5vfH^=TZ>`pK`_cD!j-y;lJiPVl5`~i}|hCrN?+zp&s^Vdtr(& z2j{;-tR^*-u1YR62w7z%U5&V%j=cArzNVf)>Ca_GX{8KRrUM()03wKh|D3`3^I*Q0 z5Kp{x1zfc*A_))WYrb`i(N6Z4&qLFCN6K?NH;|i# z*f)?b>4hJdJinZzJ3oZcH?;f%&?dI-+AIGZ;Q-zv_Qt{<&>nMv@=M zRN&p4@fqbX(N1<+_!)Tv{tF zm0zNg)DU`NC+Pq45$%dVqh7A3>&Jj?ac#6@CtCuh^ELAo+m8Jfcz+tZh~32=VlT3{ zke!Q=iKGDdWp!w%gSpYr&M%-Qw20phy}1ZfqmDvvMB#Gaf1|~0u>|!2I$Z^YBbQbJ z`Wzwugbeou*i#Jf;4#G&tSD4XR=2C~;b}oyPi?HWO}nnO)5G)+dJkv^n~kebs7oO# z;CrgmoNO+@&);Kh?*Jn_CeN`8-w_9{0CGbu%!R}mTw`$F5!^y9kMqa=%jWMP!*PP2 z5P%xeN@1IDQ82(n)&u`LOU0z}zz{@gf|$@t8Y#s}v!s>MW@(pn3hLP%>85u3bj#EudG_YhbT6gc{RB57)=&Q=!46LS1T$Xj9p2 z2ZbZT9AnzQ{UFoH=8JhK1_k0OaHcbK2R}A|4M%O`HCqr$ZZ)Ekrce$BLn~N>xc#0K z!3+(=E?L7F&@uzDVypOG@W%O=la0t47FW9>+z}XL4pSVC)fjRcZk(F;Utm zDKw160RPRx93&u@9z>KX`X_ci;&k#18JJNHoiJ|nka#neWN`xn>ktfv>+9B;65W_RgVnhv%?ojpi8BL)c z^nvzw3&G#Ged+c9o3zeL>#BTcJ#W1NrgOF^3Ppg7yg|#TCfQ4W)C^ zcAAD-@>%LFw*dLNB?hK2nQ9$!xFxiink~ztq1))LdyCHriUO z0-CL}Rc5qRWxSadK$Kym7u4O0+#KlIKMV6w4cY^}sXVYO0i!vO8pA8_e%8+VyUBg! zLEyyWfZ=Asmu00X&}~of)&yl8valmq>2P(jI!E1)y?GrtmuQ=`{n|aPm|jk=4c{FL zb)byV714YoRL_%!Y&OEa8)i;57o#%y3zSBihqFCTm1j6+8*_v?W5+XZ7*Dnja#kVe z<;i3(G`yl*6^XFUFHppIg#FbJt zFtjFeL1nRp-hio{?e+iSSm)D1b$Im&@q<_h@lHdQ8z>EfS8tHENt!kb>Qgskn8hu8 zo$a{R0oDGSoD10CcR*Azd>VfdT2phd>Pld$zeu~~M{;v8=Ed00A?lCnX|Qz{xMyjhlduDdho|T(b(YRbPoyyDFPA8lzk(_; z3@9~2o~0BR*IR)-?liKDj^WPj0j+s+fd~2ZYZ?Q-E+L3oG z(8o-E9-n|ti=X(l=x^D>pW`nBkK6@MdC7l(!dyfskNQ$|;K5ed$6?Tw6NC-+{qPnU zxuPUV)1)NnFskc0K*Y}^8+?_ejc5S0wPY~-H2NAiy(m=K%HYUNp*eL@Mnhp*1mvCq zym%UXj;d2oNlHb<` zanAN0t3>cnPd1M9;S`+P82H^ael+-1me59w0*1FLMLoeG=7aHdM8?a8KNMD~=%s)V z?cb!7=xndQmPP%w5*fk|=SSgP#-rXgm7jqb+KzX;!@sbrw>O1%K#uQ3C#jHB9E_l% zWaSc8qLK+@(n@MCbp>M?EJaGAfly{h37DU?;N*Ly4CxqV>7MkG7Q~#0$TAI-uc5!K zS4OC})xug?RNB3?EFg?WT2Z~KUK98(-*<|FsjOlOiHF4T(8yht62M}cfUVzX<@F)R zue(w6vHB|%<128pZ?W&jK$HCqO6FVOFlSpTrYeTngX%{!=&-Y}_kSiSWDk06K7f0; zb5>og1uCa2fDa#VT~LYN#}lD7(Dq5;H`K;Th~-63WX?9|AQ}cuX9Cd10%Xy<;v2Cz z_|VUY3r&EqBzZm5#|x+}zd_#Qz*NH2A>h-$s3)L`r z)9N28!E}H+){O~adPDIZh_0OBU|?gQ`b=Qv3?jyr31Iw)< zO~O$g0ERVbC{048aX*-qhf)*%(n=YGsJ%~X1T|(4Fw_%!&iclR{<+Tfy69JIKXxTz z!2|XsTa0k1Mmce>xxv`C+xVqGv(_iGgRuUuxRE@*DnPsi=ClH+xi+Q1gJtAx;BPgt z52rx|{{_753#~rz+jC&tFQK>bdUJHIY{Cvxi~u9pSZw4O1%mwBy zaIFhlmi1y~(iqi`ZuWRIpX|c16bFNQ02QPVUy85BH{`n@{`BWNLBYC++B88Os)@K9 z-AI?g_FbeQ(ggG?oItOR11(BRL&2I2&Ab@6SxvbI^85mH5S)_>q7GkL-Kg$R52#*1 zUtOSB#A?g5KroSLAkGBrs9JV(+1&WmIBuLn@602kv`MX);ZeYzOJbNQ=r-EUlt-i$ zSzkohKI~BF)$7Zsw&NLzHigR79m*C9p4C8Z z4&FHcn#N`MF;I9Rr55T^3y=$UE61^4?{!CV?i&@L2XTxqDpYOIG1whBJOWB`928oMy9S|)Xf*QL zBGg=~BA<;!?Q{y*&^&ZUHHJ1Z9Q|9PC9GXQ0eipRNv<9g@b2h|n1JYfoVSTzh{b{J ztB8%obx@8@qIUTLyQ#cXM>0@L=nma^f|Mrd%1U&Zd{C~b)AT^24?1#28>^spA3`^v z{hQ2!3)p)eyiiB>XHtMHhC|W3%uePqxUt};NBOh7htLys)ons1Fp(hkM13k)wT0*V z*w0v}jaaE2SgXC*n};xuC&7y@0LxrQC*NK5A#msmu!i@lqgGHWtQFHrXr;CCi2R22tXu-N-o~30Q*r{pkRItPKBn`XoJFYA0WV?`Wm!aQOL{3Zc(4Zvm0rl+7NUd90wyPg`8R$9z72EG#=W_DpdLR z8X3UBS*Y#bMqU4nQP3=cDnMnkme~{QI}ch){&_9{{`iTlPgWy~oFm`EzdOLIzela} zJSqUw#5Lk=sT`2NT__1}X%X23TI?u)C+|bv^Fp=tmf{9Jl?J8pjCRAqv55ujp9Kkr z5@>O>S;#KWMNepzx6oO2gT~84l%i@$^r`LuF6;@ldW%N&ItGs%cfj)LWL(!0Lsy`~ z0&Ees9J>WxTo7ol33_7wQMK&^dN}%^3+frv-(je6Z9paIEtI?0stY*m3T-X$TSxRp zj6nV@VDDAC21VsQ`-F7@>OV!^fTMeJ!!6Ef^`2xFuz#K@0$PT3O-wi7x^NN!To#3z zXAB~KKIZgA&Al0v-T-JCL8!UMh_T`nF%FgYc|a+Nh=WO(yJT@QdNWh8kJH5r^k`;^ zr^PHFm~8Co+fX8N(e;uCJ<=vQOD?F+yP;lI7C6L1@{+u<;~9wu8quU?V7LKNpcDk; z9*nsRmBP@m906n!B}GdyQfD<7eaWH7(c#eSB2g2F2B(h&8jDlo)p>{piRhzE!tP1N z%%=dMrGeLFs7Ju3PD3BRq*7A@s`WFQAwve3fo71|89G=`GZfvO;ZQ*GtnRkl0#>_| z&6ROu+>yuYFbup)LoD!Pn!(Egm_Xp)&ZxrmWI~xRCLEC=AKk~GS~i85hyIO3W;v6D z+@H*BhF7MdKRO*q`3RGVN>mnj@*nYhGP+<>NGkj!on)ZaoC(E0i(G=Dn1jfDpX9=S z^1y8KF~2M4#^s^{nTNP-6PyJX!Bub*+|gH2QScDFppn%P7=ecxs-d#whb}9BXj6fx zoOc$25eY(piNl2mArcC9GO7tt@@`GzYScHt3Ffn z&^=_+oHZBC6`jBCz=ahx4V%QXQ#L(BCfXfw&sj#GfL)1WJ2FWU;* z>)w>rkQM#VA>$9VDiATc^Y6SWoQ+^3foP(^Mq;7g#ynXewGtz*KbJr=yZ^+ROqD%trtIZLkRY zUUw^Kj}_qZj0=;$QEaj3gmo{$7T*bFbQe8BPmYyamkx0zgID~koYfCIY&i+KQz)nOUdT1RUYtu?e( zFcdt}T0Lv+td+CY&04i&b~6DFd}%<9xYhP=o`yATAj7voQ3vMsiVH3>VAAaq;NHO@tD*2DSMVbi1ZQ>C5D@ zxJz6Pcbm)oSbMk0&a#XA&vzo(JY4O)o8IUY@K*_TEiveRF~L z?Q87oYX6L@wSLwb+XC``&eTq8*&5b0+|}M^lJ9l-{+6xhfLGiH!*Mpe(Syezb7`of zH8b#iKyj}2&s6+ZJl>Y*YKy?1yp77Twf=d3ql37!dC)c8(68l9dFo63p@%2`2mMsh zIPWP+9L{~-U-Vhql3nc>DF>P88M2TwGLSp6j~6lzkF4W|tP_Zg(-YYy0+}WTT8h=n zWy^K7e}>9OtS1st6z`&9_{8c3$0vx(;v5Py#lWFTGd}3zBd9Oi0&pE?JZ|k{Z~IQ> z?R)v}W0EZ#*G$Iq7(^3aM3Mkx)?mbtaKw*jT;xz2 z@~0berw8&TgPiG$oEd<88H`*RjyxF+{uqaz&_r_t#$TNx160_0O>wz;4MzoB? zIi}#e@__Rxjz1E!o+z!s(cVVY&YSw-xO(E4VsRW9_}i9;c%w5f0G)V|=(kI;ch%)V z|EJjhky!iX=&8rSB^R~DevDPtUa!b_AWHph-nJrCEIN7O_;|aP^eOKDIp#NrRZFu1GU7!4%+CAOR?&|@lMh8K|3P#^;C@MwaU?7o3lo4&jpo`@; z@|Fwol{e7T-y$hnT2VWfx^Iv1&h`jj(H`G9L}%2jVT(_VexY41At}&ol6O20qWg=Nb4s1D|K$^9+2RfzLDWc?Rq=@Nekx BfsFtF diff --git a/externals/tinyobjloader/vcsetup.bat b/externals/tinyobjloader/vcsetup.bat deleted file mode 100644 index 921c1e9..0000000 --- a/externals/tinyobjloader/vcsetup.bat +++ /dev/null @@ -1 +0,0 @@ -.\\tools\\windows\\premake5.exe vs2013 diff --git a/src/cpp/include/photon_map.cpp b/src/cpp/include/photon_map.cpp index dd44c66..8ffe7a4 100644 --- a/src/cpp/include/photon_map.cpp +++ b/src/cpp/include/photon_map.cpp @@ -1,5 +1,5 @@ #include "photon_map.hpp" -#ifdef defined(_MSC_VER) +#ifdef _MSC_VER namespace std { #include diff --git a/src/cpp/include/scene.hpp b/src/cpp/include/scene.hpp index 0b4b564..286daff 100644 --- a/src/cpp/include/scene.hpp +++ b/src/cpp/include/scene.hpp @@ -11,7 +11,7 @@ #include #include -#include "../../../externals/tinyobjloader/tiny_obj_loader.h" +#include #include "core.hpp" #include "primitive.hpp" @@ -932,46 +932,46 @@ class Scene rtcCommitScene(scene); } - void build_hiprt(hiprtContext context) - { - std::cout << "[Scene] Building AMD HIP RT scene..." << std::endl; - - float* d_vertices; - uint32_t* d_indices; - hipMalloc(&d_vertices, vertices.size() * sizeof(float)); - hipMalloc(&d_indices, indices.size() * sizeof(uint32_t)); - hipMemcpy(d_vertices, vertices.data(), vertices.size() * sizeof(float), hipMemcpyHostToDevice); - hipMemcpy(d_indices, indices.data(), indices.size() * sizeof(uint32_t), hipMemcpyHostToDevice); - - hiprtTriangleMeshPrimitive meshGeom = {}; - meshGeom.vertices = d_vertices; - meshGeom.vertexCount = nVertices(); - meshGeom.vertexStride = 3 * sizeof(float); - meshGeom.triangleIndices = d_indices; - meshGeom.triangleCount = nFaces(); - meshGeom.triangleStride = 3 * sizeof(uint32_t); - - hiprtGeometryBuildInput input = {}; - input.type = hiprtGeometryTypeTriangleMesh; - input.primitive.triangleMesh = meshGeom; - - hiprtBuildOptions options = {}; - options.buildFlags = hiprtBuildFlagHintFastTrace; - - hiprtGeometry geometry; - hiprtCreateGeometry(context, &input, &options, &geometry); - - size_t scratchSize; - hiprtGetGeometryBuildTemporaryBufferSize(context, &input, &options, &scratchSize); + // void build_hiprt(hiprtContext context) + // { + // std::cout << "[Scene] Building AMD HIP RT scene..." << std::endl; + + // float* d_vertices; + // uint32_t* d_indices; + // hipMalloc(&d_vertices, vertices.size() * sizeof(float)); + // hipMalloc(&d_indices, indices.size() * sizeof(uint32_t)); + // hipMemcpy(d_vertices, vertices.data(), vertices.size() * sizeof(float), hipMemcpyHostToDevice); + // hipMemcpy(d_indices, indices.data(), indices.size() * sizeof(uint32_t), hipMemcpyHostToDevice); + + // hiprtTriangleMeshPrimitive meshGeom = {}; + // meshGeom.vertices = d_vertices; + // meshGeom.vertexCount = nVertices(); + // meshGeom.vertexStride = 3 * sizeof(float); + // meshGeom.triangleIndices = d_indices; + // meshGeom.triangleCount = nFaces(); + // meshGeom.triangleStride = 3 * sizeof(uint32_t); + + // hiprtGeometryBuildInput input = {}; + // input.type = hiprtGeometryTypeTriangleMesh; + // input.primitive.triangleMesh = meshGeom; + + // hiprtBuildOptions options = {}; + // options.buildFlags = hiprtBuildFlagHintFastTrace; + + // hiprtGeometry geometry; + // hiprtCreateGeometry(context, &input, &options, &geometry); + + // size_t scratchSize; + // hiprtGetGeometryBuildTemporaryBufferSize(context, &input, &options, &scratchSize); - void* d_scratch; - hipMalloc(&d_scratch, scratchSize); + // void* d_scratch; + // hipMalloc(&d_scratch, scratchSize); - hiprtBuildGeometry(context, hiprtBuildOperationBuild, &input, &options, d_scratch, nullptr, geometry); + // hiprtBuildGeometry(context, hiprtBuildOperationBuild, &input, &options, d_scratch, nullptr, geometry); - hipFree(d_scratch); + // hipFree(d_scratch); - } + // } /** * @fn bool intersect(const Ray &ray, IntersectInfo &info) const diff --git a/tinyobjloader b/tinyobjloader deleted file mode 160000 index 45636bd..0000000 --- a/tinyobjloader +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 45636bdcef1a4fec140346b90c0b50bf0bc3e23b From a5ffd0fbe433a63cf6b106298cea593e51a0a783 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 16:53:03 +0200 Subject: [PATCH 06/27] fixing example compilation --- examples/cpp/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index d22f844..ec90ace 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -1,3 +1,3 @@ add_executable(main "main.cpp") -target_link_libraries(main PUBLIC pm) -target_include_directories(main INTERFACE "../../src/cpp/include") +target_link_libraries(main PUBLIC pm image triangle primitive photon_map) +target_include_directories(main PUBLIC "../../src/cpp/include") \ No newline at end of file From faaabf92fdc72e5663a9d1c47f60367538823a54 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 16:57:03 +0200 Subject: [PATCH 07/27] Fixing cpp test build --- CMakeLists.txt | 2 +- examples/cpp/CMakeLists.txt | 2 +- src/cpp/test/CMakeLists.txt | 12 ++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d58b292..0987726 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ project(photon_mapping LANGUAGES CXX) set(CMAKE_CXX_STANDARD 26) -option(BUILD_TESTS "build c++ tests" OFF) +option(BUILD_TESTS "build c++ tests" ON) option(BUILD_CXX_EXAMPLE "build c++ example" OFF) # --- Build setup diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index ec90ace..380fd26 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -1,3 +1,3 @@ add_executable(main "main.cpp") target_link_libraries(main PUBLIC pm image triangle primitive photon_map) -target_include_directories(main PUBLIC "../../src/cpp/include") \ No newline at end of file +target_include_directories(main INTERFACE "../../src/cpp/include") \ No newline at end of file diff --git a/src/cpp/test/CMakeLists.txt b/src/cpp/test/CMakeLists.txt index 4fcdd35..f2f7b77 100644 --- a/src/cpp/test/CMakeLists.txt +++ b/src/cpp/test/CMakeLists.txt @@ -1,11 +1,15 @@ add_executable(test_image "test_image.cpp") -target_link_libraries(test_image PUBLIC pm) +target_link_libraries(test_image PUBLIC pm image triangle primitive photon_map) +target_include_directories(test_image PUBLIC "../include") add_executable(test_camera "test_camera.cpp") -target_link_libraries(test_camera PUBLIC pm) +target_link_libraries(test_camera PUBLIC pm image triangle primitive photon_map) +target_include_directories(test_camera PUBLIC "../include") add_executable(test_intersector "test_intersector.cpp") -target_link_libraries(test_intersector PUBLIC pm) +target_link_libraries(test_intersector PUBLIC pm image triangle primitive photon_map) +target_include_directories(test_intersector PUBLIC "../include") add_executable(visualize_photon_map "visualize_photon_map.cpp") -target_link_libraries(visualize_photon_map PUBLIC pm) +target_link_libraries(visualize_photon_map PUBLIC pm image triangle primitive photon_map) +target_include_directories(visualize_photon_map PUBLIC "../include") \ No newline at end of file From 08332b9aa4347173ad7b9e024b17e666de411295 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 16:57:20 +0200 Subject: [PATCH 08/27] Not building tests by default --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0987726..d58b292 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ project(photon_mapping LANGUAGES CXX) set(CMAKE_CXX_STANDARD 26) -option(BUILD_TESTS "build c++ tests" ON) +option(BUILD_TESTS "build c++ tests" OFF) option(BUILD_CXX_EXAMPLE "build c++ example" OFF) # --- Build setup From 89e830c19faf6186278a88b87bc687286b8049c6 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Fri, 3 Jul 2026 17:03:27 +0200 Subject: [PATCH 09/27] Adding dep in pyproject --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 931503b..40ba261 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,7 +74,8 @@ dependencies = [ "embree", "llvm-openmp", "tbb", - "tbb-devel" + "tbb-devel", + "tinyobjloader", ] [tool.setuptools_scm] From c96cf90efa5d6986afc3aa235b95fe17cef18d3c Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 08:17:28 +0200 Subject: [PATCH 10/27] Adding hip option in cmake --- CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d58b292..a69a97c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,8 @@ set(CMAKE_CXX_STANDARD 26) option(BUILD_TESTS "build c++ tests" OFF) option(BUILD_CXX_EXAMPLE "build c++ example" OFF) +option(HIP "GPU support with HIP" OFF) + # --- Build setup find_package(TBB CONFIG REQUIRED) find_package(Threads REQUIRED) @@ -29,10 +31,13 @@ else() message(FATAL_ERROR "Could not find Embree") endif() - # find tinyobjloader find_package(tinyobjloader CONFIG REQUIRED) +if(HIP) + find_package(hiprt CONFIG REQUIRED) +endif() + add_subdirectory("src/cpp/include") # pm(photon_mapping) From 3883350dc35d8d74a2e52f8332b2b893943be3e6 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 08:38:45 +0200 Subject: [PATCH 11/27] Adding GLTF model loading method --- CMakeLists.txt | 8 +- src/cpp/include/scene.hpp | 184 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a69a97c..869439f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,15 @@ else() message(FATAL_ERROR "Could not find Embree") endif() -# find tinyobjloader +# find tinyobjloader & tinygltf find_package(tinyobjloader CONFIG REQUIRED) +add_library(TinyGLTF::TinyGLTF INTERFACE IMPORTED) + +if(DEFINED ENV{CONDA_PREFIX}) + target_include_directories(TinyGLTF::TinyGLTF INTERFACE $ENV{CONDA_PREFIX}/include) +endif() + if(HIP) find_package(hiprt CONFIG REQUIRED) endif() diff --git a/src/cpp/include/scene.hpp b/src/cpp/include/scene.hpp index 286daff..3ed1e18 100644 --- a/src/cpp/include/scene.hpp +++ b/src/cpp/include/scene.hpp @@ -12,6 +12,7 @@ #include #include +#include #include "core.hpp" #include "primitive.hpp" @@ -856,6 +857,189 @@ class Scene } } + const unsigned char* getBufferData(const tinygltf::Model& model, int accessorIdx, size_t& byteStride, size_t& count) { + if (accessorIdx < 0) return nullptr; + const auto& accessor = model.accessors[accessorIdx]; + const auto& bufferView = model.bufferViews[accessor.bufferView]; + const auto& buffer = model.buffers[bufferView.buffer]; + + count = accessor.count; + byteStride = accessor.ByteStride(bufferView); + return &(buffer.data[accessor.byteOffset + bufferView.byteOffset]); + } + + void loadModelGLTF(const std::string& filename) + { + std::filesystem::path filepath(filename); + clear(); + + tinygltf::Model model; + tinygltf::TinyGLTF loader; + std::string err; + std::string warn; + + bool ret = false; + if (filepath.extension() == ".glb") { + ret = loader.LoadBinaryFromFile(&model, &err, &warn, filepath.string()); + } else { + ret = loader.LoadASCIIFromFile(&model, &err, &warn, filepath.string()); + } + + if (!warn.empty()) std::cout << "[Scene] " << warn << std::endl; + if (!ret) { + if (!err.empty()) std::cout << "[Scene] failed to load " << filepath.string() << ": " << err << std::endl; + return; + } + + // map glTF materials to tinyobj::material_t + std::vector convertedMaterials; + for (const auto& gtMat : model.materials) { + tinyobj::material_t m; + m.name = gtMat.name; + + m.diffuse[0] = static_cast(gtMat.pbrMetallicRoughness.baseColorFactor[0]); + m.diffuse[1] = static_cast(gtMat.pbrMetallicRoughness.baseColorFactor[1]); + m.diffuse[2] = static_cast(gtMat.pbrMetallicRoughness.baseColorFactor[2]); + + m.dissolve = static_cast(gtMat.pbrMetallicRoughness.baseColorFactor[3]); + + m.emission[0] = static_cast(gtMat.emissiveFactor[0]); + m.emission[1] = static_cast(gtMat.emissiveFactor[1]); + m.emission[2] = static_cast(gtMat.emissiveFactor[2]); + + m.roughness = static_cast(gtMat.pbrMetallicRoughness.roughnessFactor); + m.metallic = static_cast(gtMat.pbrMetallicRoughness.metallicFactor); + + convertedMaterials.push_back(m); + } + + for (const auto& mesh : model.meshes) { + for (const auto& primitive : mesh.primitives) { + // only triangles + if (primitive.mode != TINYGLTF_MODE_TRIANGLES) continue; + + // get positions + size_t posStride = 0, posCount = 0; + auto posIt = primitive.attributes.find("POSITION"); + if (posIt == primitive.attributes.end()) continue; + const unsigned char* posBuffer = getBufferData(model, posIt->second, posStride, posCount); + + // get normals (optional) + size_t normStride = 0, normCount = 0; + auto normIt = primitive.attributes.find("NORMAL"); + const unsigned char* normBuffer = (normIt != primitive.attributes.end()) ? + getBufferData(model, normIt->second, normStride, normCount) : nullptr; + + // get indices + std::vector primitiveIndices; + if (primitive.indices >= 0) { + const auto& indexAccessor = model.accessors[primitive.indices]; + size_t idxStride = 0, idxCount = 0; + const unsigned char* idxBuffer = getBufferData(model, primitive.indices, idxStride, idxCount); + + for (size_t i = 0; i < idxCount; ++i) { + uint32_t idx = 0; + if (indexAccessor.componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_INT) { + idx = *reinterpret_cast(idxBuffer + i * idxStride); + } else if (indexAccessor.componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT) { + idx = *reinterpret_cast(idxBuffer + i * idxStride); + } else if (indexAccessor.componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE) { + idx = *reinterpret_cast(idxBuffer + i * idxStride); + } + primitiveIndices.push_back(idx); + } + } else { + // Unindexed primitives: generate sequential indices + for (uint32_t i = 0; i < posCount; ++i) primitiveIndices.push_back(i); + } + + for (size_t f = 0; f < primitiveIndices.size(); f += 3) { + std::vector faceVertices; + std::vector faceNormals; + + for (size_t v = 0; v < 3; ++v) { + uint32_t idx = primitiveIndices[f + v]; + + // read position + const float* pPtr = reinterpret_cast(posBuffer + idx * posStride); + faceVertices.push_back(Vec3f(pPtr[0], pPtr[1], pPtr[2])); + + // read normal if it exists + if (normBuffer) { + const float* nPtr = reinterpret_cast(normBuffer + idx * normStride); + faceNormals.push_back(Vec3f(nPtr[0], nPtr[1], nPtr[2])); + } + } + + if (faceNormals.empty()) { + Vec3f v1 = normalize(faceVertices[1] - faceVertices[0]); + Vec3f v2 = normalize(faceVertices[2] - faceVertices[0]); + Vec3f n = normalize(cross(v1, v2)); + faceNormals.push_back(n); + faceNormals.push_back(n); + faceNormals.push_back(n); + } + + for (int i = 0; i < 3; ++i) { + this->vertices.push_back(faceVertices[i][0]); + this->vertices.push_back(faceVertices[i][1]); + this->vertices.push_back(faceVertices[i][2]); + + this->normals.push_back(faceNormals[i][0]); + this->normals.push_back(faceNormals[i][1]); + this->normals.push_back(faceNormals[i][2]); + + this->indices.push_back(this->indices.size()); + } + + // map primitive material + std::optional material = std::nullopt; + if (primitive.material >= 0 && primitive.material < convertedMaterials.size()) { + material = convertedMaterials[primitive.material]; + } + this->materials.push_back(material); + } + } + } + + // populate triangles + for (size_t faceID = 0; faceID < nFaces(); ++faceID) { + this->triangles.emplace_back(vertices.data(), indices.data(), normals.data(), faceID); + } + + // populate bxdfs + for (size_t faceID = 0; faceID < nFaces(); ++faceID) { + const auto material = this->materials[faceID]; + if (material) { + tinyobj::material_t m = material.value(); + if (m.dissolve != 1.0f && m.dissolve != 0.0f) // tinygltf sets alpha to 1.0 by default + this->bxdfs.push_back(createBxDF(m, m.dissolve, 1.0f - m.dissolve, 0.5f)); + else + this->bxdfs.push_back(createBxDF(m)); + } else { + this->bxdfs.push_back(createDefaultBxDF()); + } + } + + // populate lights, primitives + for (size_t faceID = 0; faceID < nFaces(); ++faceID) { + std::shared_ptr light = nullptr; + const auto material = this->materials[faceID]; + std::string sh_name = ""; + + if (material) { + tinyobj::material_t m = material.value(); + sh_name = m.name; + light = createAreaLight(m, &this->triangles[faceID]); + if (light != nullptr) { + lights.push_back(light); + } + } + + primitives.emplace_back(&this->triangles[faceID], this->bxdfs[faceID], sh_name, light); + } + } + /** * @fn uint32_t nVertices() const * @brief Get the number of vertices in the scene From 04aa923e06b584854d259074efe46797b8791231 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 10:28:21 +0200 Subject: [PATCH 12/27] Adding python binding to GLTF loading --- src/python/ext_photonmapping_nano.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/python/ext_photonmapping_nano.cpp b/src/python/ext_photonmapping_nano.cpp index 5703ad4..9f3c948 100644 --- a/src/python/ext_photonmapping_nano.cpp +++ b/src/python/ext_photonmapping_nano.cpp @@ -507,6 +507,11 @@ NB_MODULE(libspice, m) &Scene::loadModel, "Function to load a model in the scene, must be an .obj file path", nb::arg("filepath")) + .def( + "loadModelGLTF", + &Scene::loadModel, + "Function to load a model in the scene, must be an .gltf/.glb file path", + nb::arg("filepath")) .def("setupTriangles", &Scene::setupTriangles) .def("addFaceInfos", &Scene::addFaceInfos, From a588144cd14b9afb81e01ce2764a2aeba8936617 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 10:38:40 +0200 Subject: [PATCH 13/27] Adding missing dep --- conda/environment.yml | 1 + pyproject.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/conda/environment.yml b/conda/environment.yml index 02e2691..7c43ddd 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -7,6 +7,7 @@ dependencies: - openalea.plantgl - openalea.widgets - tinyobjloader + - tinygltf - embree - make - cxx-compiler diff --git a/pyproject.toml b/pyproject.toml index 40ba261..ff402c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,6 +76,7 @@ dependencies = [ "tbb", "tbb-devel", "tinyobjloader", + "tinygltf", ] [tool.setuptools_scm] From 663b3d1429ca61d47ab31ae20273a9746f9c7f99 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 11:04:54 +0200 Subject: [PATCH 14/27] trying other ways of finding lib --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 869439f..8789f82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,12 +32,13 @@ else() endif() # find tinyobjloader & tinygltf -find_package(tinyobjloader CONFIG REQUIRED) +add_library(tinyobjloader::tinyobjloader INTERFACE IMPORTED) add_library(TinyGLTF::TinyGLTF INTERFACE IMPORTED) if(DEFINED ENV{CONDA_PREFIX}) target_include_directories(TinyGLTF::TinyGLTF INTERFACE $ENV{CONDA_PREFIX}/include) + target_include_directories(tinyobjloader::tinyobjloader INTERFACE $ENV{CONDA_PREFIX}/include) endif() if(HIP) From 9431d4ed344380128da4653ec15f87299d41ea55 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 11:42:13 +0200 Subject: [PATCH 15/27] Removing unecessary link --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8789f82..f677ab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,7 @@ set_target_properties(pm ) -target_link_libraries(pm INTERFACE TBB::tbb OpenMP::OpenMP_CXX tinyobjloader embree Threads::Threads photon_map primitive triangle image) +target_link_libraries(pm INTERFACE TBB::tbb OpenMP::OpenMP_CXX embree Threads::Threads photon_map primitive triangle image) # wrapper add_subdirectory("src/python/") From 561ea3497c5d1b52c1c2802b743cb6e87c66cdac Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 11:59:35 +0200 Subject: [PATCH 16/27] Removing unecessary link --- src/python/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 89a416f..2eeafb3 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -15,5 +15,5 @@ execute_process( find_package(nanobind CONFIG REQUIRED) nanobind_add_module(libspice LTO ext_photonmapping_nano.cpp) -target_link_libraries(libspice PUBLIC tinyobjloader embree OpenMP::OpenMP_CXX pm) +target_link_libraries(libspice PUBLIC embree OpenMP::OpenMP_CXX pm) #endif() From 35efd79d01e1c26103ccb2feb46f2755b2e6098f Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 12:07:25 +0200 Subject: [PATCH 17/27] Trying with other link flag --- src/python/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 2eeafb3..c3a2b81 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -15,5 +15,5 @@ execute_process( find_package(nanobind CONFIG REQUIRED) nanobind_add_module(libspice LTO ext_photonmapping_nano.cpp) -target_link_libraries(libspice PUBLIC embree OpenMP::OpenMP_CXX pm) +target_link_libraries(libspice PUBLIC tinyobjloader::tinyobjloader embree OpenMP::OpenMP_CXX pm) #endif() From f406d9eb5760a500dc1f6918cd510c1cc1a03b26 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 13:41:07 +0200 Subject: [PATCH 18/27] Using fetch content --- CMakeLists.txt | 22 ++++++++++++++++------ src/python/CMakeLists.txt | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f677ab5..9edbb0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,14 +32,24 @@ else() endif() # find tinyobjloader & tinygltf -add_library(tinyobjloader::tinyobjloader INTERFACE IMPORTED) +include(FetchContent) -add_library(TinyGLTF::TinyGLTF INTERFACE IMPORTED) +FetchContent_Declare( + tinyobjloader + GIT_REPOSITORY https://github.com/tinyobjloader/tinyobjloader.git + GIT_TAG release +) -if(DEFINED ENV{CONDA_PREFIX}) - target_include_directories(TinyGLTF::TinyGLTF INTERFACE $ENV{CONDA_PREFIX}/include) - target_include_directories(tinyobjloader::tinyobjloader INTERFACE $ENV{CONDA_PREFIX}/include) -endif() +set(TINYGLTF_BUILD_EXAMPLES OFF CACHE INTERNAL "") + +FetchContent_Declare( + tinygltf + GIT_REPOSITORY https://github.com/syoyo/tinygltf.git + GIT_TAG release +) + +# Bring both packages into the build tree +FetchContent_MakeAvailable(tinyobjloader tinygltf) if(HIP) find_package(hiprt CONFIG REQUIRED) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index c3a2b81..89a416f 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -15,5 +15,5 @@ execute_process( find_package(nanobind CONFIG REQUIRED) nanobind_add_module(libspice LTO ext_photonmapping_nano.cpp) -target_link_libraries(libspice PUBLIC tinyobjloader::tinyobjloader embree OpenMP::OpenMP_CXX pm) +target_link_libraries(libspice PUBLIC tinyobjloader embree OpenMP::OpenMP_CXX pm) #endif() From cec30d15d3363282ce40f9720249acc249e9a3ba Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 16:49:41 +0200 Subject: [PATCH 19/27] Revert "Adding missing dep" This reverts commit a588144cd14b9afb81e01ce2764a2aeba8936617. --- conda/environment.yml | 1 - pyproject.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/conda/environment.yml b/conda/environment.yml index 7c43ddd..02e2691 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -7,7 +7,6 @@ dependencies: - openalea.plantgl - openalea.widgets - tinyobjloader - - tinygltf - embree - make - cxx-compiler diff --git a/pyproject.toml b/pyproject.toml index ff402c4..40ba261 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,6 @@ dependencies = [ "tbb", "tbb-devel", "tinyobjloader", - "tinygltf", ] [tool.setuptools_scm] From 5988f722942390860343753058295a6509fe60f7 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 16:56:31 +0200 Subject: [PATCH 20/27] Revert "Using fetch content" This reverts commit f406d9eb5760a500dc1f6918cd510c1cc1a03b26. --- CMakeLists.txt | 22 ++++++---------------- src/python/CMakeLists.txt | 2 +- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9edbb0c..f677ab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,24 +32,14 @@ else() endif() # find tinyobjloader & tinygltf -include(FetchContent) +add_library(tinyobjloader::tinyobjloader INTERFACE IMPORTED) -FetchContent_Declare( - tinyobjloader - GIT_REPOSITORY https://github.com/tinyobjloader/tinyobjloader.git - GIT_TAG release -) +add_library(TinyGLTF::TinyGLTF INTERFACE IMPORTED) -set(TINYGLTF_BUILD_EXAMPLES OFF CACHE INTERNAL "") - -FetchContent_Declare( - tinygltf - GIT_REPOSITORY https://github.com/syoyo/tinygltf.git - GIT_TAG release -) - -# Bring both packages into the build tree -FetchContent_MakeAvailable(tinyobjloader tinygltf) +if(DEFINED ENV{CONDA_PREFIX}) + target_include_directories(TinyGLTF::TinyGLTF INTERFACE $ENV{CONDA_PREFIX}/include) + target_include_directories(tinyobjloader::tinyobjloader INTERFACE $ENV{CONDA_PREFIX}/include) +endif() if(HIP) find_package(hiprt CONFIG REQUIRED) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 89a416f..c3a2b81 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -15,5 +15,5 @@ execute_process( find_package(nanobind CONFIG REQUIRED) nanobind_add_module(libspice LTO ext_photonmapping_nano.cpp) -target_link_libraries(libspice PUBLIC tinyobjloader embree OpenMP::OpenMP_CXX pm) +target_link_libraries(libspice PUBLIC tinyobjloader::tinyobjloader embree OpenMP::OpenMP_CXX pm) #endif() From 1167435bd6d909ccae7feef6252734627d956e87 Mon Sep 17 00:00:00 2001 From: AurelienBesnier Date: Mon, 6 Jul 2026 17:10:19 +0200 Subject: [PATCH 21/27] Actually using the loadGTLF fct --- CMakeLists.txt | 24 ++++++++++++++++++------ examples/cpp/CMakeLists.txt | 2 +- src/python/CMakeLists.txt | 2 +- src/python/ext_photonmapping_nano.cpp | 2 +- tests/data/cornellbox-water2.glb | Bin 0 -> 2469892 bytes tests/test_load_environment.py | 11 +++++++++++ 6 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 tests/data/cornellbox-water2.glb diff --git a/CMakeLists.txt b/CMakeLists.txt index f677ab5..3374c41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,14 +32,26 @@ else() endif() # find tinyobjloader & tinygltf -add_library(tinyobjloader::tinyobjloader INTERFACE IMPORTED) +include(FetchContent) -add_library(TinyGLTF::TinyGLTF INTERFACE IMPORTED) +set(TINYOBJLOADER_BUILD_TEST_LOADER OFF CACHE INTERNAL "") -if(DEFINED ENV{CONDA_PREFIX}) - target_include_directories(TinyGLTF::TinyGLTF INTERFACE $ENV{CONDA_PREFIX}/include) - target_include_directories(tinyobjloader::tinyobjloader INTERFACE $ENV{CONDA_PREFIX}/include) -endif() +FetchContent_Declare( + tinyobjloader + GIT_REPOSITORY https://github.com/tinyobjloader/tinyobjloader.git + GIT_TAG release +) + +set(TINYGLTF_BUILD_EXAMPLES OFF CACHE INTERNAL "") + +FetchContent_Declare( + tinygltf + GIT_REPOSITORY https://github.com/syoyo/tinygltf.git + GIT_TAG release +) + +# Bring both packages into the build tree +FetchContent_MakeAvailable(tinyobjloader tinygltf) if(HIP) find_package(hiprt CONFIG REQUIRED) diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 380fd26..ec90ace 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -1,3 +1,3 @@ add_executable(main "main.cpp") target_link_libraries(main PUBLIC pm image triangle primitive photon_map) -target_include_directories(main INTERFACE "../../src/cpp/include") \ No newline at end of file +target_include_directories(main PUBLIC "../../src/cpp/include") \ No newline at end of file diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index c3a2b81..9d65c9c 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -15,5 +15,5 @@ execute_process( find_package(nanobind CONFIG REQUIRED) nanobind_add_module(libspice LTO ext_photonmapping_nano.cpp) -target_link_libraries(libspice PUBLIC tinyobjloader::tinyobjloader embree OpenMP::OpenMP_CXX pm) +target_link_libraries(libspice PUBLIC tinyobjloader tinygltf embree OpenMP::OpenMP_CXX pm) #endif() diff --git a/src/python/ext_photonmapping_nano.cpp b/src/python/ext_photonmapping_nano.cpp index 9f3c948..76fa6e9 100644 --- a/src/python/ext_photonmapping_nano.cpp +++ b/src/python/ext_photonmapping_nano.cpp @@ -509,7 +509,7 @@ NB_MODULE(libspice, m) nb::arg("filepath")) .def( "loadModelGLTF", - &Scene::loadModel, + &Scene::loadModelGLTF, "Function to load a model in the scene, must be an .gltf/.glb file path", nb::arg("filepath")) .def("setupTriangles", &Scene::setupTriangles) diff --git a/tests/data/cornellbox-water2.glb b/tests/data/cornellbox-water2.glb new file mode 100644 index 0000000000000000000000000000000000000000..0368df9e965a84626b9b4ecb2a3079cd7335a163 GIT binary patch literal 2469892 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%0Dse4*o~@uiNRLEcF5SNtsJ&2c~C?C0>O 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%0A^Ja^JydVk=6`#b-d<-9*E?|b2)!d` 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 z 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