From fefd33d55ab4a33c415d8e04f0575b259fa2e8b5 Mon Sep 17 00:00:00 2001 From: Federico Terraneo <fede.tft@miosix.org> Date: Fri, 19 Feb 2021 23:38:36 +0100 Subject: [PATCH] Updated png++ libs --- _tools/code_generators/libs/png++/ChangeLog | 5 + _tools/code_generators/libs/png++/Doxyfile | 2 +- _tools/code_generators/libs/png++/Makefile | 59 ++--- _tools/code_generators/libs/png++/NEWS | 18 ++ _tools/code_generators/libs/png++/common.mk | 47 ++++ _tools/code_generators/libs/png++/config.hpp | 44 +++- .../code_generators/libs/png++/consumer.hpp | 10 +- .../libs/png++/convert_color_space.hpp | 104 +++++--- _tools/code_generators/libs/png++/error.hpp | 38 ++- .../libs/png++/example/Makefile | 41 +-- .../code_generators/libs/png++/generator.hpp | 13 +- .../code_generators/libs/png++/gray_pixel.hpp | 4 +- _tools/code_generators/libs/png++/image.hpp | 50 ++-- .../code_generators/libs/png++/image_info.hpp | 28 +- .../libs/png++/index_pixel.hpp | 4 +- _tools/code_generators/libs/png++/info.hpp | 40 ++- _tools/code_generators/libs/png++/io_base.hpp | 72 +++++- .../libs/png++/packed_pixel.hpp | 8 +- .../libs/png++/pixel_buffer.hpp | 38 +-- .../libs/png++/pixel_traits.hpp | 12 +- _tools/code_generators/libs/png++/png.hpp | 9 +- _tools/code_generators/libs/png++/reader.hpp | 10 +- .../libs/png++/solid_pixel_buffer.hpp | 243 ++++++++++++++++++ .../libs/png++/streaming_base.hpp | 2 +- .../code_generators/libs/png++/test/Makefile | 101 -------- _tools/code_generators/libs/png++/test/README | 85 ------ .../libs/png++/test/basn0g01.png | Bin 164 -> 0 bytes .../libs/png++/test/basn0g02.png | Bin 104 -> 0 bytes .../libs/png++/test/basn0g04.png | Bin 145 -> 0 bytes .../libs/png++/test/basn0g08.png | Bin 138 -> 0 bytes .../libs/png++/test/basn0g16.png | Bin 167 -> 0 bytes .../libs/png++/test/basn2c08.png | Bin 145 -> 0 bytes .../libs/png++/test/basn2c16.png | Bin 302 -> 0 bytes .../libs/png++/test/basn3p01.png | Bin 112 -> 0 bytes .../libs/png++/test/basn3p02.png | Bin 146 -> 0 bytes .../libs/png++/test/basn3p04.png | Bin 216 -> 0 bytes .../libs/png++/test/basn3p08.png | Bin 1286 -> 0 bytes .../libs/png++/test/basn4a08.png | Bin 126 -> 0 bytes .../libs/png++/test/basn4a16.png | Bin 2206 -> 0 bytes .../libs/png++/test/basn6a08.png | Bin 184 -> 0 bytes .../libs/png++/test/basn6a16.png | Bin 3435 -> 0 bytes .../png++/test/cmp/basn0g01.png.GA.16.out | Bin 266 -> 0 bytes .../libs/png++/test/cmp/basn0g01.png.GA.8.out | Bin 232 -> 0 bytes .../png++/test/cmp/basn0g01.png.GRAY.16.out | Bin 228 -> 0 bytes .../png++/test/cmp/basn0g01.png.GRAY.8.out | Bin 196 -> 0 bytes .../png++/test/cmp/basn0g01.png.RGB.16.out | Bin 285 -> 0 bytes .../png++/test/cmp/basn0g01.png.RGB.8.out | Bin 254 -> 0 bytes .../png++/test/cmp/basn0g01.png.RGBA.16.out | Bin 302 -> 0 bytes .../png++/test/cmp/basn0g01.png.RGBA.8.out | Bin 268 -> 0 bytes .../libs/png++/test/cmp/basn0g01.png.out | Bin 148 -> 0 bytes .../png++/test/cmp/basn0g02.png.GA.16.out | Bin 146 -> 0 bytes .../libs/png++/test/cmp/basn0g02.png.GA.8.out | Bin 134 -> 0 bytes .../png++/test/cmp/basn0g02.png.GRAY.16.out | Bin 129 -> 0 bytes .../png++/test/cmp/basn0g02.png.GRAY.8.out | Bin 110 -> 0 bytes .../png++/test/cmp/basn0g02.png.RGB.16.out | Bin 166 -> 0 bytes .../png++/test/cmp/basn0g02.png.RGB.8.out | Bin 142 -> 0 bytes .../png++/test/cmp/basn0g02.png.RGBA.16.out | Bin 200 -> 0 bytes .../png++/test/cmp/basn0g02.png.RGBA.8.out | Bin 151 -> 0 bytes .../libs/png++/test/cmp/basn0g02.png.out | Bin 88 -> 0 bytes .../png++/test/cmp/basn0g04.png.GA.16.out | Bin 119 -> 0 bytes .../libs/png++/test/cmp/basn0g04.png.GA.8.out | Bin 113 -> 0 bytes .../png++/test/cmp/basn0g04.png.GRAY.16.out | Bin 111 -> 0 bytes .../png++/test/cmp/basn0g04.png.GRAY.8.out | Bin 94 -> 0 bytes .../png++/test/cmp/basn0g04.png.RGB.16.out | Bin 139 -> 0 bytes .../png++/test/cmp/basn0g04.png.RGB.8.out | Bin 121 -> 0 bytes .../png++/test/cmp/basn0g04.png.RGBA.16.out | Bin 171 -> 0 bytes .../png++/test/cmp/basn0g04.png.RGBA.8.out | Bin 120 -> 0 bytes .../libs/png++/test/cmp/basn0g04.png.out | Bin 129 -> 0 bytes .../png++/test/cmp/basn0g08.png.GA.16.out | Bin 153 -> 0 bytes .../libs/png++/test/cmp/basn0g08.png.GA.8.out | Bin 136 -> 0 bytes .../png++/test/cmp/basn0g08.png.GRAY.16.out | Bin 136 -> 0 bytes .../png++/test/cmp/basn0g08.png.GRAY.8.out | Bin 122 -> 0 bytes .../png++/test/cmp/basn0g08.png.RGB.16.out | Bin 195 -> 0 bytes .../png++/test/cmp/basn0g08.png.RGB.8.out | Bin 154 -> 0 bytes .../png++/test/cmp/basn0g08.png.RGBA.16.out | Bin 204 -> 0 bytes .../png++/test/cmp/basn0g08.png.RGBA.8.out | Bin 162 -> 0 bytes .../png++/test/cmp/basn0g16.png.GA.16.out | Bin 172 -> 0 bytes .../libs/png++/test/cmp/basn0g16.png.GA.8.out | Bin 138 -> 0 bytes .../png++/test/cmp/basn0g16.png.GRAY.16.out | Bin 151 -> 0 bytes .../png++/test/cmp/basn0g16.png.GRAY.8.out | Bin 122 -> 0 bytes .../png++/test/cmp/basn0g16.png.RGB.16.out | Bin 188 -> 0 bytes .../png++/test/cmp/basn0g16.png.RGB.8.out | Bin 163 -> 0 bytes .../png++/test/cmp/basn0g16.png.RGBA.16.out | Bin 210 -> 0 bytes .../png++/test/cmp/basn0g16.png.RGBA.8.out | Bin 178 -> 0 bytes .../png++/test/cmp/basn2c08.png.GA.16.out | Bin 238 -> 0 bytes .../libs/png++/test/cmp/basn2c08.png.GA.8.out | Bin 219 -> 0 bytes .../png++/test/cmp/basn2c08.png.GRAY.16.out | Bin 215 -> 0 bytes .../png++/test/cmp/basn2c08.png.GRAY.8.out | Bin 193 -> 0 bytes .../png++/test/cmp/basn2c08.png.RGB.16.out | Bin 173 -> 0 bytes .../png++/test/cmp/basn2c08.png.RGB.8.out | Bin 129 -> 0 bytes .../png++/test/cmp/basn2c08.png.RGBA.16.out | Bin 192 -> 0 bytes .../png++/test/cmp/basn2c08.png.RGBA.8.out | Bin 141 -> 0 bytes .../png++/test/cmp/basn2c16.png.GA.16.out | Bin 559 -> 0 bytes .../libs/png++/test/cmp/basn2c16.png.GA.8.out | Bin 231 -> 0 bytes .../png++/test/cmp/basn2c16.png.GRAY.16.out | Bin 499 -> 0 bytes .../png++/test/cmp/basn2c16.png.GRAY.8.out | Bin 211 -> 0 bytes .../png++/test/cmp/basn2c16.png.RGB.16.out | Bin 286 -> 0 bytes .../png++/test/cmp/basn2c16.png.RGB.8.out | Bin 216 -> 0 bytes .../png++/test/cmp/basn2c16.png.RGBA.16.out | Bin 300 -> 0 bytes .../png++/test/cmp/basn2c16.png.RGBA.8.out | Bin 227 -> 0 bytes .../png++/test/cmp/basn3p01.png.GA.16.out | Bin 134 -> 0 bytes .../libs/png++/test/cmp/basn3p01.png.GA.8.out | Bin 128 -> 0 bytes .../png++/test/cmp/basn3p01.png.GRAY.16.out | Bin 122 -> 0 bytes .../png++/test/cmp/basn3p01.png.GRAY.8.out | Bin 108 -> 0 bytes .../png++/test/cmp/basn3p01.png.RGB.16.out | Bin 163 -> 0 bytes .../png++/test/cmp/basn3p01.png.RGB.8.out | Bin 138 -> 0 bytes .../png++/test/cmp/basn3p01.png.RGBA.16.out | Bin 196 -> 0 bytes .../png++/test/cmp/basn3p01.png.RGBA.8.out | Bin 141 -> 0 bytes .../png++/test/cmp/basn3p02.png.GA.16.out | Bin 161 -> 0 bytes .../libs/png++/test/cmp/basn3p02.png.GA.8.out | Bin 154 -> 0 bytes .../png++/test/cmp/basn3p02.png.GRAY.16.out | Bin 145 -> 0 bytes .../png++/test/cmp/basn3p02.png.GRAY.8.out | Bin 129 -> 0 bytes .../png++/test/cmp/basn3p02.png.RGB.16.out | Bin 173 -> 0 bytes .../png++/test/cmp/basn3p02.png.RGB.8.out | Bin 149 -> 0 bytes .../png++/test/cmp/basn3p02.png.RGBA.16.out | Bin 208 -> 0 bytes .../png++/test/cmp/basn3p02.png.RGBA.8.out | Bin 157 -> 0 bytes .../png++/test/cmp/basn3p04.png.GA.16.out | Bin 179 -> 0 bytes .../libs/png++/test/cmp/basn3p04.png.GA.8.out | Bin 173 -> 0 bytes .../png++/test/cmp/basn3p04.png.GRAY.16.out | Bin 168 -> 0 bytes .../png++/test/cmp/basn3p04.png.GRAY.8.out | Bin 146 -> 0 bytes .../png++/test/cmp/basn3p04.png.RGB.16.out | Bin 213 -> 0 bytes .../png++/test/cmp/basn3p04.png.RGB.8.out | Bin 192 -> 0 bytes .../png++/test/cmp/basn3p04.png.RGBA.16.out | Bin 249 -> 0 bytes .../png++/test/cmp/basn3p04.png.RGBA.8.out | Bin 199 -> 0 bytes .../png++/test/cmp/basn3p08.png.GA.16.out | Bin 386 -> 0 bytes .../libs/png++/test/cmp/basn3p08.png.GA.8.out | Bin 350 -> 0 bytes .../png++/test/cmp/basn3p08.png.GRAY.16.out | Bin 346 -> 0 bytes .../png++/test/cmp/basn3p08.png.GRAY.8.out | Bin 305 -> 0 bytes .../png++/test/cmp/basn3p08.png.RGB.16.out | Bin 299 -> 0 bytes .../png++/test/cmp/basn3p08.png.RGB.8.out | Bin 245 -> 0 bytes .../png++/test/cmp/basn3p08.png.RGBA.16.out | Bin 309 -> 0 bytes .../png++/test/cmp/basn3p08.png.RGBA.8.out | Bin 261 -> 0 bytes .../png++/test/cmp/basn4a08.png.GA.16.out | Bin 128 -> 0 bytes .../libs/png++/test/cmp/basn4a08.png.GA.8.out | Bin 110 -> 0 bytes .../png++/test/cmp/basn4a08.png.GRAY.16.out | Bin 106 -> 0 bytes .../png++/test/cmp/basn4a08.png.GRAY.8.out | Bin 100 -> 0 bytes .../png++/test/cmp/basn4a08.png.RGB.16.out | Bin 147 -> 0 bytes .../png++/test/cmp/basn4a08.png.RGB.8.out | Bin 123 -> 0 bytes .../png++/test/cmp/basn4a08.png.RGBA.16.out | Bin 168 -> 0 bytes .../png++/test/cmp/basn4a08.png.RGBA.8.out | Bin 131 -> 0 bytes .../png++/test/cmp/basn4a16.png.GA.16.out | Bin 2190 -> 0 bytes .../libs/png++/test/cmp/basn4a16.png.GA.8.out | Bin 972 -> 0 bytes .../png++/test/cmp/basn4a16.png.GRAY.16.out | Bin 1812 -> 0 bytes .../png++/test/cmp/basn4a16.png.GRAY.8.out | Bin 821 -> 0 bytes .../png++/test/cmp/basn4a16.png.RGB.16.out | Bin 3767 -> 0 bytes .../png++/test/cmp/basn4a16.png.RGB.8.out | Bin 1480 -> 0 bytes .../png++/test/cmp/basn4a16.png.RGBA.16.out | Bin 3964 -> 0 bytes .../png++/test/cmp/basn4a16.png.RGBA.8.out | Bin 1689 -> 0 bytes .../png++/test/cmp/basn6a08.png.GA.16.out | Bin 152 -> 0 bytes .../libs/png++/test/cmp/basn6a08.png.GA.8.out | Bin 124 -> 0 bytes .../png++/test/cmp/basn6a08.png.GRAY.16.out | Bin 120 -> 0 bytes .../png++/test/cmp/basn6a08.png.GRAY.8.out | Bin 107 -> 0 bytes .../png++/test/cmp/basn6a08.png.RGB.16.out | Bin 188 -> 0 bytes .../png++/test/cmp/basn6a08.png.RGB.8.out | Bin 159 -> 0 bytes .../png++/test/cmp/basn6a08.png.RGBA.16.out | Bin 204 -> 0 bytes .../png++/test/cmp/basn6a08.png.RGBA.8.out | Bin 168 -> 0 bytes .../png++/test/cmp/basn6a16.png.GA.16.out | Bin 2176 -> 0 bytes .../libs/png++/test/cmp/basn6a16.png.GA.8.out | Bin 740 -> 0 bytes .../png++/test/cmp/basn6a16.png.GRAY.16.out | Bin 1712 -> 0 bytes .../png++/test/cmp/basn6a16.png.GRAY.8.out | Bin 603 -> 0 bytes .../png++/test/cmp/basn6a16.png.RGB.16.out | Bin 3175 -> 0 bytes .../png++/test/cmp/basn6a16.png.RGB.8.out | Bin 1110 -> 0 bytes .../png++/test/cmp/basn6a16.png.RGBA.16.out | Bin 3419 -> 0 bytes .../png++/test/cmp/basn6a16.png.RGBA.8.out | Bin 1214 -> 0 bytes .../libs/png++/test/cmp/gray_16.out | Bin 36072 -> 0 bytes .../libs/png++/test/cmp/gray_packed_1.png.out | Bin 75 -> 0 bytes .../libs/png++/test/cmp/gray_packed_2.png.out | Bin 83 -> 0 bytes .../libs/png++/test/cmp/gray_packed_4.png.out | Bin 148 -> 0 bytes .../png++/test/cmp/interlace.png.GA.16.out | Bin 428 -> 0 bytes .../png++/test/cmp/interlace.png.GA.8.out | Bin 386 -> 0 bytes .../png++/test/cmp/interlace.png.GRAY.16.out | Bin 382 -> 0 bytes .../png++/test/cmp/interlace.png.GRAY.8.out | Bin 345 -> 0 bytes .../png++/test/cmp/interlace.png.RGB.16.out | Bin 426 -> 0 bytes .../png++/test/cmp/interlace.png.RGB.8.out | Bin 364 -> 0 bytes .../png++/test/cmp/interlace.png.RGBA.16.out | Bin 462 -> 0 bytes .../png++/test/cmp/interlace.png.RGBA.8.out | Bin 390 -> 0 bytes .../libs/png++/test/cmp/palette1.png.out | Bin 85 -> 0 bytes .../libs/png++/test/cmp/palette2.png.out | Bin 93 -> 0 bytes .../libs/png++/test/cmp/palette4.png.out | Bin 158 -> 0 bytes .../libs/png++/test/cmp/palette8.png.out | Bin 1384 -> 0 bytes .../libs/png++/test/cmp/palette8_tRNS.png.out | Bin 1652 -> 0 bytes .../libs/png++/test/convert_color_space.cpp | 128 --------- .../code_generators/libs/png++/test/dump.cpp | 39 --- .../libs/png++/test/generate_gray_packed.cpp | 70 ----- .../libs/png++/test/generate_palette.cpp | 96 ------- .../libs/png++/test/interlace.png | Bin 393 -> 0 bytes .../png++/test/read_write_gray_packed.cpp | 86 ------- .../libs/png++/test/read_write_param.cpp | 24 -- .../code_generators/libs/png++/test/test.sh | 42 --- .../libs/png++/test/write_gray_16.cpp | 55 ---- _tools/code_generators/libs/png++/writer.hpp | 10 +- 191 files changed, 694 insertions(+), 943 deletions(-) create mode 100644 _tools/code_generators/libs/png++/common.mk create mode 100644 _tools/code_generators/libs/png++/solid_pixel_buffer.hpp delete mode 100644 _tools/code_generators/libs/png++/test/Makefile delete mode 100644 _tools/code_generators/libs/png++/test/README delete mode 100644 _tools/code_generators/libs/png++/test/basn0g01.png delete mode 100644 _tools/code_generators/libs/png++/test/basn0g02.png delete mode 100644 _tools/code_generators/libs/png++/test/basn0g04.png delete mode 100644 _tools/code_generators/libs/png++/test/basn0g08.png delete mode 100644 _tools/code_generators/libs/png++/test/basn0g16.png delete mode 100644 _tools/code_generators/libs/png++/test/basn2c08.png delete mode 100644 _tools/code_generators/libs/png++/test/basn2c16.png delete mode 100644 _tools/code_generators/libs/png++/test/basn3p01.png delete mode 100644 _tools/code_generators/libs/png++/test/basn3p02.png delete mode 100644 _tools/code_generators/libs/png++/test/basn3p04.png delete mode 100644 _tools/code_generators/libs/png++/test/basn3p08.png delete mode 100644 _tools/code_generators/libs/png++/test/basn4a08.png delete mode 100644 _tools/code_generators/libs/png++/test/basn4a16.png delete mode 100644 _tools/code_generators/libs/png++/test/basn6a08.png delete mode 100644 _tools/code_generators/libs/png++/test/basn6a16.png delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g01.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g02.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g04.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/gray_16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/gray_packed_1.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/gray_packed_2.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/gray_packed_4.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.GA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.GA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.16.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.8.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/palette1.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/palette2.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/palette4.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/palette8.png.out delete mode 100644 _tools/code_generators/libs/png++/test/cmp/palette8_tRNS.png.out delete mode 100644 _tools/code_generators/libs/png++/test/convert_color_space.cpp delete mode 100644 _tools/code_generators/libs/png++/test/dump.cpp delete mode 100644 _tools/code_generators/libs/png++/test/generate_gray_packed.cpp delete mode 100644 _tools/code_generators/libs/png++/test/generate_palette.cpp delete mode 100644 _tools/code_generators/libs/png++/test/interlace.png delete mode 100644 _tools/code_generators/libs/png++/test/read_write_gray_packed.cpp delete mode 100644 _tools/code_generators/libs/png++/test/read_write_param.cpp delete mode 100644 _tools/code_generators/libs/png++/test/test.sh delete mode 100644 _tools/code_generators/libs/png++/test/write_gray_16.cpp diff --git a/_tools/code_generators/libs/png++/ChangeLog b/_tools/code_generators/libs/png++/ChangeLog index ca37921..e4433a9 100644 --- a/_tools/code_generators/libs/png++/ChangeLog +++ b/_tools/code_generators/libs/png++/ChangeLog @@ -1,3 +1,8 @@ +2009-06-21 Alex Shulgin + + * config.hpp: Added support for FreeBSD (detect endianness). + Patch by <c.petrik.sosa@gmail.com>. + png++-0.2.3 19 Oct 2008 Fixed numerous `already defined' errors due to require_color_space diff --git a/_tools/code_generators/libs/png++/Doxyfile b/_tools/code_generators/libs/png++/Doxyfile index 0db262f..0692826 100644 --- a/_tools/code_generators/libs/png++/Doxyfile +++ b/_tools/code_generators/libs/png++/Doxyfile @@ -29,7 +29,7 @@ PROJECT_NAME = png++ # number. This could be handy for archiving the generated # documentation or if some version control system is used. -PROJECT_NUMBER = 0.2.1 +PROJECT_NUMBER = $(VERSION) # The OUTPUT_DIRECTORY tag is used to specify the (relative or # absolute) base path where the generated documentation will be put. diff --git a/_tools/code_generators/libs/png++/Makefile b/_tools/code_generators/libs/png++/Makefile index 2accfbe..3cc0a11 100644 --- a/_tools/code_generators/libs/png++/Makefile +++ b/_tools/code_generators/libs/png++/Makefile @@ -29,34 +29,18 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# don't forget to update version before releasing! -version := 0.2.3 - -ifndef PREFIX -PREFIX := /usr/local -endif - -ifdef MINGW -bin_suffix := .exe -endif +PNGPP := . -make_cflags := -Wall $(CFLAGS) -I$(PREFIX)/include -make_ldflags := $(LDFLAGS) -L$(PREFIX)/lib - -ifndef NDEBUG -make_cflags := $(make_cflags) -g -make_ldflags := $(make_ldflags) -g -endif - -ifndef LIBPNG_CONFIG -LIBPNG_CONFIG := libpng-config -endif +# don't forget to update version before releasing! +version := 0.2.9 -build_files := Makefile Doxyfile +build_files := common.mk Makefile Doxyfile doc_files := AUTHORS BUGS ChangeLog COPYING INSTALL NEWS README TODO -headers := *.hpp +headers := $(wildcard *.hpp) sources := +include common.mk + dist_dir := png++-$(version) dist_package := png++-$(version).tar.gz dist_files := $(build_files) $(doc_files) \ @@ -67,9 +51,14 @@ all: examples install: install-headers install-docs +uninstall: uninstall-headers uninstall-docs + install-headers: mkdir -p $(PREFIX)/include/png++ - cp *.hpp $(PREFIX)/include/png++ + cp $(headers) $(PREFIX)/include/png++ + +uninstall-headers: + rm -rf $(PREFIX)/include/png++ dist: dist-mkdir dist-copy-files dist-package @@ -90,27 +79,24 @@ dist-package: rm -rf $(dist_dir) clean: test-clean examples-clean -# rm -f $(targets) thorough-clean: clean docs-clean check: test test: - $(MAKE) test -C test $(MAKEFLAGS) PNGPP=`pwd` + $(MAKE) test -C test $(MAKEFLAGS) test-clean: $(MAKE) clean -C test $(MAKEFLAGS) -test-compile-headers: *.hpp - for i in *.hpp; do \ - echo '#include "'$$i'"' >$$i.cpp \ - && g++ -c $$i.cpp $(make_cflags) `$(LIBPNG_CONFIG) --cflags`; \ - done - rm -f *.hpp.o *.hpp.cpp +test-compile-headers: $(headers:%.hpp=%.hpp.o) + +%.hpp.o: + $(CXX) -c $(@:%.hpp.o=%.hpp) -o /dev/null $(make_cflags) docs: - doxygen + VERSION=$(version) doxygen docs-clean: rm -rf doc @@ -126,15 +112,18 @@ install-docs: [ -d png++ ] || ln -s $(dist_dir) png++; \ fi +uninstall-docs: + rm -rf $(PREFIX)/share/doc/$(dist_dir) $(PREFIX)/share/doc/png++ + examples: $(MAKE) -C example $(MAKEFLAGS) examples-clean: $(MAKE) clean -C example $(MAKEFLAGS) -.PHONY: all install \ +.PHONY: install \ dist dist-mkdir dist-copy-files dist-package \ - clean thorough-clean \ + thorough-clean \ check test test-clean test-compile-headers \ docs docs-clean \ examples examples-clean diff --git a/_tools/code_generators/libs/png++/NEWS b/_tools/code_generators/libs/png++/NEWS index 74b228b..cc006fb 100644 --- a/_tools/code_generators/libs/png++/NEWS +++ b/_tools/code_generators/libs/png++/NEWS @@ -1,3 +1,21 @@ +Version 0.2.7: + + - Added solid_pixel_buffer (patch by Andrey Potapov). + + - Fixed some compilation problems on Win32. + +Version 0.2.5: + + - Fixed compatibility with newer libpng versions (>= 1.4) + + - Fixed compilation on FreeBSD. + + - Fixed tRNS handling with transformations. + + - Added IO transformation debugging facility. + + - Better organized test suite. + Version 0.2.3: - Fixed numerous `already defined' errors due to require_color_space diff --git a/_tools/code_generators/libs/png++/common.mk b/_tools/code_generators/libs/png++/common.mk new file mode 100644 index 0000000..2886324 --- /dev/null +++ b/_tools/code_generators/libs/png++/common.mk @@ -0,0 +1,47 @@ +ifndef PREFIX +PREFIX := /usr/local +endif + +ifdef MINGW +bin_suffix := .exe +endif + +ifndef CXX +CXX := g++ +endif + +ifndef LIBPNG_CONFIG +LIBPNG_CONFIG := libpng-config +endif + +make_cflags := -Wall -I$(PNGPP) -I$(PREFIX)/include $(shell $(LIBPNG_CONFIG) --cflags) $(CFLAGS) +make_ldflags := -L$(PREFIX)/lib $(shell $(LIBPNG_CONFIG) --ldflags) $(LDFLAGS) + +ifndef NDEBUG +make_cflags := $(make_cflags) -g +make_ldflags := $(make_ldflags) -g +endif + +deps := $(sources:.cpp=.dep) +objects := $(sources:.cpp=.o) +bins := $(sources:.cpp=$(bin_suffix)) + +all: $(deps) $(bins) + +%$(bin_suffix): %.o + $(CXX) -o $@ $< $(make_ldflags) + +%.o: %.cpp + $(CXX) -c -o $@ $< $(make_cflags) + +%.dep: %.cpp + $(CXX) -M $(CPPFLAGS) $(make_cflags) $< -o- | \ + sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@ + +clean: clean-deps + rm -f $(bins) $(objects) + +clean-deps: + rm -f $(deps) + +.PHONY: all clean clean-deps diff --git a/_tools/code_generators/libs/png++/config.hpp b/_tools/code_generators/libs/png++/config.hpp index 0604e42..4a317b2 100644 --- a/_tools/code_generators/libs/png++/config.hpp +++ b/_tools/code_generators/libs/png++/config.hpp @@ -31,12 +31,14 @@ #ifndef PNGPP_CONFIG_HPP_INCLUDED #define PNGPP_CONFIG_HPP_INCLUDED +#include <stdlib.h> + // Endianness test #if defined(__GLIBC__) #include <endian.h> -#elif defined(__WIN32) +#elif defined(_WIN32) #define __LITTLE_ENDIAN 1234 #define __BIG_ENDIAN 4321 @@ -47,10 +49,50 @@ #include <machine/endian.h> #include <sys/_endian.h> +#elif defined(__FreeBSD__) + +#include <machine/endian.h> +#include <sys/endian.h> + +#elif defined(__sun) + +#include <sys/isa_defs.h> + #else #error Byte-order could not be detected. #endif +// Determine C++11 features +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) && defined(__GXX_EXPERIMENTAL_CXX0X__) + +#define PNGPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +// gcc c++11 support list +// http://gcc.gnu.org/projects/cxx0x.html + +// gcc supports static_assert since 4.3 +#if (PNGPP_GCC_VERSION >= 40300) +#define PNGPP_HAS_STATIC_ASSERT +#endif + +// gcc supports std::move since 4.6 +#if (PNGPP_GCC_VERSION >= 40600) +#define PNGPP_HAS_STD_MOVE +#endif + +#undef PNGPP_GCC_VERSION + +#elif defined(_MSC_VER) + +// MS Visual C++ compiler supports static_assert and std::move since VS2010 +// http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx +#if (_MSC_VER >= 1600) +#define PNGPP_HAS_STATIC_ASSERT +#define PNGPP_HAS_STD_MOVE +#endif + +#endif + + #endif // PNGPP_CONFIG_HPP_INCLUDED diff --git a/_tools/code_generators/libs/png++/consumer.hpp b/_tools/code_generators/libs/png++/consumer.hpp index dac6374..a3ff9ec 100644 --- a/_tools/code_generators/libs/png++/consumer.hpp +++ b/_tools/code_generators/libs/png++/consumer.hpp @@ -68,7 +68,7 @@ namespace png * as follows: * * \code - * png::byte* get_next_row(size_t pos); + * png::byte* get_next_row(png::uint_32 pos); * void reset(size_t pass); * \endcode * @@ -167,8 +167,7 @@ namespace png #ifdef PNG_READ_SWAP_SUPPORTED rd.set_swap(); #else - throw error("Cannot read 16-bit image:" - " recompile with PNG_READ_SWAP_SUPPORTED."); + throw error("Cannot read 16-bit image: recompile with PNG_READ_SWAP_SUPPORTED."); #endif } #endif @@ -180,8 +179,7 @@ namespace png #ifdef PNG_READ_INTERLACING_SUPPORTED pass_count = rd.set_interlace_handling(); #else - throw error("Cannot read interlaced image:" - " interlace handling disabled."); + throw error("Cannot read interlaced image: interlace handling disabled."); #endif } else @@ -244,7 +242,7 @@ namespace png { pixel_con->reset(pass); - for (size_t pos = 0; pos < this->get_info().get_height(); ++pos) + for (uint_32 pos = 0; pos < this->get_info().get_height(); ++pos) { rd.read_row(pixel_con->get_next_row(pos)); } diff --git a/_tools/code_generators/libs/png++/convert_color_space.hpp b/_tools/code_generators/libs/png++/convert_color_space.hpp index 796a903..19b2543 100644 --- a/_tools/code_generators/libs/png++/convert_color_space.hpp +++ b/_tools/code_generators/libs/png++/convert_color_space.hpp @@ -74,26 +74,34 @@ namespace png static void expand_8_to_16(png_struct*, png_row_info* row_info, byte* row) { -// dump_row(row, row_info->rowbytes); - - for (size_t i = row_info->rowbytes; i-- > 0; ) +#ifdef DEBUG_EXPAND_8_16 + printf("row: width=%d, bytes=%d, channels=%d\n", + row_info->width, row_info->rowbytes, row_info->channels); + printf("<= "); + dump_row(row, row_info->rowbytes); +#endif + for (uint_32 i = row_info->rowbytes; i-- > 0; ) { - row[i*2 + 1] = row[i]; - row[i*2 + 0] = 0; + row[2*i + 1] = row[i]; + row[2*i + 0] = 0; } - -// dump_row(row, 2*row_info->rowbytes); +#ifdef DEBUG_EXPAND_8_16 + printf("=> "); + dump_row(row, 2*row_info->rowbytes); +#endif } - static void dump_row(byte const* row, size_t width) +#ifdef DEBUG_EXPAND_8_16 + static void dump_row(byte const* row, uint_32 width) { printf("{"); - for (size_t i = 0; i < width; ++i) + for (uint_32 i = 0; i < width; ++i) { printf(" %02x,", row[i]); } printf(" }\n"); } +#endif template< class reader > static void handle_16(reader& io) @@ -103,8 +111,7 @@ namespace png #ifdef PNG_READ_16_TO_8_SUPPORTED io.set_strip_16(); #else - throw error("expected 8-bit data but found 16-bit;" - " recompile with PNG_READ_16_TO_8_SUPPORTED"); + throw error("expected 8-bit data but found 16-bit; recompile with PNG_READ_16_TO_8_SUPPORTED"); #endif } if (io.get_bit_depth() != 16 && traits::get_bit_depth() == 16) @@ -114,9 +121,7 @@ namespace png io.set_user_transform_info(NULL, 16, traits::get_channels()); #else - throw error("expected 16-bit data but found 8-bit;" - " recompile with" - " PNG_READ_USER_TRANSFORM_SUPPORTED"); + throw error("expected 16-bit data but found 8-bit; recompile with PNG_READ_USER_TRANSFORM_SUPPORTED"); #endif } } @@ -124,23 +129,21 @@ namespace png template< class reader > static void handle_alpha(reader& io, uint_32 filler) { - bool src_alpha = io.get_color_type() & color_mask_alpha; + bool src_alpha = (io.get_color_type() & color_mask_alpha); + bool src_tRNS = io.has_chunk(chunk_tRNS); bool dst_alpha = traits::get_color_type() & color_mask_alpha; - if (src_alpha && !dst_alpha) + if ((src_alpha || src_tRNS) && !dst_alpha) { #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED io.set_strip_alpha(); #else - throw error("alpha channel unexpected;" - " recompile with" - " PNG_READ_STRIP_ALPHA_SUPPORTED"); + throw error("alpha channel unexpected; recompile with PNG_READ_STRIP_ALPHA_SUPPORTED"); #endif } if (!src_alpha && dst_alpha) { #if defined(PNG_tRNS_SUPPORTED) && defined(PNG_READ_EXPAND_SUPPORTED) - if ((io.get_color_type() & color_mask_palette) - && io.has_chunk(chunk_tRNS)) + if (src_tRNS) { io.set_tRNS_to_alpha(); return; @@ -149,9 +152,7 @@ namespace png #if defined(PNG_READ_FILLER_SUPPORTED) && !defined(PNG_1_0_X) io.set_add_alpha(filler, filler_after); #else - throw error("expected alpha channel but none found;" - " recompile with PNG_READ_FILLER_SUPPORTED" - " and be sure to use libpng > 1.0.x"); + throw error("expected alpha channel but none found; recompile with PNG_READ_FILLER_SUPPORTED and be sure to use libpng > 1.0.x"); #endif } } @@ -159,19 +160,36 @@ namespace png template< class reader > static void handle_palette(reader& io) { - if (io.get_color_type() == color_type_palette) + bool src_palette = + io.get_color_type() == color_type_palette; + bool dst_palette = + traits::get_color_type() == color_type_palette; + if (src_palette && !dst_palette) { #ifdef PNG_READ_EXPAND_SUPPORTED io.set_palette_to_rgb(); - - if (traits::get_color_type() != color_type_palette) - { - io.get_info().drop_palette(); - } + io.get_info().drop_palette(); #else - throw error("indexed colors unexpected;" - " recompile with PNG_READ_EXPAND_SUPPORTED"); + throw error("indexed colors unexpected; recompile with PNG_READ_EXPAND_SUPPORTED"); +#endif + } + else if (!src_palette && dst_palette) + { + throw error("conversion to indexed colors is unsupported (yet)"); + } + else if (src_palette && dst_palette + && io.get_bit_depth() != traits::get_bit_depth()) + { + if (traits::get_bit_depth() == 8) + { +#ifdef PNG_READ_PACK_SUPPORTED + io.set_packing(); #endif + } + else + { + throw error("cannot convert to indexed colors with bit-depth < 8"); + } } } @@ -186,9 +204,7 @@ namespace png #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED io.set_rgb_to_gray(/*rgb_to_gray_error*/); #else - throw error("grayscale data expected;" - " recompile with" - " PNG_READ_RGB_TO_GRAY_SUPPORTED"); + throw error("grayscale data expected; recompile with PNG_READ_RGB_TO_GRAY_SUPPORTED"); #endif } if (!src_rgb && dst_rgb) @@ -196,9 +212,7 @@ namespace png #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED io.set_gray_to_rgb(); #else - throw error("expected RGB data;" - " recompile with" - " PNG_READ_GRAY_TO_RGB_SUPPORTED"); + throw error("expected RGB data; recompile with PNG_READ_GRAY_TO_RGB_SUPPORTED"); #endif } } @@ -214,9 +228,7 @@ namespace png #ifdef PNG_READ_EXPAND_SUPPORTED io.set_gray_1_2_4_to_8(); #else - throw error("convert_color_space: expected 8-bit data;" - " recompile with" - " PNG_READ_EXPAND_SUPPORTED"); + throw error("convert_color_space: expected 8-bit data; recompile with PNG_READ_EXPAND_SUPPORTED"); #endif } } @@ -325,6 +337,16 @@ namespace png { }; + /** + * \brief Converts %image %color space. A specialization for + * index_pixel type. + */ + template<> + struct convert_color_space< index_pixel > + : detail::convert_color_space_impl< index_pixel > + { + }; + } // namespace png #endif // PNGPP_CONVERT_COLOR_SPACE_HPP_INCLUDED diff --git a/_tools/code_generators/libs/png++/error.hpp b/_tools/code_generators/libs/png++/error.hpp index 971032f..834cf1b 100644 --- a/_tools/code_generators/libs/png++/error.hpp +++ b/_tools/code_generators/libs/png++/error.hpp @@ -31,9 +31,21 @@ #ifndef PNGPP_ERROR_HPP_INCLUDED #define PNGPP_ERROR_HPP_INCLUDED +/* check if we have strerror_s or strerror_r, prefer the former which is C11 std */ +#ifdef __STDC_LIB_EXT1__ +#define __STDC_WANT_LIB_EXT1__ 1 +#include <string.h> + +#define HAVE_STRERROR_S 1 +#else +#undef HAVE_STRERROR_S +#endif + +#include <string> #include <stdexcept> #include <cerrno> #include <cstdlib> +#include <cstring> namespace png { @@ -73,10 +85,32 @@ namespace png * \param message error description * \param error error number */ - explicit std_error(std::string const& message, int error = errno) - : std::runtime_error((message + ": ") + strerror(error)) + explicit std_error(std::string const& message, int errnum = errno) + : std::runtime_error((message + ": ") + thread_safe_strerror(errnum)) { } + + protected: + static std::string thread_safe_strerror(int errnum) + { +#define ERRBUF_SIZE 512 + char buf[ERRBUF_SIZE] = { 0 }; + +#ifdef HAVE_STRERROR_S + strerror_s(buf, ERRBUF_SIZE, errnum); + return std::string(buf); +#else +#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE + strerror_r(errnum, buf, ERRBUF_SIZE); + return std::string(buf); +#else + /* GNU variant can return a pointer to static buffer instead of buf */ + return std::string(strerror_r(errnum, buf, ERRBUF_SIZE)); +#endif +#endif + +#undef ERRBUF_SIZE + } }; } // namespace png diff --git a/_tools/code_generators/libs/png++/example/Makefile b/_tools/code_generators/libs/png++/example/Makefile index 1cbb0a2..3c209dc 100644 --- a/_tools/code_generators/libs/png++/example/Makefile +++ b/_tools/code_generators/libs/png++/example/Makefile @@ -28,55 +28,18 @@ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -ifndef PREFIX -PREFIX := /usr/local -endif - ifndef PNGPP PNGPP := .. endif -make_cflags := -Wall $(CFLAGS) -I$(PREFIX)/include -I$(PNGPP) -make_ldflags := $(LDFLAGS) -L$(PREFIX)/lib - -ifndef NDEBUG -make_cflags := $(make_cflags) -g -make_ldflags := $(make_ldflags) -g -endif - -ifndef LIBPNG_CONFIG -LIBPNG_CONFIG := libpng-config -endif - sources := pixel_generator.cpp -deps := $(sources:.cpp=.dep) -objects := $(sources:.cpp=.o) -targets := $(sources:.cpp=$(bin_suffix)) - -all: $(deps) $(targets) +include ../common.mk dist-copy-files: mkdir $(dist_dir)/example cp $(sources) Makefile $(dist_dir)/example -clean: clean-deps - rm -f $(targets) $(objects) - -.PHONY: all dist-copy-files clean clean-deps - -%$(bin_suffix): %.o - g++ -o $@ $< $(make_ldflags) `$(LIBPNG_CONFIG) --ldflags` - -%.o: %.cpp - g++ -c -o $@ $< $(make_cflags) `$(LIBPNG_CONFIG) --cflags` - - -%.dep: %.cpp - g++ -M $(CPPFLAGS) $(make_cflags) $< -o- | \ - sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@ - -clean-deps: - rm -f $(deps) +.PHONY: dist-copy-files include $(deps) diff --git a/_tools/code_generators/libs/png++/generator.hpp b/_tools/code_generators/libs/png++/generator.hpp index e9cc02b..e2f6323 100644 --- a/_tools/code_generators/libs/png++/generator.hpp +++ b/_tools/code_generators/libs/png++/generator.hpp @@ -69,7 +69,7 @@ namespace png * as follows: * * \code - * png::byte* get_next_row(size_t pos); + * png::byte* get_next_row(png::uint_32 pos); * void reset(size_t pass); * \endcode * @@ -138,8 +138,7 @@ namespace png #ifdef PNG_WRITE_SWAP_SUPPORTED wr.set_swap(); #else - throw error("Cannot write 16-bit image:" - " recompile with PNG_WRITE_SWAP_SUPPORTED."); + throw error("Cannot write 16-bit image: recompile with PNG_WRITE_SWAP_SUPPORTED."); #endif } #endif @@ -154,12 +153,10 @@ namespace png } else { - throw std::logic_error("Cannot write interlaced image:" - " generator does not support it."); + throw std::logic_error("Cannot write interlaced image: generator does not support it."); } #else - throw error("Cannot write interlaced image:" - " interlace handling disabled."); + throw error("Cannot write interlaced image: interlace handling disabled."); #endif } else @@ -171,7 +168,7 @@ namespace png { pixel_gen->reset(pass); - for (size_t pos = 0; pos < this->get_info().get_height(); ++pos) + for (uint_32 pos = 0; pos < this->get_info().get_height(); ++pos) { wr.write_row(pixel_gen->get_next_row(pos)); } diff --git a/_tools/code_generators/libs/png++/gray_pixel.hpp b/_tools/code_generators/libs/png++/gray_pixel.hpp index c1bdb07..69978b7 100644 --- a/_tools/code_generators/libs/png++/gray_pixel.hpp +++ b/_tools/code_generators/libs/png++/gray_pixel.hpp @@ -52,7 +52,7 @@ namespace png * \brief The packed gray pixel class template. The available * specializations are for 1-, 2- and 4-bit pixels. */ - template< size_t bits > + template< int bits > class packed_gray_pixel : public packed_pixel< bits > { @@ -99,7 +99,7 @@ namespace png /** * \brief Pixel traits specialization for packed_gray_pixel. */ - template< size_t bits > + template< int bits > struct pixel_traits< packed_gray_pixel< bits > > : basic_pixel_traits< packed_gray_pixel< bits >, byte, color_type_gray, /* channels = */ 1, bits > diff --git a/_tools/code_generators/libs/png++/image.hpp b/_tools/code_generators/libs/png++/image.hpp index 0cbf8e4..bca475a 100644 --- a/_tools/code_generators/libs/png++/image.hpp +++ b/_tools/code_generators/libs/png++/image.hpp @@ -47,8 +47,18 @@ namespace png * %info like interlace type, compression method, palette (for * colormap-based images) etc. Provides methods to read and write * images from/to a generic stream and to manipulate %image pixels. + * + * The default pixel_buffer stores pixels in a vector of vectors, which + * is good for openning, editing or converting an image to any + * pixel type. + * But for simple and fast image unpacking to one memory chunk this approch + * is unacceptable, because it leads to multiple memory allocations, the + * unpacked image is spread across the memory and client code needs to + * gather it manualy. solid_pixel_buffer solves this problem, but with + * restriction: pixels with fractional number of bytes per channel are + * not allowed (see solid_pixel_buffer.hpp for details). */ - template< typename pixel > + template< typename pixel, typename pixel_buffer_type = pixel_buffer< pixel > > class image { public: @@ -60,12 +70,14 @@ namespace png /** * \brief The pixel buffer type for \c pixel. */ - typedef pixel_buffer< pixel > pixbuf; + typedef pixel_buffer_type pixbuf; /** * \brief Represents a row of image pixel data. */ typedef typename pixbuf::row_type row_type; + typedef typename pixbuf::row_access row_access; + typedef typename pixbuf::row_const_access row_const_access; /** * \brief A transformation functor to convert any image to @@ -92,7 +104,7 @@ namespace png /** * \brief Constructs an empty image of specified width and height. */ - image(size_t width, size_t height) + image(uint_32 width, uint_32 height) : m_info(make_image_info< pixel >()) { resize(width, height); @@ -262,14 +274,6 @@ namespace png write_stream(stream); } - /** - * \brief Writes an image to a stream. - */ - void write_stream(std::ostream& stream) - { - write_stream(stream); - } - /** * \brief Writes an image to a stream. */ @@ -306,12 +310,12 @@ namespace png m_pixbuf = buffer; } - size_t get_width() const + uint_32 get_width() const { return m_pixbuf.get_width(); } - size_t get_height() const + uint_32 get_height() const { return m_pixbuf.get_height(); } @@ -319,7 +323,7 @@ namespace png /** * \brief Resizes the image pixel buffer. */ - void resize(size_t width, size_t height) + void resize(uint_32 width, uint_32 height) { m_pixbuf.resize(width, height); m_info.set_width(width); @@ -332,7 +336,7 @@ namespace png * * \see pixel_buffer::get_row() */ - row_type& get_row(size_t index) + row_access get_row(size_t index) { return m_pixbuf.get_row(index); } @@ -343,7 +347,7 @@ namespace png * * \see pixel_buffer::get_row() */ - row_type const& get_row(size_t index) const + row_const_access get_row(size_t index) const { return m_pixbuf.get_row(index); } @@ -351,7 +355,7 @@ namespace png /** * \brief The non-checking version of get_row() method. */ - row_type& operator[](size_t index) + row_access operator[](size_t index) { return m_pixbuf[index]; } @@ -359,7 +363,7 @@ namespace png /** * \brief The non-checking version of get_row() method. */ - row_type const& operator[](size_t index) const + row_const_access operator[](size_t index) const { return m_pixbuf[index]; } @@ -449,6 +453,16 @@ namespace png m_info.set_tRNS(trns); } + double get_gamma() const + { + return m_info.get_gamma(); + } + + void set_gamma(double gamma) + { + m_info.set_gamma(gamma); + } + protected: /** * \brief A common base class template for pixel_consumer and diff --git a/_tools/code_generators/libs/png++/image_info.hpp b/_tools/code_generators/libs/png++/image_info.hpp index 9b17890..8407bc1 100644 --- a/_tools/code_generators/libs/png++/image_info.hpp +++ b/_tools/code_generators/libs/png++/image_info.hpp @@ -59,26 +59,27 @@ namespace png m_color_type(color_type_none), m_interlace_type(interlace_none), m_compression_type(compression_type_default), - m_filter_type(filter_type_default) + m_filter_type(filter_type_default), + m_gamma(0.0) { } - size_t get_width() const + uint_32 get_width() const { return m_width; } - void set_width(size_t width) + void set_width(uint_32 width) { m_width = width; } - size_t get_height() const + uint_32 get_height() const { return m_height; } - void set_height(size_t height) + void set_height(uint_32 height) { m_height = height; } @@ -93,12 +94,12 @@ namespace png m_color_type = color_space; } - size_t get_bit_depth() const + int get_bit_depth() const { return m_bit_depth; } - void set_bit_depth(size_t bit_depth) + void set_bit_depth(int bit_depth) { m_bit_depth = bit_depth; } @@ -171,16 +172,27 @@ namespace png m_tRNS = trns; } + double get_gamma() const + { + return m_gamma; + } + + void set_gamma(double gamma) + { + m_gamma = gamma; + } + protected: uint_32 m_width; uint_32 m_height; - size_t m_bit_depth; + int m_bit_depth; color_type m_color_type; interlace_type m_interlace_type; compression_type m_compression_type; filter_type m_filter_type; palette m_palette; tRNS m_tRNS; + double m_gamma; }; /** diff --git a/_tools/code_generators/libs/png++/index_pixel.hpp b/_tools/code_generators/libs/png++/index_pixel.hpp index a28b806..204a2f8 100644 --- a/_tools/code_generators/libs/png++/index_pixel.hpp +++ b/_tools/code_generators/libs/png++/index_pixel.hpp @@ -62,7 +62,7 @@ namespace png * \brief The packed indexed pixel class template. The available * specializations are for 1-, 2- and 4-bit pixels. */ - template< size_t bits > + template< int bits > class packed_index_pixel : public packed_pixel< bits > { @@ -100,7 +100,7 @@ namespace png /** * \brief Pixel traits specialization for packed_index_pixel. */ - template< size_t bits > + template< int bits > struct pixel_traits< packed_index_pixel< bits > > : basic_pixel_traits< packed_index_pixel< bits >, byte, color_type_palette, /* channels = */ 1, bits > diff --git a/_tools/code_generators/libs/png++/info.hpp b/_tools/code_generators/libs/png++/info.hpp index a12bf2a..3f3cf09 100644 --- a/_tools/code_generators/libs/png++/info.hpp +++ b/_tools/code_generators/libs/png++/info.hpp @@ -75,6 +75,7 @@ namespace png png_get_PLTE(m_png, m_info, & colors, & count); m_palette.assign(colors, colors + count); } + #ifdef PNG_tRNS_SUPPORTED if (png_get_valid(m_png, m_info, chunk_tRNS) == chunk_tRNS) { @@ -91,6 +92,25 @@ namespace png } } #endif + +#ifdef PNG_gAMA_SUPPORTED + if (png_get_valid(m_png, m_info, chunk_gAMA) == chunk_gAMA) + { +#ifdef PNG_FLOATING_POINT_SUPPORTED + if (png_get_gAMA(m_png, m_info, &m_gamma) != PNG_INFO_gAMA) + { + throw error("png_get_gAMA() failed"); + } +#else + png_fixed_point gamma = 0; + if (png_get_gAMA_fixed(m_png, m_info, &gamma) != PNG_INFO_gAMA) + { + throw error("png_get_gAMA_fixed() failed"); + } + m_gamma = gamma / 100000.0; +#endif + } +#endif } void write() const @@ -105,7 +125,7 @@ namespace png { png_set_PLTE(m_png, m_info, const_cast< color* >(& m_palette[0]), - m_palette.size()); + (int) m_palette.size()); } if (! m_tRNS.empty()) { @@ -115,11 +135,25 @@ namespace png m_tRNS.size(), NULL); #else - throw error("attempted to write tRNS chunk;" - " recompile with PNG_tRNS_SUPPORTED"); + throw error("attempted to write tRNS chunk; recompile with PNG_tRNS_SUPPORTED"); #endif } } + + if (m_gamma > 0) + { +#ifdef PNG_gAMA_SUPPORTED +#ifdef PNG_FLOATING_POINT_SUPPORTED + png_set_gAMA(m_png, m_info, m_gamma); +#else + png_set_gAMA_fixed(m_png, m_info, + (png_fixed_point)(m_gamma * 100000)); +#endif +#else + throw error("attempted to write gAMA chunk; recompile with PNG_gAMA_SUPPORTED"); +#endif + } + png_write_info(m_png, m_info); } diff --git a/_tools/code_generators/libs/png++/io_base.hpp b/_tools/code_generators/libs/png++/io_base.hpp index b089fa9..3c2d830 100644 --- a/_tools/code_generators/libs/png++/io_base.hpp +++ b/_tools/code_generators/libs/png++/io_base.hpp @@ -33,10 +33,24 @@ #include <cassert> #include <cstdio> +#include <cstdarg> #include "error.hpp" #include "info.hpp" #include "end_info.hpp" +static void +trace_io_transform(char const* fmt, ...) +{ +#ifdef DEBUG_IO_TRANSFORM + va_list va; + va_start(va, fmt); + fprintf(stderr, "TRANSFORM_IO: "); + vfprintf(stderr, fmt, va); + va_end(va); +#endif +} +#define TRACE_IO_TRANSFORM trace_io_transform + namespace png { @@ -103,22 +117,22 @@ namespace png ////////////////////////////////////////////////////////////////////// // info accessors // - size_t get_width() const + uint_32 get_width() const { return m_info.get_width(); } - void set_width(size_t width) + void set_width(uint_32 width) { m_info.set_width(width); } - size_t get_height() const + uint_32 get_height() const { return m_info.get_height(); } - void set_height(size_t height) + void set_height(uint_32 height) { m_info.set_height(height); } @@ -133,12 +147,12 @@ namespace png m_info.set_color_type(color_space); } - size_t get_bit_depth() const + int get_bit_depth() const { return m_info.get_bit_depth(); } - void set_bit_depth(size_t bit_depth) + void set_bit_depth(int bit_depth) { m_info.set_bit_depth(bit_depth); } @@ -185,16 +199,19 @@ namespace png #if defined(PNG_READ_EXPAND_SUPPORTED) void set_gray_1_2_4_to_8() const { - png_set_gray_1_2_4_to_8(m_png); + TRACE_IO_TRANSFORM("png_set_expand_gray_1_2_4_to_8\n"); + png_set_expand_gray_1_2_4_to_8(m_png); } void set_palette_to_rgb() const { + TRACE_IO_TRANSFORM("png_set_palette_to_rgb\n"); png_set_palette_to_rgb(m_png); } void set_tRNS_to_alpha() const { + TRACE_IO_TRANSFORM("png_set_tRNS_to_alpha\n"); png_set_tRNS_to_alpha(m_png); } #endif // defined(PNG_READ_EXPAND_SUPPORTED) @@ -202,6 +219,7 @@ namespace png #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) void set_bgr() const { + TRACE_IO_TRANSFORM("png_set_bgr\n"); png_set_bgr(m_png); } #endif @@ -209,6 +227,7 @@ namespace png #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) void set_gray_to_rgb() const { + TRACE_IO_TRANSFORM("png_set_gray_to_rgb\n"); png_set_gray_to_rgb(m_png); } #endif @@ -219,6 +238,10 @@ namespace png double red_weight = -1.0, double green_weight = -1.0) const { + TRACE_IO_TRANSFORM("png_set_rgb_to_gray: error_action=%d," + " red_weight=%lf, green_weight=%lf\n", + error_action, red_weight, green_weight); + png_set_rgb_to_gray(m_png, error_action, red_weight, green_weight); } #else @@ -227,6 +250,10 @@ namespace png fixed_point red_weight = -1, fixed_point green_weight = -1) const { + TRACE_IO_TRANSFORM("png_set_rgb_to_gray_fixed: error_action=%d," + " red_weight=%d, green_weight=%d\n", + error_action, red_weight, green_weight); + png_set_rgb_to_gray_fixed(m_png, error_action, red_weight, green_weight); } @@ -238,6 +265,7 @@ namespace png #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) void set_strip_alpha() const { + TRACE_IO_TRANSFORM("png_set_strip_alpha\n"); png_set_strip_alpha(m_png); } #endif @@ -246,6 +274,7 @@ namespace png || defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) void set_swap_alpha() const { + TRACE_IO_TRANSFORM("png_set_swap_alpha\n"); png_set_swap_alpha(m_png); } #endif @@ -254,6 +283,7 @@ namespace png || defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) void set_invert_alpha() const { + TRACE_IO_TRANSFORM("png_set_invert_alpha\n"); png_set_invert_alpha(m_png); } #endif @@ -261,12 +291,18 @@ namespace png #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) void set_filler(uint_32 filler, filler_type type) const { + TRACE_IO_TRANSFORM("png_set_filler: filler=%08x, type=%d\n", + filler, type); + png_set_filler(m_png, filler, type); } #if !defined(PNG_1_0_X) void set_add_alpha(uint_32 filler, filler_type type) const { + TRACE_IO_TRANSFORM("png_set_add_alpha: filler=%08x, type=%d\n", + filler, type); + png_set_add_alpha(m_png, filler, type); } #endif @@ -275,6 +311,7 @@ namespace png #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) void set_swap() const { + TRACE_IO_TRANSFORM("png_set_swap\n"); png_set_swap(m_png); } #endif @@ -282,6 +319,7 @@ namespace png #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) void set_packing() const { + TRACE_IO_TRANSFORM("png_set_packing\n"); png_set_packing(m_png); } #endif @@ -290,6 +328,7 @@ namespace png || defined(PNG_WRITE_PACKSWAP_SUPPORTED) void set_packswap() const { + TRACE_IO_TRANSFORM("png_set_packswap\n"); png_set_packswap(m_png); } #endif @@ -298,6 +337,10 @@ namespace png void set_shift(byte red_bits, byte green_bits, byte blue_bits, byte alpha_bits = 0) const { + TRACE_IO_TRANSFORM("png_set_shift: red_bits=%d, green_bits=%d," + " blue_bits=%d, alpha_bits=%d\n", + red_bits, green_bits, blue_bits, alpha_bits); + if (get_color_type() != color_type_rgb || get_color_type() != color_type_rgb_alpha) { @@ -313,11 +356,13 @@ namespace png void set_shift(byte gray_bits, byte alpha_bits = 0) const { + TRACE_IO_TRANSFORM("png_set_shift: gray_bits=%d, alpha_bits=%d\n", + gray_bits, alpha_bits); + if (get_color_type() != color_type_gray || get_color_type() != color_type_gray_alpha) { - throw error("set_shift: expected Gray or Gray+Alpha" - " color type"); + throw error("set_shift: expected Gray or Gray+Alpha color type"); } color_info bits; bits.gray = gray_bits; @@ -330,6 +375,7 @@ namespace png || defined(PNG_WRITE_INTERLACING_SUPPORTED) int set_interlace_handling() const { + TRACE_IO_TRANSFORM("png_set_interlace_handling\n"); return png_set_interlace_handling(m_png); } #endif @@ -337,6 +383,7 @@ namespace png #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) void set_invert_mono() const { + TRACE_IO_TRANSFORM("png_set_invert_mono\n"); png_set_invert_mono(m_png); } #endif @@ -344,6 +391,7 @@ namespace png #if defined(PNG_READ_16_TO_8_SUPPORTED) void set_strip_16() const { + TRACE_IO_TRANSFORM("png_set_strip_16\n"); png_set_strip_16(m_png); } #endif @@ -351,6 +399,7 @@ namespace png #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) void set_read_user_transform(png_user_transform_ptr transform_fn) { + TRACE_IO_TRANSFORM("png_set_read_user_transform_fn\n"); png_set_read_user_transform_fn(m_png, transform_fn); } #endif @@ -359,6 +408,9 @@ namespace png || defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) void set_user_transform_info(void* info, int bit_depth, int channels) { + TRACE_IO_TRANSFORM("png_set_user_transform_info: bit_depth=%d," + " channels=%d\n", bit_depth, channels); + png_set_user_transform_info(m_png, info, bit_depth, channels); } #endif @@ -394,7 +446,7 @@ namespace png void raise_error() { - longjmp(m_png->jmpbuf, -1); + longjmp(png_jmpbuf(m_png), -1); } static void raise_error(png_struct* png, char const* message) diff --git a/_tools/code_generators/libs/png++/packed_pixel.hpp b/_tools/code_generators/libs/png++/packed_pixel.hpp index 7202b4f..bf05c47 100644 --- a/_tools/code_generators/libs/png++/packed_pixel.hpp +++ b/_tools/code_generators/libs/png++/packed_pixel.hpp @@ -38,7 +38,7 @@ namespace png namespace detail { - template< size_t bits > class allowed_bit_depth; + template< int bits > class allowed_bit_depth; template<> class allowed_bit_depth< 1 > {}; template<> class allowed_bit_depth< 2 > {}; @@ -50,7 +50,7 @@ namespace png * * \see packed_gray_pixel, packed_index_pixel */ - template< size_t bits > + template< int bits > class packed_pixel : detail::allowed_bit_depth< bits > { @@ -65,12 +65,12 @@ namespace png return m_value; } - static size_t const get_bit_depth() + static int get_bit_depth() { return bits; } - static byte const get_bit_mask() + static byte get_bit_mask() { return (1 << bits) - 1; } diff --git a/_tools/code_generators/libs/png++/pixel_buffer.hpp b/_tools/code_generators/libs/png++/pixel_buffer.hpp index 4aa16e0..07009df 100644 --- a/_tools/code_generators/libs/png++/pixel_buffer.hpp +++ b/_tools/code_generators/libs/png++/pixel_buffer.hpp @@ -65,6 +65,8 @@ namespace png * \brief A row of pixel data. */ typedef row row_type; + typedef row_type& row_access; + typedef row_type const& row_const_access; typedef traits row_traits; /** @@ -79,22 +81,22 @@ namespace png /** * \brief Constructs an empty pixel buffer object. */ - basic_pixel_buffer(size_t width, size_t height) + basic_pixel_buffer(uint_32 width, uint_32 height) : m_width(0), m_height(0) { resize(width, height); } - size_t get_width() const + uint_32 get_width() const { return m_width; } - size_t get_height() const - { + uint_32 get_height() const + { return m_height; - } + } /** * \brief Resizes the pixel buffer. @@ -102,7 +104,7 @@ namespace png * If new width or height is greater than the original, * expanded pixels are filled with value of \a pixel(). */ - void resize(size_t width, size_t height) + void resize(uint_32 width, uint_32 height) { m_width = width; m_height = height; @@ -123,7 +125,7 @@ namespace png * std::out_of_range is thrown if \c index is greater than \c * height. */ - row_type& get_row(size_t index) + row_access get_row(size_t index) { return m_rows.at(index); } @@ -134,7 +136,7 @@ namespace png * * The checking version. */ - row_type const& get_row(size_t index) const + row_const_access get_row(size_t index) const { return m_rows.at(index); } @@ -142,7 +144,7 @@ namespace png /** * \brief The non-checking version of get_row() method. */ - row_type& operator[](size_t index) + row_access operator[](size_t index) { return m_rows[index]; } @@ -150,7 +152,7 @@ namespace png /** * \brief The non-checking version of get_row() method. */ - row_type const& operator[](size_t index) const + row_const_access operator[](size_t index) const { return m_rows[index]; } @@ -181,8 +183,8 @@ namespace png } protected: - size_t m_width; - size_t m_height; + uint_32 m_width; + uint_32 m_height; typedef std::vector< row_type > row_vec; row_vec m_rows; }; @@ -216,7 +218,7 @@ namespace png { } - pixel_buffer(size_t width, size_t height) + pixel_buffer(uint_32 width, uint_32 height) : basic_pixel_buffer< pixel, std::vector< pixel > >(width, height) { } @@ -255,7 +257,7 @@ namespace png */ static size_t get_shift(size_t index) { - size_t const bits = pixel::get_bit_depth(); + int const bits = pixel::get_bit_depth(); return (8 - bits) - (index % get_pixels_per_byte()) * bits; } @@ -444,7 +446,7 @@ namespace png * \brief The pixel buffer class template specialization for the * packed_gray_pixel type. */ - template< size_t bits > + template< int bits > class pixel_buffer< packed_gray_pixel< bits > > : public basic_pixel_buffer< packed_gray_pixel< bits >, packed_pixel_row< packed_gray_pixel @@ -458,7 +460,7 @@ namespace png { } - pixel_buffer(size_t width, size_t height) + pixel_buffer(uint_32 width, uint_32 height) : basic_pixel_buffer< pixel_type, pixel_row_type >(width, height) { @@ -469,7 +471,7 @@ namespace png * \brief The pixel buffer class template specialization for the * packed_index_pixel type. */ - template< size_t bits > + template< int bits > class pixel_buffer< packed_index_pixel< bits > > : public basic_pixel_buffer< packed_index_pixel< bits >, packed_pixel_row< packed_index_pixel @@ -483,7 +485,7 @@ namespace png { } - pixel_buffer(size_t width, size_t height) + pixel_buffer(uint_32 width, uint_32 height) : basic_pixel_buffer< pixel_type, pixel_row_type >(width, height) { diff --git a/_tools/code_generators/libs/png++/pixel_traits.hpp b/_tools/code_generators/libs/png++/pixel_traits.hpp index 6500691..8ffdfee 100644 --- a/_tools/code_generators/libs/png++/pixel_traits.hpp +++ b/_tools/code_generators/libs/png++/pixel_traits.hpp @@ -56,8 +56,8 @@ namespace png template< typename pixel, typename component, color_type pixel_color_type, - size_t channels = sizeof(pixel) / sizeof(component), - size_t bit_depth = std::numeric_limits< component >::digits > + int channels_value = sizeof(pixel) / sizeof(component), + int bit_depth_value = std::numeric_limits< component >::digits > struct basic_pixel_traits { typedef pixel pixel_type; @@ -67,11 +67,15 @@ namespace png { return pixel_color_type; } - static size_t get_channels() + + static const int channels = channels_value; + static int get_channels() { return channels; } - static size_t get_bit_depth() + + static const int bit_depth = bit_depth_value; + static int get_bit_depth() { return bit_depth; } diff --git a/_tools/code_generators/libs/png++/png.hpp b/_tools/code_generators/libs/png++/png.hpp index 1e82c04..e4f4520 100644 --- a/_tools/code_generators/libs/png++/png.hpp +++ b/_tools/code_generators/libs/png++/png.hpp @@ -54,6 +54,7 @@ #include "generator.hpp" #include "consumer.hpp" #include "pixel_buffer.hpp" +#include "solid_pixel_buffer.hpp" #include "require_color_space.hpp" #include "convert_color_space.hpp" #include "image.hpp" @@ -158,9 +159,9 @@ * #include <png++/png.hpp> * //... * png::image< png::rgb_pixel > image(128, 128); - * for (size_t y = 0; y < image.get_height(); ++y) + * for (png::uint_32 y = 0; y < image.get_height(); ++y) * { - * for (size_t x = 0; x < image.get_width(); ++x) + * for (png::uint_32 x = 0; x < image.get_width(); ++x) * { * image[y][x] = png::rgb_pixel(x, y, x + y); * // non-checking equivalent of image.set_pixel(x, y, ...); @@ -262,10 +263,10 @@ * * Also, you can check out sources directly from SVN repository: * svn://svn.sv.nongnu.org/pngpp/trunk/ or - * http://svn.sv.nongnu.org/pngpp/trunk/ (for people w/o outgoing svn). + * http://svn.sv.nongnu.org/svn/pngpp/trunk/ (for people w/o outgoing svn). * * Online version of this documentation can be found here: - * http://www.nongnu.org/pngpp/doc/0.2.3/index.html + * http://www.nongnu.org/pngpp/doc/ * * \section sec_bugs Bugs * diff --git a/_tools/code_generators/libs/png++/reader.hpp b/_tools/code_generators/libs/png++/reader.hpp index 61dd90c..74e2ac1 100644 --- a/_tools/code_generators/libs/png++/reader.hpp +++ b/_tools/code_generators/libs/png++/reader.hpp @@ -92,7 +92,7 @@ namespace png */ void read_png() { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -107,7 +107,7 @@ namespace png */ void read_info() { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -119,7 +119,7 @@ namespace png */ void read_row(byte* bytes) { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -131,7 +131,7 @@ namespace png */ void read_end_info() { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -144,7 +144,7 @@ namespace png } private: - static void read_data(png_struct* png, byte* data, size_t length) + static void read_data(png_struct* png, byte* data, png_size_t length) { io_base* io = static_cast< io_base* >(png_get_error_ptr(png)); reader* rd = static_cast< reader* >(io); diff --git a/_tools/code_generators/libs/png++/solid_pixel_buffer.hpp b/_tools/code_generators/libs/png++/solid_pixel_buffer.hpp new file mode 100644 index 0000000..9f84245 --- /dev/null +++ b/_tools/code_generators/libs/png++/solid_pixel_buffer.hpp @@ -0,0 +1,243 @@ +/* + * Copyright (C) 2007,2008 Alex Shulgin + * + * This file is part of png++ the C++ wrapper for libpng. PNG++ is free + * software; the exact copying conditions are as follows: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ +#ifndef PNGPP_SOLID_PIXEL_BUFFER_HPP_INCLUDED +#define PNGPP_SOLID_PIXEL_BUFFER_HPP_INCLUDED + +#include <cassert> +#include <cstddef> +#include <climits> +#include <stdexcept> +#include <vector> + +#include "config.hpp" +#include "packed_pixel.hpp" +#include "gray_pixel.hpp" +#include "index_pixel.hpp" + +namespace png +{ + + /** + * \brief Pixel buffer, that stores pixels as continuous memory chunk. + * solid_pixel_buffer is useful when user whats to open png, do some + * changes and fetch to buffer to draw (as texture for example). + */ + template< typename pixel > + class solid_pixel_buffer + { + public: + typedef pixel_traits< pixel > pixel_traits_t; + struct row_traits + { + typedef pixel* row_access; + typedef const pixel* row_const_access; + + static byte* get_data(row_access row) + { + return reinterpret_cast<byte*>(row); + } + }; + + + /** + * \brief A row of pixel data. + */ + typedef typename row_traits::row_access row_access; + typedef typename row_traits::row_const_access row_const_access; + typedef row_access row_type; + + /** + * \brief Constructs an empty 0x0 pixel buffer object. + */ + solid_pixel_buffer() + : m_width(0), + m_height(0), + m_stride(0) + { + } + + /** + * \brief Constructs an empty pixel buffer object. + */ + solid_pixel_buffer(uint_32 width, uint_32 height) + : m_width(0), + m_height(0), + m_stride(0) + { + resize(width, height); + } + + uint_32 get_width() const + { + return m_width; + } + + uint_32 get_height() const + { + return m_height; + } + + /** + * \brief Resizes the pixel buffer. + * + * If new width or height is greater than the original, + * expanded pixels are filled with value of \a pixel(). + */ + void resize(uint_32 width, uint_32 height) + { + m_width = width; + m_height = height; + m_stride = m_width * bytes_per_pixel; + m_bytes.resize(height * m_stride); + } + + /** + * \brief Returns a reference to the row of image data at + * specified index. + * + * Checks the index before returning a row: an instance of + * std::out_of_range is thrown if \c index is greater than \c + * height. + */ + row_access get_row(size_t index) + { + return reinterpret_cast<row_access>(&m_bytes.at(index * m_stride)); + } + + /** + * \brief Returns a const reference to the row of image data at + * specified index. + * + * The checking version. + */ + row_const_access get_row(size_t index) const + { + return (row_const_access)(&m_bytes.at(index * m_stride)); + } + + /** + * \brief The non-checking version of get_row() method. + */ + row_access operator[](size_t index) + { + return (row_access)(&m_bytes[index * m_stride]); + } + + /** + * \brief The non-checking version of get_row() method. + */ + row_const_access operator[](size_t index) const + { + return (row_const_access)(&m_bytes[index * m_stride]); + } + + /** + * \brief Replaces the row at specified index. + */ + void put_row(size_t index, row_const_access r) + { + row_access row = get_row(); + for (uint_32 i = 0; i < m_width; ++i) + *row++ = *r++; + } + + /** + * \brief Returns a pixel at (x,y) position. + */ + pixel get_pixel(size_t x, size_t y) const + { + size_t index = (y * m_width + x) * bytes_per_pixel; + return *reinterpret_cast< const pixel* >(&m_bytes.at(index)); + } + + /** + * \brief Replaces a pixel at (x,y) position. + */ + void set_pixel(size_t x, size_t y, pixel p) + { + size_t index = (y * m_width + x) * bytes_per_pixel; + *reinterpret_cast< pixel* >(&m_bytes.at(index)) = p; + } + + /** + * \brief Provides easy constant read access to underlying byte-buffer. + */ + const std::vector< byte >& get_bytes() const + { + return m_bytes; + } + +#ifdef PNGPP_HAS_STD_MOVE + /** + * \brief Moves the buffer to client code (c++11 only) . + */ + std::vector< byte > fetch_bytes() + { + m_width = 0; + m_height = 0; + m_stride = 0; + + // the buffer is moved outside without copying and leave m_bytes empty. + return std::move(m_bytes); + } +#endif + + protected: + static const size_t bytes_per_pixel = pixel_traits_t::channels * + pixel_traits_t::bit_depth / CHAR_BIT; + + protected: + uint_32 m_width; + uint_32 m_height; + size_t m_stride; + std::vector< byte > m_bytes; + +#ifdef PNGPP_HAS_STATIC_ASSERT + static_assert(pixel_traits_t::bit_depth % CHAR_BIT == 0, + "Bit_depth should consist of integer number of bytes"); + + static_assert(sizeof(pixel) * CHAR_BIT == + pixel_traits_t::channels * pixel_traits_t::bit_depth, + "pixel type should contain channels data only"); +#endif + }; + + /** + * \brief solid_pixel_buffer for packed_pixel is not implemented now. + * Should there be a gap between rows? How to deal with last + * useless bits in last byte in buffer? + */ + template< int bits > + class solid_pixel_buffer< packed_pixel< bits > >; + +} // namespace png + +#endif // PNGPP_solid_pixel_buffer_HPP_INCLUDED diff --git a/_tools/code_generators/libs/png++/streaming_base.hpp b/_tools/code_generators/libs/png++/streaming_base.hpp index 68a23dd..b63a793 100644 --- a/_tools/code_generators/libs/png++/streaming_base.hpp +++ b/_tools/code_generators/libs/png++/streaming_base.hpp @@ -97,7 +97,7 @@ namespace png { } - streaming_base(size_t width, size_t height) + streaming_base(uint_32 width, uint_32 height) : m_info_holder(make_image_info< pixel >()) { get_info().set_width(width); diff --git a/_tools/code_generators/libs/png++/test/Makefile b/_tools/code_generators/libs/png++/test/Makefile deleted file mode 100644 index 5f9f159..0000000 --- a/_tools/code_generators/libs/png++/test/Makefile +++ /dev/null @@ -1,101 +0,0 @@ -# -# Copyright (C) 2007,2008 Alex Shulgin -# -# This file is part of png++ the C++ wrapper for libpng. PNG++ is free -# software; the exact copying conditions are as follows: -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. 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. -# -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -# -ifndef PREFIX -PREFIX := /usr/local -endif - -ifndef PNGPP -PNGPP := .. -endif - -make_cflags := -Wall $(CFLAGS) -I$(PREFIX)/include -I$(PNGPP) -make_ldflags := $(LDFLAGS) -L$(PREFIX)/lib - -ifndef NDEBUG -make_cflags := $(make_cflags) -g -make_ldflags := $(make_ldflags) -g -endif - -ifndef LIBPNG_CONFIG -LIBPNG_CONFIG := libpng-config -endif - -sources := convert_color_space.cpp \ - generate_gray_packed.cpp \ - read_write_gray_packed.cpp \ - generate_palette.cpp \ - write_gray_16.cpp \ - read_write_param.cpp \ - dump.cpp - -deps := $(sources:.cpp=.dep) -objects := $(sources:.cpp=.o) -targets := $(sources:.cpp=$(bin_suffix)) - -all: $(deps) $(targets) - -dist-copy-files: - mkdir $(dist_dir)/test - cp $(sources) Makefile test.sh README *.png $(dist_dir)/test - mkdir $(dist_dir)/test/cmp - cp cmp/*.out $(dist_dir)/test/cmp - -clean: clean-targets clean-tests-output clean-deps - -clean-targets: - rm -f $(targets) $(objects) - -test: all - ./test.sh - -clean-tests-output: - rm -f *.out - -.PHONY: all dist-copy-files \ - clean clean-targets \ - test test-convert_color_space \ - clean-tests-output \ - clean-deps - -%$(bin_suffix): %.o - g++ -o $@ $< $(make_ldflags) `$(LIBPNG_CONFIG) --ldflags` - -%.o: %.cpp - g++ -c -o $@ $< $(make_cflags) `$(LIBPNG_CONFIG) --cflags` - -%.dep: %.cpp - g++ -M $(CPPFLAGS) $(make_cflags) $< -o- | \ - sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@ - -clean-deps: - rm -f $(deps) - -include $(deps) diff --git a/_tools/code_generators/libs/png++/test/README b/_tools/code_generators/libs/png++/test/README deleted file mode 100644 index 714d12c..0000000 --- a/_tools/code_generators/libs/png++/test/README +++ /dev/null @@ -1,85 +0,0 @@ - -pngsuite --------- -(c) Willem van Schaik, 1999 - -Permission to use, copy, and distribute these images for any purpose and -without fee is hereby granted. - -These 15 images are part of the much larger PngSuite test-set of -images, available for developers of PNG supporting software. The -complete set, available at http:/www.schaik.com/pngsuite/, contains -a variety of images to test interlacing, gamma settings, ancillary -chunks, etc. - -The images in this directory represent the basic PNG color-types: -grayscale (1-16 bit deep), full color (8 or 16 bit), paletted -(1-8 bit) and grayscale or color images with alpha channel. You -can use them to test the proper functioning of PNG software. - - filename depth type - ------------ ------ -------------- - basn0g01.png 1-bit grayscale - basn0g02.png 2-bit grayscale - basn0g04.png 4-bit grayscale - basn0g08.png 8-bit grayscale - basn0g16.png 16-bit grayscale - basn2c08.png 8-bit truecolor - basn2c16.png 16-bit truecolor - basn3p01.png 1-bit paletted - basn3p02.png 2-bit paletted - basn3p04.png 4-bit paletted - basn3p08.png 8-bit paletted - basn4a08.png 8-bit gray with alpha - basn4a16.png 16-bit gray with alpha - basn6a08.png 8-bit RGBA - basn6a16.png 16-bit RGBA - -Here is the correct result of typing "pngtest -m *.png" in -this directory: - -Testing basn0g01.png: PASS (524 zero samples) - Filter 0 was used 32 times -Testing basn0g02.png: PASS (448 zero samples) - Filter 0 was used 32 times -Testing basn0g04.png: PASS (520 zero samples) - Filter 0 was used 32 times -Testing basn0g08.png: PASS (3 zero samples) - Filter 1 was used 9 times - Filter 4 was used 23 times -Testing basn0g16.png: PASS (1 zero samples) - Filter 1 was used 1 times - Filter 2 was used 31 times -Testing basn2c08.png: PASS (6 zero samples) - Filter 1 was used 5 times - Filter 4 was used 27 times -Testing basn2c16.png: PASS (592 zero samples) - Filter 1 was used 1 times - Filter 4 was used 31 times -Testing basn3p01.png: PASS (512 zero samples) - Filter 0 was used 32 times -Testing basn3p02.png: PASS (448 zero samples) - Filter 0 was used 32 times -Testing basn3p04.png: PASS (544 zero samples) - Filter 0 was used 32 times -Testing basn3p08.png: PASS (4 zero samples) - Filter 0 was used 32 times -Testing basn4a08.png: PASS (32 zero samples) - Filter 1 was used 1 times - Filter 4 was used 31 times -Testing basn4a16.png: PASS (64 zero samples) - Filter 0 was used 1 times - Filter 1 was used 2 times - Filter 2 was used 1 times - Filter 4 was used 28 times -Testing basn6a08.png: PASS (160 zero samples) - Filter 1 was used 1 times - Filter 4 was used 31 times -Testing basn6a16.png: PASS (1072 zero samples) - Filter 1 was used 4 times - Filter 4 was used 28 times -libpng passes test - -Willem van Schaik -<willem@schaik.com> -October 1999 diff --git a/_tools/code_generators/libs/png++/test/basn0g01.png b/_tools/code_generators/libs/png++/test/basn0g01.png deleted file mode 100644 index e31e1c7a635b50e22b6d02ab8ba21f8099b39faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMg|53hG<6jNCpN5mUKs7M+U~W1%@xC#e;-B zT^vI=X6l~V$jNNL!+P=cC6-NI3fxsD`4dEKnhy4ICAzW)etgiSzv|VcB`rDUR;mWG zJr6bs7kVVPNpZionys``v8rlZ_pMFy^0Q7EWa`b;Ow4<kZ;<+7zq~-Zr~c9@711E; NJzf1=);T3K0RT&PG^GFl diff --git a/_tools/code_generators/libs/png++/test/basn0g02.png b/_tools/code_generators/libs/png++/test/basn0g02.png deleted file mode 100644 index 68809dd8fc0993ddebce8aa9c7bf9bbecbd36cfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;ICI$uu2APGnoeT^NEa{HEjtq=#3k+XOi)Ub9 zkoR<P43U_coWK$LRlet=K}WzLhTyh-Mq^I-<Ow_38TNYCH@0^NFoTTnboFyt=akR{ E0DtEiR{#J2 diff --git a/_tools/code_generators/libs/png++/test/basn0g04.png b/_tools/code_generators/libs/png++/test/basn0g04.png deleted file mode 100644 index 6fa089cb8a4ba0e8421ea05d33676856f0cac93c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I76t|ehRF|4XfiM`u%tWsIx;Y}EiimBEuMja z!Nb$VF+^ixazcWDNJx;8Sy>?`udlbZe!7A)!_?as9s3xx%AffZu>|Z~9X3(9;ndx| vvt<}V-pw?A!m*&}{XJE8hN-{b$x1RY$cwyVjMvR{1li^3>gTe~DWM4fibpFS diff --git a/_tools/code_generators/libs/png++/test/basn0g08.png b/_tools/code_generators/libs/png++/test/basn0g08.png deleted file mode 100644 index bf522eef0018ae60539ee1b50e98d97906101f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VmUKs7M+U~W1%@xC#WOH4 zIC{D`hFJ6_rzEH_h;W?P%)`ps!_T4l<GZ|lLZyL>h`}kr3F#?|Dr0!qSbO?Eocj0w n{Ezl$g@zI$2B#iOO-*582zdIhuy7@}3dj;qS3j3^P6<r_%}gks diff --git a/_tools/code_generators/libs/png++/test/basn0g16.png b/_tools/code_generators/libs/png++/test/basn0g16.png deleted file mode 100644 index 318ebcadf4fd0b64fb9b824e81c0cc8e3dfd2d82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}Ea{HEjtq=#3k+XOi)Ub9 zi1T!D4Dsl^ddZOMfB}zlpk?&?`eSz%Og^AdZFE(OW%12^dy9tUJHmy9lNVSuCCGBj zWVqY(&EXWw3$Z(FPHGO@7uZfPV%){Ly>SBP1>Fq(B|ZuE`Rs4}zerk~uV)au;e8{1 Tcif3fAQyPL`njxgN@xNA5N<f5 diff --git a/_tools/code_generators/libs/png++/test/basn2c08.png b/_tools/code_generators/libs/png++/test/basn2c08.png deleted file mode 100644 index 21d2f91a868fc637fdae4fba6c87bfd09b158815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0u%tWsIx;Y}EiimBEuMja z!Nb$VF~p<u?bU;v3<f+*4y|t{{@q?AZ0(}`W#Nx=54E@OvRF58iTsdR@b*cqPlZDx y6Terx{Gk?h5seQEN-UIDIyCMsC|`Vlv1#MaIJ@hUXD~1@FnGH9xvX<aXaWG>*)awH diff --git a/_tools/code_generators/libs/png++/test/basn2c16.png b/_tools/code_generators/libs/png++/test/basn2c16.png deleted file mode 100644 index 1bd4a4d0e2c2c6dd8a2e63a63b26f166b8ef5353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2SkfJR9T^zg78t&m7SF)I z@YK`AF(jh(>a>Gg%?1K4%O5z_pRU{fckQ=na%{|#+SJk}pQ(~)bA4iaZ9%_)6N8=p zgIVuWii+zbY}Jk9&prAaRlc3+^|=y_f<?yDKfnD{5POj^;q#`(_!n<JF;$i<+i<|X zWZ4r*4d>@EIn1Un-WV}`ec{8{xckMKmFWw3=YIB--r$ffub0q%PDUf4SB~|^@pt^P z4BOJ5^L}wjf3J2ye(&r98ecRLzROB<pZncwX23jmZ)Ad8)#d{^Uo-;h*-S22uD{bD zWL3SfL9S|JgI1NuiTRAVCFhK#KQx@1$MM6_pJmTN<NeQ^{>Awz>^sW9z`)??>gTe~ HDWM4fzyp6- diff --git a/_tools/code_generators/libs/png++/test/basn3p01.png b/_tools/code_generators/libs/png++/test/basn3p01.png deleted file mode 100644 index a21db5977462c4c0985a0ca1ac2d67ec572d3d17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMrH;E2G1=owlgp=u%tWsIx;Y}EiimBEuMja zfi1u%#P!{OC8f0gIZ~I@7#J8tJzX3_IA$h4U}s`8dBiNRK$v+6AH!~W`-2mXo@r(P N8RhEdvd$@?2>_vB9j5>Q diff --git a/_tools/code_generators/libs/png++/test/basn3p02.png b/_tools/code_generators/libs/png++/test/basn3p02.png deleted file mode 100644 index 1d0ab6197cc8c4dd61e4440cbe98b2149eeafafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;ICT0c(20oEV=?n}EEa{HEjtq=#3k+XOi)Ub9 zU@ms@3}IwstkElPVqjq43GfMVW%$qVpMl~3e+CAI|Ec!cyBHW4lssJ=LnNjq|B&C+ y#n>YG!QjKmgA%J3=+yA6xb**rMDrP2hP|Hkjk#K<elsvIFnGH9xvX<aXaWGOdMeZa diff --git a/_tools/code_generators/libs/png++/test/basn3p04.png b/_tools/code_generators/libs/png++/test/basn3p04.png deleted file mode 100644 index 6dc6eac83f3cf984a4d121e27a8e60454117e12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I7G?$phQ^Te;|vT8Ea{HEjtq=#3k+XOi)Ub9 zU@ms@3}InmDgUu`F#`jGZh%jSs}jS1hX4ON82&5$XJDB5|9=|8U55YV{~7)>Ffja| zc^Aak{eL$DgUf%0|1Os{c<yCjU~u<zaSYLznEc`e2d`~$+SOH`ijp6fzfU`tqTtLh zRa?WOk3sAD(N-D8kau@?KjBzVD0xEA;i;D9MCFE4zTV323{!Vkn@ch=JUH^|B5!K{ R0R{#J22WQ%mvv4FO#myqP0RoQ diff --git a/_tools/code_generators/libs/png++/test/basn3p08.png b/_tools/code_generators/libs/png++/test/basn3p08.png deleted file mode 100644 index 0e07f483c0edad13e60e0d475c33a7ca5b8919ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^zg78t&m7SF)I z%n;xc;;Q7r@b&-O^8e+h|Nj@{Vz4S_P*VE;U+}*m1A~$h!~Zp*Y5&vyr=|U8{I4X$ zaOeO3GyiA0xcp}b4OL=bIDPuRiwi^O|IpK?8H}YE{=d2N_W%DU|4;wFbI0YsOIq50 zV+IBnC5E?e|EHxf{9oeo|NpADZ$aAr{r~^>|G)qL8IAuNhiWk}GXC%A_|LFv6(b{q z3j;$(2gCm-r*}m&DE(JTGh+Dvf99%H|3euVR;^+<oy;KkU+~KRRpnL;|6N?}WHY2O zFfjgS>~Lau^Z!ov9ftpRb}<+mGrVPZTg>qPf5%KO2EqUT%NZE{H#7d<wd-Fs!~cK( z8BR0&pE*<M|NjmK29RV&$NxM3rHmOE7*-ko|IaX!VI~6u0|TQ`8pHox|6Tt7|G(-# zLpcM(zkjP37`$dO{QsZ!UrC99VP^M#!O;Kz|ASorpCOciK~V7j|9}7g{#)|jCG9^* z6@xLu|No)?%gY%UI{v%-XAop4|NoyME$#pRw+xI7|G&Nk>G<#RU+Mq<w{Han89M&| zXJ9Cw{9lRT&K+ap|Nj{N?b`K!=Kuf3#tg})8FuYrSo1&h|NlGx{~K5T19>qt^#7{= z|L@%S9~#QQz>s$54#ORWJI((Y%gg`&`}hC<|I`0NL(9t<{{3S(&2XB5;U6Ot10w^2 zkP^fH|4IxlF0=m||G%<|fgyC}%>OfIGVEg5r4`EX|MclC|I_}@Hva#A*D8ipP8|%v zs~G;TTE)QdmSNYf|NjLU{(({y!_1j88D{=JGjkUMLkB|#!yShIla&}4?)>}zZ&ffu zIYT)UBgjey2IK#4|1<1j_-}0d_W#@eM>_WWFK1ZAkj9Y4prmw%fdQ0Q{@?lEEy%!d znt_oqlp&O%gMooTi4o-b({C9V{&#e^Ft|kTV)(zO{Qu1V3~3Cz{_kQaFE4%za)>d5 zF$2S{|K<M~To_jUU-kdrKL!RtB?hG<|2r7ozMc7h=Ks+D3`z|Dx1<R&2yzKB{1+6w z^B?4mj{hBu42=Jc|L^R(oW#JuxY5(aF~p*m_aHk12a5p10rwR>9x2+^#+<3y5vl3# zMY}F+_^zd8k}-pKb<U}Ki+kGUPK`9$^nKs%8Hc`$JPZG|Y5KA|s&Y>l*@~Oz?KxVx zPB_!!q_fXcEo+MdtV+@^e|E6#@pd&U?y8uj?&1Bx{&M6w!AF*#KC>3TII{T93A;r$ zM^E?}|66DtziDp8R3jfX!?hL%1L_px9<z3R5dOW=z5JSh?}}48w=T^P-IA_)v8~tU z{P~>40=$tPYnEv!Tb>G=Rxs=45jC$*7V^Q}cm5pRe#Gz8M^XKa)4oTZzkWnfYjXGh z6-QLXK1&u(lBzkpTxYTAeZx5wle27&T4)taU|OP(x2b(;$pVq}7v?W<vA$;5n`q-L zJIP?ekKUg(hj>0+?BL(wK1G$C`GuEQ)Pz}bM^xmV*}6^aGygG1+ofpTN2|{s$8M)Q zm0cu#e8uVcDoey4TRO`;<6l)U(VAzWf^6rlHH$1(?l{wa=846|4*3(Fndgk!gtn-x z`fS9#<LLf7X)I?uciJ3wG5ToUS<w^gl4fKuOZ?_p<({Q>h8=ZZ6dCtVo~VA)Y0hHq ixhGGveKKgAb%(uC`kw&fl#QU0j=|H_&t;ucLK6T_9AWPO diff --git a/_tools/code_generators/libs/png++/test/basn4a08.png b/_tools/code_generators/libs/png++/test/basn4a08.png deleted file mode 100644 index 3bb0dd06b510cb42855ce91f1600540f4503ea34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqSkfJR9T^zg78t&m7SF)I zVCw1O7~;{H{OA0E1B|V6GE5AW=IGp))L_=JZ`;SXIMG0gEyOUvM8N%UgBDv4+oKGL dfWr(7_q7yi7wj*LU|?Wi@O1TaS?83{1OUFzBbERF diff --git a/_tools/code_generators/libs/png++/test/basn4a16.png b/_tools/code_generators/libs/png++/test/basn4a16.png deleted file mode 100644 index 6dbee9fbdb93f3535be23326a52fb4d3ac60711e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2206 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 diff --git a/_tools/code_generators/libs/png++/test/basn6a08.png b/_tools/code_generators/libs/png++/test/basn6a08.png deleted file mode 100644 index 61062308548bc3a5255e3e8dbb7f97932f00eb1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Ea{HEjtq=#3k+XOi)Ub9 z$oF({42fucd(Dum!GOo@p?XS&|HAL~p)CE1NA4bVt&k0R5uou$-dE#h7o$O3b={o* zyNsJ<OIh8SPqD4|$s4hN-Op4`skR}eDde&A1}FZQJ9-S23LTUFKU%<OwxHU9eTt0$ l%S{H!05gYrM(Ga>K?+iHuJyl6XJBAp@O1TaS?83{1OUW@JXZh! diff --git a/_tools/code_generators/libs/png++/test/basn6a16.png b/_tools/code_generators/libs/png++/test/basn6a16.png deleted file mode 100644 index a9bf3cb461231de29905eaa02f3a8a66f9fc5477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3435 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 aed>)jhj|lj$1yN4FnGH9xvX<aXaWHK)rYkJ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.16.out deleted file mode 100644 index 87745834c5d94a6321adb31ab21ce7f8fb23abff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh057d>4ZLn2y_PCv+Z*nq?N z?3VxkpT03#V!BwhLAb{2YRLH=D!!=+3%r>gT;+71&iGSO-dy4G*ZGWwYOe3xA1rH( z-DO;R<UnxJx<;=jay2I%T(ysFmyGcBT{HJW^^M!s%IkaPIc$mdVNRAhe_iLt+Qyzs zvxOgLM?@}r%A)mQQ=`_Nlm<rj26Jh-Sk;Ft5mQ$?ak@PC9CO$I4l^gS+{GX!$sJd@ zSIXT8-TBIp@tLE_9p>HI;WIf69=w#Z2;KQ=5(D!*y9smF{YhHD{V(<V-+9aj*b}A- Wr%Ye4yq$r8fx*+&&t;ucLK6UL-)$lQ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GA.8.out deleted file mode 100644 index aa0dceeff7648fd389c85db957dbe1fdb1b0ae63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq)_b}*hIn)?opM{KL4m_% z`m+E3Q>!+foM3HtCF5O@Q_BoPiI!}&<3}1AIvLk~|EfFT#)tW@KdBweyKC@cvMih3 zt|`+w{XS1>Jmwa!dg}Zpm#^{O!VxoX@>JMX&UXEz(ik1|G51Tqsmh0^3msMXd6Fy( z(w|;iIfG^93%*9Z`f$k_vnhTh%?GA!-sJw0eXAlz(b*$s98GsAbUe-Dv$|;B6!Fe% mO5T@LgNe)~U(P+MVDLx~PLUJ;c9?;Ifx*+&&t;ucLK6VXTw$mH diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.16.out deleted file mode 100644 index b8cfb9ce3d90eb72ebb6360a5d59ee02be09c550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}t36#DLp(b7PPr}ApupiG zzWo3H)T)g^Pt?vmY3{wIr!LY_XvFc>r%#xf$&Y7+{q60JkD4pjp6+H@TzW7;Et;pM zMDxB{#M$jUCT2;Wx9(Z|YyDErHD`F(?xf3wO|<cR5VvxN)Zb)Y&YH>$fs@S55qvR` zJ4?0H9MyI?FE~9vmTf)nQlYyF8=gkp)%cr`&(RcPY*@TOI#%FFkvaR+7YCwyLo3x+ foZeWr@BVS#(9MEzI|Owuf}HQ^>gTe~DWM4fQ4Cll diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.GRAY.8.out deleted file mode 100644 index ce17a58e6d344ce19a24297e1fcd7461e643b788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=Zci7-5R2Zqlf3yF3^-UT zkNl386yG+bUU+xVbHjy9EytMm70hB@V95~0m{9BRX!1kv?~SRK9WLbGlQOx-(#Mx{ zU-jdygxe2eH5V~m&r9T}*Y-7zF_&cWZ#<E#P*|mvmw%WwpZ7z*(k_GAy`~m*YDZM{ xd5-SdA-C&Su7}N+3)kx}&$0N}I^Xn9ZJbi8V4UW)zG9H`JYD@<);T3K0RSrYNDBY} diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.16.out deleted file mode 100644 index fe8ad377de9459fb9c03ae9f17b7eb3687798b2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2o_M-AhD5a9opDmA#el;l zG3(#|>Bj6f21`2y#12kh-FkP+%_EG=Y$Ys=j1NC=>5=uYx_E|Ry5APVf@yv}yb98v z#81qhzIk1w6{Dwhm(&FHm1Y9pSAO_a#HG67`V=8Hoytd5>er@Sd-wXA|Hq9id(tlU zHWs_HOTSi6|DngQlCveJ*mC*B9jWFvjTSFm7BptObm?f6d3oge_Bk=TuCIDJ%^~f& zB_HRFrRTLi*t*v)+_=YL@>!OerP1e-XMb<B(hxea|HzKBjajkJ@2E^rwoTy+d1v+f qk;yGrtB=zi^k1^q{`cG8B44xLc#02qUkd{R1B0ilpUXO@geCwWmwChh diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGB.8.out deleted file mode 100644 index 7ed6eb8d806c6708b9c7ea2c1ba094a57d5ea125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($09QAZ@4Dsl^I`u5y5e1Hx z#Le&jpL%n!*D$1x?db(e)3ra_0yTA%uBfH`+j6OM#p#3#yLr@Nr42s+(yfudwDsW5 zd8KzuZY(q5U68x+#XLrp<x{xX>H@;%=B(W&Wq0S;VwRcCm)JH32}aJ({?h9h<Zxf~ z-?9r|TZJ7;ZZIrOW@EJyto45}^Y&D)fYr4cegc=Svo5Ya(-^#<{gaT&%YXOJ%x0IY zT2b5dX@%$9gKKZKmozcSS~Tz8`hVu-{mp*Hj>2<K$ZcDHkzY~3cuK*ScaIqu7#KWV L{an^LB{Ts5VBc>D diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.16.out deleted file mode 100644 index b6e63e5e9a0974946a9fd443673066c7d7700959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=eD!p349RGGI^&?wVFeDC zg_r;TfBNmh1!m*E4yM)n?o8@To6c+aslD!au7RPU;NDg8D$;^_G06>LdNTPA-a9Us zI<URq6)D{>{<`M4YQmKl$vhv_a&9%O>UjNgZ_ez7(6;>a1Fx2BELF9z{`jWK_?2k0 zze7pBq4b4S3+B9!l~-N8@{p=R?ZK8$<`G{db^RTt7A!o|koC}M7o*0Z*79pEaSt!X zPyE2LAT&mJT7$;Jy@g+QrBpemh<xeFo~Ekcy<@BTlCKSSwbm7?Gn6u`>|uWsSJ-RG zsB!3WHAB}2jai%yg7fw%HYwS3?`Pc3DK2;RtF%&R4da5BhKpDqI94(+Ffe$!`njxg HN@xNA2l#$C diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.RGBA.8.out deleted file mode 100644 index 1d4b5dd0c4353a715a5e419fff6be9385c079504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}mpxq^Ln2y_PQS?4YQW*# zz4QP7(?47mg_me=xM=?PjONsbBB7xso-PF?hZw&|7*upOYTq$cQ0jL*Q_J>FDq^Ym z<!GK7RWp+boi!};jV4^|`IyR<7A%}E)F&s$>;G)(RP_Vjy0afdEnH={ZuNupY)V}G z%e&Smrp;a^eB!`mwoM<VG;&!m{8{zzjow1x6|3&Js2(`*|N1Q(NjVR#2R+M#Iu7iO z<M?`D)hXZkoFQ^9FXSR(cb@cJz$EvsF?Q<gJkF2<huJ6HoqC_A<RGI1!<N7Em=AFJ YPd8k2x-wggfq{X+)78&qol`;+03ye3yZ`_I diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.out b/_tools/code_generators/libs/png++/test/cmp/basn0g01.png.out deleted file mode 100644 index 2ff2c105f2d6c9217cdbe7034d92ab929f52f622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMg|53hG<6jND$@e;uyj)Q}@h9PG$oh){Cz% zv25~E;I1;spCD?}bg-8z(Um>$<AW~!Rj)2BX~{XaQZ<<Ed9X>i&?CW3iu=9QY^9xw wRaN7<Z*7{FpLNP0Q*W+jV&2PqgVYcE<ptV3^_Nbmhz42b>FVdQ&MBb@0P{^SHUIzs diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.16.out deleted file mode 100644 index 0bf7b82c894a41dd7c6bbe00e913a018fad1e8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05k)AG&ArY-_r+ITRC~&wO zf6;aKzs5FRbHy*s^Q;{oKJ4i8TxU3I$|>DQ`Ok|^GdkF=t$efJj*(%R^@gb8cL$0Y zo;?(Qb8U`n1>b=W%=eieurnOsXK0XTSit;pz3AjwvtySsFfcH9y85}Sb4q9e09)BK AtN;K2 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GA.8.out deleted file mode 100644 index 791b9cd12f2dd2eaa82b6a0405318bae2002d51b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqd_7$pLp(a)PVweqP~dQx ze^GSz|G=EdyPN71I`Y^=S|q=4axwJoJhdo4szT>K>(^_$&;Hf@b3WmE^#W@F+5H8t mY=hWNHa}rJ$?PG=P_n{8bh6VL<v<1o1_n=8KbLh*2~7Z+l`YKx diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.16.out deleted file mode 100644 index 7685bbb4aafb870e90a07a916d5b0ade99cf437b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}9-c0aAs(H{DGf~lGA7E5 zm1=BU2M<Ue@K|?0@e}iV)-K)z#p~}6Ys&s<H(X${@@3M4y$+QU2P76hJ(y8>;DAAt foPj~li%$#;QJ(}S-Ynb54>H@+)z4*}Q$iB}O0O%s diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.GRAY.8.out deleted file mode 100644 index 94eede03fb47cb9b424e32d0934a733cc2610953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VQ%@Ji5R2aAl!Sx?4%b6H z88vEbObtb>JwM*0FX@+#_;AyIeZi0Z<8@U#8yWlmE`FJKWGOqtz8!)S+1_-X1R3P% L>gTe~DWM4f9i1cX diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.16.out deleted file mode 100644 index 1a545ad2e7ed6b7f895f910f41e43c782985e9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2ay?xfLn2z=PCv-W;K;!| zIXQaE|DZi=ckas?PN>|az#}c#$=&Ky8=%hd@5X=0tS}b`-q=lbuk-&i3kDR&Y?^1g zLA09DOv=_)=X6zCg7!D2U>?RdQ07kdD=rSc?-)%51148H__AEtbL*~&>Cpv8v>6x} O7(8A5T-G@yGywox5;#!+ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGB.8.out deleted file mode 100644 index 6f939ed37ac8dd615a83a338664da2e9c2b222b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0gnGI-hIn+ooodL%V8Frb z`%?Vx|KK+f+m%9^CirkQHg~X0d-CqQq{GSmYa%~0zBpm~`?>oSz8kVTU-Nr8x!idg v{BD<{=ZWrL4NL*@9~fUT+d0%8V3(O|WMcYaW5|651_lOCS3j3^P6<r_+PO5y diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.16.out deleted file mode 100644 index 9f2cb535f0e5c33c94ac11b7cce0e8f9cc967527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=^n1EEhGaCpongq=V8FvH zdqn*A|K$f5vL`QeVn1^IVrX`xZ-}ajr<F-^MuyMTQd^NO_Veq%=w6I^z>vXg^80@F zo?ZL@au+acVVw0;?!z~!@AeB0FkWEGcywXwGHJWG$L|<f`5Md|il<M1&X`-su!T|T xJhRYRu-M~Dhecb#if#Bkwuo6U++sM(d8g6BJiltoDFy}x22WQ%mvv4FO#tHXN%{Z) diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.RGBA.8.out deleted file mode 100644 index 322ba3d6578293770779b1e220f61a16eb041793..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}ah@)YArY-_r+IT7FyL@W z_geSjZ-3JETr<T9@=taOi^%o8hzNQmEVyvqowD%Sx%RhY7^YmEb^Y&cbq0rGcDL+v zvKD*?X8!!my4f_Hy^ndr2j=a}57-$F@G~^XGdy5DAZKCTeW_E0fq{X+)78&qol`;+ E02|;mEC2ui diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.out b/_tools/code_generators/libs/png++/test/cmp/basn0g02.png.out deleted file mode 100644 index 14edf7741f3099255ea1adc5f474ced1ef7b6962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;ICI$uu2APGnoeT^N@}4e^Are!Q6F6eO%J+OU n=m<E(5Zu<!Xv`^}JYgq0!(Pw&#`f+2W{?(7S3j3^P6<r_DPI-n diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.16.out deleted file mode 100644 index cb21875b6b1ab47dae4230bbbbc535b65f48341e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05cAhSdArY-_FKy&yP~c&9 zY>sI7+umv>%+ggn{oRs39)7RNE>)ekkvs6}-%hrD%oz+0%nVWt7Z@7Y7)%%n7-fA~ WYc}pq|G~h(z~JfX=d#Wzp$PzqiX=b) diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GA.8.out deleted file mode 100644 index 5bbae0ed66e7581019aefcfd16c3929678914181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqEIeHtLp(a)Uf9UVpdi3} zAUNj0-}bB5eu?HxQj1l%u9L8;w0!1&=Ec8k*$gdy|8JEz^5CQcPZERl;T5bkEElt^ R7#J8BJYD@<);T3K0RT4QC5r$6 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.16.out deleted file mode 100644 index a7fe5778260b1d33c210f928c4afd26355bd1a45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}W}YsNAs(G?FKpywP!M1~ zP+iFQJ^tD;&U;Q1mUxPvm^%6Dn}<g4*;oDktK2NvEYZPesK9oF!EE|3mZ~lP;?96f N@^tlcS?83{1OT-nB((ql diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.GRAY.8.out deleted file mode 100644 index 4a0fc341693f5c2d89f2aefb71e6a94bad082111..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VRZkbk5R2aAl!Sx?fg{Z` uB{&#Pi5fiGJl`)bL9+Dl3Td~y4U7yQQ&_58`FnqYG<v%FxvX<aXaWGHK^T(& diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.16.out deleted file mode 100644 index 44fb62c149ca80473b0f5c490be05d4edd870e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2f;?RuLn2z=Uf#&dpultF z0Lw;)Z}HPu7nte)JXJF7Q!IaQuy8^A^k@<0jK8=2cQ=}RWc<B-ei?J-Bj!5{XBlQm rFOYO7W;S8Y$ZJSrILmv1XMt?tJDwZiX`X=$3=9mOu6{1-oD!M<WQQ(d diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGB.8.out deleted file mode 100644 index 09fd1e157884d6e999307f1a9f148e2996fc000c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0IC#1^hIn))r#LV*H8q8# z8yjAb;Hl-7$P|3HxX?i;L9(}*aeIOZAKSgAixv_U+-{E(9_UK+Ha9{9nHW^&@!Xgm TVZD-pfq}u()z4*}Q$iB}JIf;F diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.16.out deleted file mode 100644 index 62beb7950f1993612e6f1161fb577ab6b2749ec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=6nVNhhGaCpopO-3!GY&6 zQ&QtQdmW#Gzfl_BuFu!VDpvLU^z2BAk^ArZdi`}w+zXg5*nHu?wC^92P6MCAV>TU# z*bc_-)d!efFqq^Wc%-#~!HS_*dczJb>`LT=0(oy0R@`~Sz`(%Z>FVdQ&MBb@0JTdz Ag8%>k diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.RGBA.8.out deleted file mode 100644 index 7d4a5306175c5745ab0fc28c458fc28854245e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}_MR?|ArY-_FKy&yP~c&9 zY>rU)&CjhX%+ggn{oRs39-E5SuDVot-bU`gtA9J$_AzHLI50CvF<fA1U}G?0C}2>@ X;=R=!yX7AP0|SGntDnm{r-UW|h|?rU diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.out b/_tools/code_generators/libs/png++/test/cmp/basn0g04.png.out deleted file mode 100644 index 286cee0178fb2f0cb56f0c149739180a504db93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I76t|ehRF|4XfiM`czC)vhG<MoPDl_C2?;VX zD=XyW_4U@)Pgihen0ou7V;_T7`7@s)mVlkB!zL;>oVvSrwhUv)yP3vMI2IJWzo+WX fF!lF4SxF`ad69RF@w%CgAhSJP{an^LB{Ts5Z>c7* diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.16.out deleted file mode 100644 index 7794d585b53528c767c454c113bd4db0be633cea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh0537#&FArY-_uWjUQFc5IQ zm_Nl(>Bzre#b*vOu~Rr7iRi8SmYp+qfxwM*vBy3zFmX6E*mW`8-g;X?&VeDCq2$r( zg$%M!<T(@=^d0(Fwk31NJr>9{Jj%$Dz`kPhzP8VDe@xG^?APM`uFJr{z~JfX=d#Wz Gp$P!@*fV?p diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GA.8.out deleted file mode 100644 index f8ed14d936402f0aa8cb09a9b933cd505ee60ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq{5@S9Lp(Z@Q+}L3;lP;^ zxWME03dZKc49DvK|2Ga`ij)gjQhSAAmBaxJ_dpXPBLkz}Y3zp&FdTCiad}+d_MfMx o-tBaAVgkcro|_jrJh>U}bhGR~Qa+WBfq{X+)78&qol`;+0P*fE;{X5v diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.16.out deleted file mode 100644 index 775bee7f4845d3ca4171bed0277381058e8e4070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}{+=$5As(G?uN>rLP!w>! zD8I4C_04{*jeV)<)dq)R+U9)rQ)H@~sdj<;1Ea3^4-V~G(Fyz+6{S};Esr_SYk$Md mlH*I7|IP;K`VVu$1s|~&Z2MOz^!)cckQJV;elF{r5}E+ii7(m! diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.GRAY.8.out deleted file mode 100644 index dc9dfd76049779727342ed6a2869a67029a42c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VM^6{W5R2aAlmrz95snj^ zd01I{_&GFxe3!RRs5FofF*qeSAw6YLWeg7+Yft}&Q~&;-|Iz-e&`?6e;M9YusVOWB X0Z;!G7Ov!00U7G)>gTe~DWM4f?1v;T diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.16.out deleted file mode 100644 index 460d9e7a97ed27b7c4fa078e61b7e2f05eda0f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2x;$MRLn2z=PTR<Nz<`Iv zUoBbU@!#b}^A1~R2DO@a#@Hx565HW?^fbePKS3))wjN=MW^r*~`N6lrZShLguo*sT zyQ8;#X3Fa22*`G6h<bdSF-${b=P~uKlU<Zn9?xL>zTSmpMJI#lJLWZ)UuJbqkGYm$ zAn_^iSKse&C8jGb4N~73r=3jMc`W&^G`n>5ucg;R-Z(NaFfe$!`njxgN@xNANh3<r diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGB.8.out deleted file mode 100644 index 9efa9c2ff2940756ec0573c8d0679fb4f7da1998..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0Bzn3yhIn+oy>gM0L6L_! zAXvtE$!~wrIg4NXz2mFk=r@b;(>|doK?=RQy?<vjeP>o!$@*-L_e?LNMwV|)_jYfP zZJ6m<{_VfM*8`gd!?qPa=Q_E(Xxo<eV-d?a=8UzTRr_r&-2JsQ$8mon0|Nttr>mdK II;Vst0Amn4v;Y7A diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.16.out deleted file mode 100644 index 1e46f172793d5c815db9b1c51a36428439ed8236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=O!jnf49RGGd&7|HhysJl z#r01ll<xfxd1QGcCwbL|r|X*Li!|T;F^h+dVFxD*lg#w+g#l(7N(~H5910B#+(iZw zcRoMfu}5p_E=NH|76AtaMzNF=DW7cK1-!@?uP<{@5&CGGPzjX^OIdu8?-%dBZw|{Z z^UFB-%h|WGg0%Fpadf)OIxfrg_sydCvV-i)=l@S((kX0bU|?YIboFyt=akR{06xz} AR{#J2 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g08.png.RGBA.8.out deleted file mode 100644 index 5ae1c710852efcac319a4dda96cca960c6ac1805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}nVv3=ArY-_uWjUIP!wSb zFz8F{`R$)N=kSTr>9ZefSg_!k>HHcd0nZ&l$0fFXVqoHEP^maKQDsNa^En{y4yFV5 zcIP}*iSRmUFW|rs#&A7qnsLqcg!j49i?o+nG%&nj*mmtp^~-dAIX#8{DO^jk?=Ubh OFnGH9xvX<aXaWET=R5QO diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.16.out deleted file mode 100644 index 1abcb325a9ffa48a7e69564e8ee2adf839974f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05#hxyXArY-_uW0i%7>KxB zylwSuzgt;DmXjQl^Q=09xkA5=yr{myVqiAmoxzQr;>ru+s(ko3%p@li95~f*S&jMA z4(25de;S@N1l?hL&EUnZ!g}Qq-vov%b`|C=kNAGrFDP{oa?pR*u(07CBQN`&&U&T- a#;4D2#?4uFh?RkXfx*+&&t;ucLK6Vwl0G;9 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GA.8.out deleted file mode 100644 index bed384dc1c76fa1ae8f9b0eaddbdde0f7d165054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq0zF+ELp(a4UQ*;^P~dUC z$annj`4hYWzG5F1L>Qj_R62iEV(F1t5)v7_7de^=4}>&4WejIbWA|Z=kSh>PD1!(z m7SH3e@c+Vd=QIBSwq;Bg(^jsN-pRngz~JfX=d#Wzp$PyMmo97o diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.16.out deleted file mode 100644 index 991c6e8f09d40a5a69d429f0d529fa8512e68045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}ah@)YAs(GqFBx(jFyL_x zw2XdVf9%eJ$p<v5jjn33EWX)qZ_%)PN4T(X@&c=-1X+%m40oHpIh<m7A$Et&NzGyV z0^12jjJsI3H%{QZpqs(J#3#W%pZ$&h7fFlr^$cP+yl=$sjyrJ)WTU66pUXO@geCx+ C7c?{g diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.GRAY.8.out deleted file mode 100644 index d10ee386f92634f49157090c888ae2661a0e905b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VM^6{W5R2ZUr#A93DDWI{ znAi6={R~^kG^LG>^VGVc=U>y@CAgbMW4}y-+!E$3%$5giJlHeXiyA5?@Lk}0!tnnA Y<7fX1>3e4`)&?2s>FVdQ&MBb@0D?*-!~g&Q diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.16.out deleted file mode 100644 index a9340b1105a9b034cf3e339c7b54e7d60ae33148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2nmt_{Ln2z=UbW_HFyLuU zZ14R&f1-4W)2cIU&hkrqd^i5%{vo|cf`OrWf{?H<zfG>RQmI%gqeSnq0}VyH7?}RB zPMA4U`?)mRg;{zH4C}Yf3zu-H-^IYRhUbO-dIpB`C5$X9o>j&LGyl2FDv)5>@W0ZR qOJc5G14H@Z^VwDhw!iFV(6bZh*nPdthnazafx*+&&t;ucLK6UTT0jB- diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGB.8.out deleted file mode 100644 index eae1e7b597c36fa501b8ef888e499fbc4abac46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0WO=$chIn+oy==|b5WwLQ zxS{xeb_#olii+4Vmix!KHq6}JV0qO*a4zf0RUI8C0;kwcU1MCVo1n;G&+sme`-U}x z^T#CB24BVu*0%1a%%80qZq#f{N!ZD^fIlKmNBG8C<{h_Vb$EY7yl2q+^rhhPs}@aW Q1_lNOPgg&ebxsLQ07F<gW&i*H diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.16.out deleted file mode 100644 index 99f20554e22a058e979a4f4ad59451d1e45735a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=%=C0|49RGGd(E2fh=Ksi z#ipL$^CwCRC@w5a%AEZ5KIhv$t99Z%YK#s68X^<!is?o<EDidZdoIOj!M?eE|2KbP z&<tAg!{9*J4o02?hTH~0<zweQPG+~@GH+mXVeFHWuWZ=-kj<chaSOvaJG)H`;fHw> z7z7(u_xH;jxLd$1ae$$i`A%(33d6iM=>rUtnQUrnma$i8-(h&Iry<z6t8wDZFANL} N44$rjF6*2Ung9$zONjsg diff --git a/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn0g16.png.RGBA.8.out deleted file mode 100644 index d95f5210962092daacdc68873b50a3e9d6e1f733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}m7Xq+ArY-_uUPXPP~d4! zRG0p4pPYA~rRCPzRRZf-gQxP$`=7swVTTh(g5EI><K~%;p`ve=PMLR+QE8L-hd%2E zHV)@1^%wM5H*jh2ckrz^DqFy}pv)n}LHiv8*Md?969@fw4gZ;|*j*TV9`QwRNyuI( gI^gq1xIy~N*1}5;)*D|iFfcH9y85}Sb4q9e0P&DM$^ZZW diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.16.out deleted file mode 100644 index 27ae8dff48c71cf5ae3dcc09c3a9d652de637641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05TRmMILn2z=P7CB}P~d4( ze<OGIf7srtmZnYW%FElX{kiVkydd-S?-bQt4vkD-k58TzB%7bGfal)91B)2A!d7MH zHHrneZDn2D5X!jPtYoVLv&P}0wF)tEtDY)9yV2ZOq$lXGe%?El0Hfs%M_)}A+aflL zJLCLDcIKyhwdb;@+_U<&q;I;o121RX0SC)6t_Y75CNZIz2Qn7OJpOw0w28_YyF)Y5 spEG_rx>@m$_zzY)#RqDe{_^rSToMuVujI;OU|?YIboFyt=akR{0Ae9tE&u=k diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GA.8.out deleted file mode 100644 index 624bf3a7d824bd47e5bf6a327f2ba6fc6f81e7cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq7J0fjhIn+oo#M!M$UuNu z_T>K;|Lc#M`f~`GwqH`yWNDhN{BmJr<h<DBfs<8wu0^br%3oF(ALE<MT#yr5E%|VE z<Sq_Bj&;-4W;JtszM#U{#IWW4&#s#$@2)aG_~y=EU~p#PzbwYR5^QI}&MaiO_3q%$ zDx3Gmq)taaPG{-9TYY;Y%dvb0yGINbkC_?PFBImGTXf+M|DE>f6aMo5;8f5(c)o(Y YqfbQ8p+#~w0|Nttr>mdKI;Vst07VB^K>z>% diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.16.out deleted file mode 100644 index ba23dfe07dc9d521cd63c352eb8e1cef5c406ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}^E_P~Lp(a)PI2TrtRTSL z`=tKK|NXC~st2sh;WJ^JbRppV!s&+;*XW#IC+KA$;g-E7q*wpq4&AhiHyA{suj(n+ z7<-F5avs#Vxyr1=fS<Q*)5Y57+HMzjgyuKglDBm@Xt3*7H1`Wv^Mq|lC9E4h@%5d5 zTqBk3Bj5X-Lv3fdrJ?1qd<Lr|c8$l(4D;7X7sM@E_)~tx?0)+P-y1eqFlvju<QHpK RuCE2T*wfX|Wt~$(69A&=P_F<0 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.GRAY.8.out deleted file mode 100644 index d678379313a7d1e34b1510a12d2e9ac5cbc1f331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=4o?@y5R2ZslN`C26$Mzl zU(`SOzyH)#b%_&Ye49BZX1up;>MF4`?Kt}^+lQU!g`^XMtfEfB{6_VoyUwh<VO_#v zUlF8pG41x1n7mhtM_89I%{eeH@H}e_!*4(Jgsm&nn`i&6n|$7AuF10x?H4?*ACw9V ua8NN>#PH>WZj9;6U;LRb{_#8Pj%Cnavx8qOsX_WP$ZejkelF{r5}E)b4M>Xs diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.16.out deleted file mode 100644 index d309464adc1b91382749f0b85ba49ed8b04c975b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2N<3X0Ln2z=PTk0Rz=7k) zJJoML{%%hazN8}AAW}C)cvAN4XJIQtCYel8^sH>@V$Kj{zo5mpAhasxJl_SS*kf=0 zTQ@9c&ai5DwwHO2$MlKp9u^JL3K(=BGDJP%zArnYYND6wx`zx=hZ(mV>u0`p?b<QZ cU*(K%(|*P^iAi@dFfcH9y85}Sb4q9e0QD?Ef&c&j diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGB.8.out deleted file mode 100644 index 77caf74462f946aad448d9d308d930f0d1080707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0czC)vhIn+oy?T(7!GMR! zq4mwgzuSw1tzERgEc|iqq4pMD7V8EsksmS(-ae`Isc>jy;`eHoKh(l5qVZutiG}h? hhsNCn<%<t6Hf{VFXLo(_3<d@U22WQ%mvv4FO#s2`ESCTP diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.16.out deleted file mode 100644 index baf0adbbcb1748454e7660744d4c227bfc90d476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=w0pWZhGaCpy>XiJfPnyW zpyW3G@As!#dGh@XdmviDk@CTJPmIs8g|8=;?EjwSIf=QgM3jM(fkDP#$!Z3VYUZBz zauW>FYqQ_K=Vt(c2IaPruY1{3&P3iXIw8O?i>tx8jp0HFgN)IV)%&Xtd=5`oKP}ZV ofdizLfq_>xIQX-j8c)<+;XN|{B7gQTSqGBvboFyt=akR{09LO;KmY&$ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c08.png.RGBA.8.out deleted file mode 100644 index 6a1dbe396145c7341e1d934c38f1e3908ea807a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}A)YRdArY-_uWaN!;2^-{ z7`MxA-~V;%CYL6BZ)oQ2kQ6Ln5V~|qC0bit!NI|a&tao|u$)5!1LJ#sk>AEo8Cf_4 tKKx}^GWF)&sGSUq`x)j`>-!#H?tk_#a)yKlI|Bm)gQu&X%Q~loCIClDEpY$< diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.16.out deleted file mode 100644 index bb4b0750bb7e07f71d08d25f5e135fae92dfc3c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh1m-#lF$Ln2z2h9As5Y{0Xm z@l8T@Q{IK}MCRJk=Dv%Hn<g0dZgmmQU|8KBB;-0#=&4;(%cQrvl`E$h*WPEIqwR2m z;hd=b59_sGlVZ42)^|<)oo~;5U?&61A3ND&eEQ3N&z2KEKOw1oqw;V5PKR!R-lgru zO)&?en%bE;zg+2JiA|ory7Xxs%Xt=^tgT;m@4L0-nb8kTp%*KsUfRFqYLHVRJBQrC zWX^epf5o;oRcSB$aAKA6#3_x-ZiTJYJ-baHA?SBR+pLDGylcN0ul77J@q&D#_C4`g z{oEQ2wjDDyj0~RCuA8@Xe$x!Egjpri5>+DBGJV^^qMTLz&S7;R1J@jnw>x!yX~-2i zhsZN>I;`iZ6yU9h*Xh6Tmh;AIzZ2<=p=(9555#PI&~kfnROT`Eb3eaZDlZUPEqDLs zuIbmGI&NvoG`rBA*{j}re-%r(T4Ji{wF=$$m*-7TUsz;tbnBypmkcXxAGY$$=zAEq zD)RDD+oge*6^zPv2YGK6zELITV)J*;&n+RwPRe3BUKg_LP9H3~%K6A!Q`I3q>uS*n z&XyJbf_6FOntDHuoO6I*S@W;&>d3hlPP$lZnSQA|`0OmjUFNlWT0Z@k+B-q}LRNjl zJC-uu`1$v?`#7+CkbS`C(EsMkH%YAm?P~4@FOKyy<Mun<jrs5U)!|zmV@Sh=fZwYx SCNnTFFnGH9xvX<aXaWFp2mR9k diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GA.8.out deleted file mode 100644 index a151e85b970cecfba8acd22b15c5ff96f1259ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq)_J-(hIn)?4T%<NP~cc1 z`M&<LUV!n1>1thv9{GQJsP|^^y671*T4ofbS2A7i<Gl7<urZ`b*dm>CiS6mx1{<1Y zv(NlFm&Ig<{GHqemUOQJbLOkKh{>M~7TWOOi<}$(o(Es5H+Y!MSj?imA?wk-pKDo6 zc6c(q`!j**-5y27cQqf9KdD>$eo@!v?D*WqVzMJwcyWR%Bd=fn!n#!&6&Xs8{$4pE lv!mOPJx?>`pp%pQ@8I87AH%YG7#J8BJYD@<);T3K0RSK>T}uD} diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.16.out deleted file mode 100644 index 980c57dbc48a01801069277779a5239fd9415487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fPfyF6VSLp(ZLLoenYHQ)$Y z^5#QAQ{IL3rzZZo%4_A;{=(^_NkymL1g{wT0-2o2*Y$;t-eD}aIDLM*TFxw!mtpgd z%_wocbk_BIt*r;=k|k?ct}Xet?`MR6%tXgiUS21}9r#l|TGcTv(@Q&1<+F!xf^*!q z@{|t7Gkf+i%2iHvICVmxltEd)yw@_0`B2}YCZ5Rp$lwFFe<&-Yh;o#PoT%#AV{^rr zuP;R5n!Ssx!xESK4x;b8+Gg~8=X;P>ko!p^Ty$%bG<(2fRp0cg3r-LA-1PF@F)e0I z>x}XcmBj5V-fb%q+82BY>zkS|A?-@bMo#0P7Yx?}-p%N~ez5G}ImWtAw#And|C%n8 z^Qw5^>?yAxZ+*4geBa)!4`j?O5B2^07^{}2d&hbsXZZ2!)(6ra&OI?#_}tW!A3sds zy<)x5{6a*TtelIr`5N~7K6Ud==g*q(+3!hW!@f6MBHbLEdRHq`=e>NO7s|ZB-)frd z%Yf-Ce{1_lfA?uGp1F>V?V*zFsT*_lhs^(>yXwTfY5miGO&4Ci`G@iZKlVZ^j+Dyn z^Owbk&FtIVB3M@W+vc+JAIpWzS`(grUCsMu|E9yg{xKBoJ{`*4wNDllo1U(IF6*2U FngC{j;k^I= diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.GRAY.8.out deleted file mode 100644 index 8d62e832e500a1ca04395c682e66fd4c2039fe43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=S)MMAAr`%@lf3y38*sRU zcK*J<MSQ^}AF(oyqdbu}x^3S4w3x5&z;pV~k8f5Vw#Tt~%sMY~nSt|C-6bW*NzV?m zdOJN;p5D^UJwv7C{{)MC_k_TZM=Mv%%6}gl$hlbhM1^_eA92p9`YKEQTep7s@3H0I z?&DT|*VXzjM=$#R-(yA1(vy73ds`2EysTAYev`dJjeSoNpM;6LVI`x}y<gTxA8~&N Oxz^Lw&t;ucLK6T|CsgJD diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.16.out deleted file mode 100644 index 5df647ad3b4a7ef78b8fe7da00e5272979006381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2o_e}ChD5Ypopz9`*+9T$ z`2)xL({<bbuKhMmj*WRzn_AlBGgT68u1{>QE$A0;VzASHFzbCvQE{Dwt-5jixksO) z%C|GUK3Aequ*i7&=eM5<VlOf#eBRU;|KiOjrpl6K8xGi)EPEoU;ru)%huQSS8zZK# zFMJpqcfUBZGJOH>+|QoU8ywQ*^%C08$!H|>%CY`9{*GUkVO#oh-Y+ic@6|5I@11=> z<BLYZcUg(<bH97d44CKcjZBcM+I%4Ai$*{_o5=;s^>-SCtg1IQ$W?7@(5ezSF`qHF r<eahehlX?WIDR<#v+P-Dy#JZgzc@dIeMcD>7#KWV{an^LB{Ts5?nQd) diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGB.8.out deleted file mode 100644 index b097f70d4b24b38cdaf3842bd837407a28e2cf6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0%=dJ04DsmPdeNM(!9c*} zqT?ci@Ahk6`Z$~LNv8?2UX|WhugPkC&b;~m-X!-YlbzUuUO4PxD_X#pBUu08g`oPc z7hf8qo||R7IKq}Yw{+1uKS_y~|Ja1@-b`3m?Wc0-EOXG^YYq#grCyZ0?Yy!p>%gMZ z(h{YK%)9k0CwkB4tN2>T++>$=;9|A<qL*hGm;K9kxVD<D=5OsHfxmJcml{hLT($l3 VE?07!GB7YOc)I$ztaD0e0st9!R$Tx9 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.16.out deleted file mode 100644 index c4445dcd2cde938c82a7b6d84c25d284d04badd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=eD-v449RGGI^CPE$w7d1 zJ}37Mv3b$!m+meMmF(@Pd3N1)v*s*5m9Ljdz6d#S1YP*7=lSc=<Kur*{zgCh{{JQa z$4&c<&&_2sI5#nt^@AQ?`;VzVY`q^%GO3*3U|N_poiRtSeI3&cWxm)q4a$$c`1&7^ zEX<nBxJ00R8Iy-5pYNLnnMYq{&uf_T=!!2}fRl`wsDo#r#gY0aU;TIsJ!h?(s=i>E zMd?(AD1mlY<_u36v7fRR7FnE6pW86)=*rD3363&qyay&(_-ta<>AGxh$~f)lN`BS{ zjxz7K4otSVvxV8F>vH^DhVzfEbTfWY;In6X;VH9^A@lG5*tgD%YZw?97(8A5T-G@y GGywnzV0+a7 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn2c16.png.RGBA.8.out deleted file mode 100644 index 80a60428ea1a4f989a15f89e458bff304b4023c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}t2|vCLn2y_Uh?K^P!M3g zFl)zw-|}K*JB%Ek8XxdE-r^FrexYrVn;*kG;qLlle_fg$i`y`>oM%|bA@H~0LDK#M z((2(Kj(0M?vdCo4owK3QE-&VwggKAG;a)R^<Gf}D?b_i6{n~61ho_ot=+n+g;J?2n zLH<6+f@b|Z2mbgQ4SIHwjdpf|2iU~(4)BTR91xQaN$4+UD)?}Wt)e28Ip$9=qr5)T ej|UD1cm>S;bEi!z-^{?kz~JfX=d#Wzp$PyiOHjoC diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.16.out deleted file mode 100644 index 3eb65611887a0c5cf3de925153abaa79fff8ab63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05zMd|QArY;~HD^D}XOx^` zyr9X?#BS@;nG$RgJys2doVvUhtj=A0%5KBrCVRjlim#`Fy=NNpVm=97b~jmrD83%6 lge@`>r3W%B4PG%Ya0+RrI*9I$Vqjok@O1TaS?83{1OP1%C3pY; diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GA.8.out deleted file mode 100644 index 0c97e0155b6cce97ee6f4f92c04db1ba20cac26b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq+&x_!Lp(a)UfRfeK!Jzl zKy%<`7UPt#wg#mX1{cTAd28}@_LeT?Ur>8GTR*(L_`gHtHU6^Q|9{rCewIJtDAU3G fsKG*kFM%n|Ni#KJ$BI7;3=9mOu6{1-oD!M<dDbh9 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.16.out deleted file mode 100644 index 21100ff612c44d9391f362a7a570af5fabe2ad5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}j-D=#As(H{HD?(Zp9buj z>|!U(+?w!!H^HaL$m6SZkNt<Z1vWfxmk(xGB}n+P^YAQw+0dA1B5PpKvy7RIjg5_g WW0_*EUzbZV$WTvLKbLh*2~7Z7mm#<S diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.GRAY.8.out deleted file mode 100644 index c5c08cb8491ef6e468f47fb2efb83826670b1182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VV^0^y5R2aAnzIKE1e`l? z;6i6}T9N{TM)-jlEyw@)S?x?Tkx|H#;AQWSc01e%0*nkw0gAb^EUY9!#(28=xvX<a GXaWGZ8y=Sc diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.16.out deleted file mode 100644 index 6c65197cb79205be6e62512abaf3271c80710f6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2vOHZJLn2z=UUd{~P+(xa z*dMr|X{O2KxoZ+wwG$XV?lIW>z9Xir;MsI_UDNpJzB_Y2Yo}jpe5XHm^GXQ^ZPV(g z=Z7=?|GNM8W&8n#s6zGxwhMO{XEB<TH>5F~m0cj|P|ThI5!xbtZfVj)rXXWa1_lNO MPgg&ebxsLQ0A^l0r~m)} diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGB.8.out deleted file mode 100644 index e834bc528ed144668fbd6bf8b1ab6126a78a653d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($01bVtShIn))*L;ufWMuQX z^#0Jz^fawt*EyYy#}ZydA6PNvoBX+jVLOz&`Tr^`s+H+^*37s)!9<>C59{Ke2@iB7 q&ayM-AIz|msNi<{eDFXt1B1SH(nJnUJ}(9a1_n=8KbLh*2~7as3oj7> diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.16.out deleted file mode 100644 index bc2028359b9ddb12c1b66768d49c622ce0b19d7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=bbGouhGaCpopzD4!9avL z*nOq8#pH8O{MJ3-S{I=H;`e0XNxyBm6t}3py%=!)LXU6zyOmS*=0<V<|Nhzgp^gV* z3B#;wTeCUDKMx67|*4q}jPSeD8@V=~hV29ukNt(z5CFED0oV&+PB<XXUdA%$J! xT$6|c`+}2v8gp1R8~7Y1%LZ6*gLFM(U7(%S`M1?{7Xt$WgQu&X%Q~loCIHVyMWp}$ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p01.png.RGBA.8.out deleted file mode 100644 index 354293b02954922794fc1c28398ab9a6e3d02fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}A)YRdArY;~HQ(c3+A|9o zc<%2$lWJicJhO4yCm$YW9yi$oE2eytSLMB6b?)L*b{iHq*#j0)d_5KHJ=2&M^GWEk syU7|v@%30GY>|;DJ&<8(@QQ&UdR11ZapALx3=9kmp00i_>zopr0Ov<5Z~y=R diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.16.out deleted file mode 100644 index d3524e2b4dcac872856cf7808a24403c3c608070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh058J;eVArY;~B1u2aH}Hf= z1ROLo`KM`8$0IdA<gX78Gmo3>fgQZMya7_nm%NhyARtl7@K}0_iNo6(Kac+n?FUvc zOPsxMiDB*Ox{|-la!iZ)5@d4udn(v_wz0d(8r+hTC_Ru-op6Pb;eCk)Ysj5Fa~K#H O7(8A5T-G@yGywqNIW;2y diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GA.8.out deleted file mode 100644 index 73155c403d755cc814d48937bfbab739f2b43292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaq5<OiULp(Z@MSh(>00Ik` z7D{Y$d>I^I)yBBrMwq!Z;Q?>L9X4KOr@Eu6_8;OF*znwQINWff!hO1Yg?@k>TiOK! z1ylY5PuTBqPia4xQE3n*XV5c^orh=fQ$}WHW@d(y+8V5H>Sxq3FfcH9y85}Sb4q9e E06wrX6aWAK diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.16.out deleted file mode 100644 index 4318e36d07d3eb46bca18ebb04ea49a40efa8fb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}5uPrNAs(H{B1sJlq8fX7 zz2-MvGGuu&Q$mA<IiErKjDO3YF7LVrdmSnz_B0xG^p=<WZ2ZpjG%<lKb;2z6gip-x vSx+5K*kU80%P-+}nwhQb;-`kj#zsbl?0yB_!cA4YAiF$W{an^LB{Ts5sunKD diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.GRAY.8.out deleted file mode 100644 index 4c4de6132b3894235fd23e3efcb234a22005df32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1V4^J1z5R2Yqk)(u#fW(A^ z8^;bDDClZzRAlQtf5d?yU|mC@v{?1TpI-_NOY3}7`uy@Cn=yoLyZD8n@Nh;|0thfL X94=MhJt-YI7i6}ltDnm{r-UW|Scxmh diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.16.out deleted file mode 100644 index 771d34f87cad1e3b123c88ae819be14bff307faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2N<3X0Ln2z=PCv+XK!L}3 z^56gV<?XWR{LLpfPbj}4#HpL5<GIva^<?+g($etXZ{A$lf2+7%fZ60-THg0J|CZYC zV>WbnZ1pDY|0)Rcov6jz^Os-tzjxrd5aA`~(8)OK3F9n@1)g#XV9cG2Tl-D)v+~xS RW?*1o@O1TaS?83{1OO06M4SKs diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGB.8.out deleted file mode 100644 index 38f0df85689dbb049dc5aa95e51f29ba03ad63c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0#CW<mhIn+o4Rz#VFyOfK z_y75~TP~(<NYG{4E84VRA`1^U+aX@*JZ^(y@*ZyWj8*R!{k!+!cl4C`jkdeK3-90W zDsS{5*h%iM?ynEsSJ<yIy=tyv{OY*3;n#w=1g2^6Ci<(qmU=QUFfe$!`njxgN@xNA DGVV8u diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.16.out deleted file mode 100644 index 1e9a2825c624cec89b040866710a336e774e55e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=O!stg49RGGJHwFgfB^@y z@BjblRxYy4!6l*}*Loh<RKVsmDQKmvrslTg_j_%>-Y#9ds$kdu%X9jVvt3}yNJ?FC zN^thY%YWC;XOMQ_UeKBIkHKp3^560HjAjjD4#L{@v0YtEwcYXm1+V)z@GfAz(DJ1A wz||WJQ4GD`8FT+Xgt7j@SZ{xWS!cNg6>ZdG<-ToYU|?YIboFyt=akR{0IL~NI{*Lx diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p02.png.RGBA.8.out deleted file mode 100644 index 19ea90bd4b27f86dc85914c7f7452edf67d77c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}DV{ElArY-_r&;qIP~dTX zd+-0bcehej2G~nhNGiJd^C?7om8?7w6svKyO!azO=--RyfA414aB10>f@Q0J6|yrF z+>)*MJ@@|0<FX6~UIzd9@%}wX)Sxn<n&A@z!xKh^6U+>A+Mn2{|Efwp$iTqB;OXk; Jvd$@?2>|Y+J`n%_ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.16.out deleted file mode 100644 index ab167c90b486e826e7548f8289d31c316a022113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05Rh}-6ArY-_r!Ew1a1daA zKa;0|#WjGTi*3aWwiS(h_Y^c3Hwc_R`sB{8xxG7#j>^7|epGGz(W6FS{t@v)?>j9& zbQ<2AwN9#J<W{KuJT)Tj0MpV-`ah~a_kx%w?$xMI6W_qF$y~nUDJw{2HAtny-kp0I bSmpLVR;oAJq;Y|Pfq}u()z4*}Q$iB}D#%09 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GA.8.out deleted file mode 100644 index 82ffc2ae7d62ac1c09f528c77c41d3c091d4840e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqN<3X0Lp(Z<PTnZ!5Fp_4 zeYR{-qmqcirG_rk1#Ge&EM5)?(gpw1zD=6G_ojHvOgRRIY5X&e2HG6;-g7i8C!n&9 zaq-*OYfSqaE`Br3Zj2A$`+MmAH{I;U_yZZg=WRWppRlF&MAQRugIo8~bw6-N+<xc3 bLTr!71EqR~n~tFj3=9mOu6{1-oD!M<b$CJ| diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.16.out deleted file mode 100644 index c86fb96edd82e749f0dd14d46927a3e0d326d045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}`JOJ0As(H{Cdmy9{u;T= zOSdlgqOI|l&+C8lrJR6SosCWgAJ{fbcwJtWwKL%XZ-V0W_qSI*ZE7@c_^3I>an=3) zfYYqZ`3&4U>-M|piu3GY)OqqNwkJwYqJlZ%#Mj*dTVp`_173Y^{LXZgje+5#okC;l S^S>WJPVjW~b6Mw<&;$T=&p*=u diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.GRAY.8.out deleted file mode 100644 index f472ee82940a7ab03b1c81f5cfd9af5727ec4d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=NKY5X5R2Zu=L~rp90Xi0 zmOo*#WmOVzXk`>hX5h70u+V|&;K4Y@O~L-3;v+XC9_^9lkNfh%<lFy%#s4Oxbo{FB xTNvZ`|AgU{74>S8i~dbX>G+jAY2j6WgPJMx6&f=pU0(>Y%+uA+Wt~$(695FHG(-RZ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.16.out deleted file mode 100644 index 585adcca4db7f6a604bc480474942e5a20189b7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2=6Jd|hD5Z!ogT>BU?AXJ zo#M5Ol{>;gL~H^>*o>)(3;ymi-T6Io+HTWarXwwnM1DD5ZJhgR`ivs(T81Q{`+GV! zn@wrVndN<*u`c*G%P9vl!;cr(SC_`-Zu4KjlOint<NAfH*znnJg*BLOnoM6;z9(cm zSR!^0d)Vt;zp^)ic?Y(<*tM&>mMK+XHd{r>UgnZXV77e8RPD>r^A>$!U|?YIboFyt I=akR{0Cas*FaQ7m diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGB.8.out deleted file mode 100644 index c987d28eaebe89c8722b3ba052a61d7c6a8c29e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0w0pWZhIn*dofgR3V8G*I z-83olAd{FtE2~O_Xj*E`H_jImWA^8rEcK1MoR`b?sNr64pYB)A)2y~kYAX7QeE*qN zH(Aeq+3yjz;H))&=$)Bw`aSM9i=ST6Wj*<?;LGxfP1W^5zm+eYcRVf=Quti>F-UsG t*E^Nn_KW2IxiY=8z4WBtBklq7?upu$JzMph85kHCJYD@<);T3K0RXGHOEv%i diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.16.out deleted file mode 100644 index 45d93893bc8fcf3f963f998bb0ec1610f0ac6e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=9Po5;49RGGJ98uNVFLkX z|3<ZoI&q5HDJ#}Y5S$eHDD;U^?g4$ym-Aa^x33j;lxn)G#<2f&z3ma62YSoZ+vnIf zFW=wvlk*_gtPf&$cJDpKVBQd2`@OIEUg9s7DU5jx+iyMTwPIg$?_-BSEfZMw?P-_2 z%wg{<TxQrYrZz|)Si7(KIJ>;1|NI7{1H2Eyqz_sqeC>0Ox4xvlfTw_Y$JK<Q6aSgA o%WaZiD%$s2+c~V80M*Ss$<g3kQq`543=9kmp00i_>zopr0I^GCkN^Mx diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p04.png.RGBA.8.out deleted file mode 100644 index fe9ac5656740ccf33d0f244cdfbab743a83a56ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}eV#6kArY-_ryt~PFyLX9 zz2a%*9iG72mc;7T5c)#vVfSDE&z^M?rCz7Fhi3Cx{3~t9eqP4+&fl`m(_WETX@}xY zt_5q)#Z1?^+sI_F|EFBXxfs^VvKkE4bITR1ibZ|O7cks<b>{cs+Fi`739;`QU!3{+ xbK*M(Mv0ma`xPvTL;WENtSc1mHZuKSC_iX$PHFm`90mpk22WQ%mvv4FO#orBOr-z- diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.16.out deleted file mode 100644 index 0a751b6ee7171bf4ed85d778114b1de2ddd9aaed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh1mo}Mm_ArY-dub(bEWFWwN zVablxeZT+LpOEvre<8OzeW9^>z@A_qn@vl4&f54MfBAjJ^8JrF{660`46})7UhjO6 zIiksW!`EXE4$A(J`@{Q>DZcT0f_aF@4%Yn*_6OzlIPR%2?VG@{r}4fsqi!e5mIsnG z%yqn<qc+`O694d*cgI=>r3A<F85|MoH5RZ66*#uP*AF|uv&8N}y0q~Grxi?MTlj4n z7BgwKXifNaAXy>6=mPIT*0;=^4j~GW3Cf%JZAv*yoHO#pS36j@oMiGhFTBlEpP*eD zcY4nIM-S5<*D45VSTkiWtWDCG$?~N@lhNG9CpVmt+bX~9PC=l8tXeFqN<k6prH?Y4 zOL*qQHs*08Co|5sZ4uwTU`}46!%r@~bq)NN)^3w_GLNu&Sg(B{?`UU(^HG%tzgiDm px@;hLVbRY6w&s6j?Z5tDJULgjlS4L4pMima!PC{xWt~$(69Cspn=}9b diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GA.8.out deleted file mode 100644 index 4dc8f80df0ce44e2ef0cb51caf2d45c88ca44374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqRXtrCLp(Z{PCY5aq$uDl zd9?QLfBP@%p6-)5^H^Y2x8zfys23CX&fZvB?xnf(N^RqYuEi6N&pOj0>|G=IFwi6J z+$^0|?T5iX1o~RktygG7aC|?s`@=D}hX*+$3Yxk<WO2?t8p>(?Fr;GJjG$Sn8yde> zdN&GBIMM0n5EtmcS$%s(&fb*_{CoI!+&jf=F375KiT$-l<LnNm_szY6BK%6io=f=W zEC_m_dcot%K{KTe9~;R<3MLo5Eu`91KODYd)}z~JP;6@)-LPPe$`Y4fO3J)USvi6Q z1;_4sIBt{Zx7eZa;kb}y!-DNh_18ojs|_L?Q<AP496G4>FV@LyP2R(NR-ZqsrDvXK zTq;~2DzI&nut5MD<8N-q*QQpCs-^n1b$|2szW>4Se3NRYVxQkZ1_lNOPgg&ebxsLQ E0N^K(EdT%j diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.16.out deleted file mode 100644 index 68de54d0a19aa4836b906a3899e00690354406e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fPfik>cxAs(Ger+Q9uQWS7m zy7cP2z5jWu*I)d+;pFj0f}-~ueVYOzBRxOnuI>^0qkZja#%rH#2cud4b$t*}S@+%N zT{Hi|`47rJs8xh4;=3GMApeJ}uE^j=7L%FJ2f0514wtL69;)u(+?VOA*{xd8@b~T{ zCSd^&H(>#Dk$^*S?BTcKLmJrMF|RBCbU<xUgTt=}8-o&r10UE`2p#;ez-XewuLCTT znWj4^Ut~Wo>X`Z{u%qdc%k%<)X{sL%yRl!33cs;)-dZySiJ47PJmO21I6Cxtv#7k= z5v}<m>ak#FJCpr1FGd!1?GKyhalAQrlS@l@c^l`v+(%bcOCFYRhifN1TA!Dy#Obac zw`xI7s<1%-8{>2KgO{>R7*$Q}=KYJdFa5(@^-H;9d$H6iP@s9b`njxgN@xNAXqS$h diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.GRAY.8.out deleted file mode 100644 index d1e650e00d01749c4b65c2df2335e1550b5d38f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=AD%9bAr`&8lW+SSHV|;> zf6P1mh~KCG^(U&ey&4ZNZ+?|z8Q^`*>)VevDQ{F7SZZ3O+)o`)HpnWT{(&Xs0MCpD z$sa6s4U87AC!{`*ywOnpfJ@@TBPQ-9?hng)MOcM5F!3K){pv!t;i((J-UW`=JjG`S zt8q@+SNlrv+JwV0wh;<%PAznC;$u0#(2f7%lTgbm(;n#Rol3Mcs=T<!IAWr9W4d zG;b|g5M;de!)Lh|gHwN3*{tz0C}CmUuvBrzD>ePF!%tlfmAObTFLdE=Z^<Znz&H8- zwhb2+-E-Br6IW=mvtm-c;Inz`F1NSjZ7rUyXQ1%*PTk*oKiCXTDt8=9QQ!oHg{P~Z J%Q~loCIEZAflmMc diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.16.out deleted file mode 100644 index 1fd97fa7fc94b6e59e1afd9a8519fafe72411528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2K6$!0hD5Z!ow1SckO7a2 zzJ}0-i~s+7%n;CN?L2$_WvFDpQ|Y^#Ctr6feR9pk%JGk|+sboYUp0@fzMmiQkLhEv zL~Zl$&aX==-tK-l^;gqVP6fTM4CQPB>t&fQ*p)LJk<?#v_|eww)yo-=yw|-R&p5$4 zm~jQev3EYK3q&4dO;svirpZvJ-e>%+hB2;s_xBU-D;V0e7(Dl`JQzEBo5|t1w#AEr zrsoC!)4pe~J$d@YrKzVDe&CBy(|>$|Auj*xud-#onCwLl^u7Hd$!bs}e!$^sr~5lA zCuU#f1%7kxx+PaKyj?8n_Tb};*~i|QxP4!L`Ci3e?p;fzvYvEtY-M0zVDNPHb6Mw< G&;$Ut(}YL> diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGB.8.out deleted file mode 100644 index 86011898fc27646a0a92404e60f3c2418508ff3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0?D2GQ4DslEJMADJlOm5x zwDY2S5B}Q=`Mc@wmis=j#O178^TOrtN*<`{sFs=^Vf?vk=@*?Zo0a}(UaohlyK~9< zNjCF=S5m8{buk?%oyf3e-NIii4TsK#Oj-9!Xu+(mxeQa(6G{$PmIc;HD_C0|FOuH5 z`rmDP384pl*JoRQefmw?PdD;iym;ZxTLP^qOY6lRJ-H>&s?Y3lx{K{UgTX&R-vjv! zn<sx~*f804n@7WXZnmPH2Qp7BH=TYS)$^X;^}AHo@gC393=9kmp00i_>zopr0El2{ AwEzGB diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.16.out deleted file mode 100644 index fe00181f6dd31cdfc7849655f939b3e3b7afa4e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp={PA>g49RGGJM$plAp;)g z*bvSgx&Qx9EO07#`Hl6+#XTMiZe2g)`Tbh%%1crV35UyLn<PFn_3mKr{45joci)9i z=0f}1F7g-d&!|<1d+hvysdnj8$%Y+AChst2cw~Bv;l|&&3<~EyEc?0hhg5&{X~rYx z)tB#QJ8(x*(qZ9s2A+mxGvp4$Y8|{IIhE;x^+AinlGY9DKkm4`zJc+A2%EyxAC(Ne zy>n*X)D78Xd|e}O0kikZ@|fT4DN9mc9EjT0xm8?4S+|+7fFVkM`PYe(mFymQ%mxh1 z1`RhEcL>j^WtVW!WVpte=GVN@gdz9v0S@;wAAij3J%95@v^`(;<BziJ0WulC)5ZK4 Q7#J8lUHx3vIVCg!0IOz%2><{9 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn3p08.png.RGBA.8.out deleted file mode 100644 index 5cde524cf52d0c0253504be7b0ad64286136560f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}XFOdTLn2z=PT$CP$biS? zyoS(*rT_m=Om*6@WX%(upB*clCcZgqYhCFZ6>Y|Bw&ynI-mh9cPuR@51b!|p`q%oW z_`RLyK5K@kLf+6Ru8aZ4e3>qEWv{4XaA4%$zK}uSl>x)v3pEVWgcTUSvF|u0sZ-CZ zpq<#8nxA(x!1jTt%7GjP<5w5<9G>xJ{t-Q{S2xo2>V)!@79>boCl@;3b2-4s=(19{ zwTQi8{(J`}l>;RWYg+!Z9hiEd{IDUz?Wou68B)tDW1bhrY)dwrx1ZtnI+=`rlb!e& Q7#J8lUHx3vIVCg!00nDji~s-t diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.16.out deleted file mode 100644 index 982a7758ff9282e4357682b27db5081734357013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05?w&4=ArY-_FD>L^P~c&E zD9rQjuYB0-vToNOr+LNLxZ`(hW0bgl?eV{_!CySfehE!ryV1ZPEg--yu@FH`V3XO_ XtWZ0(`b;SU0|SGntDnm{r-UW|&m|_e diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GA.8.out deleted file mode 100644 index b8ef393743d3a9ca47fde6f5c30c67e90d0a8ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqOg&v3Lp(Z@|C~Q?fU$K> zhKZrl9G&};8q7NOZTlD(CmKkxg%~E72)G|^&|>Rhdz2v&aF~JNzLrAmg8hXN3=9km Mp00i_>zopr0QPPlCjbBd diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.16.out deleted file mode 100644 index 5a693596ffaba5d59e2f4add03afabb751ba96ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}hMq2tAs(H{f6hBdCj9hU z$!OoUk8yFLffQSaVS<T(`{4#HwjQ=e1su$7d|bQ>Bp4X<LuC8!3rijb8RF^c=d#Wz Gp$PyBO&ZYv diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.GRAY.8.out deleted file mode 100644 index 89b58c02f409b3e7518eea4aa57c77de35edcb71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VZBG}+5R2aAKj$0dH`J&v zdBFZwv}aeN2W#`eiOmOjoexdiQqHW*&dAEb$k4r1wtt6W(m9ZJPgg&ebxsLQ0Gr|) AqW}N^ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.16.out deleted file mode 100644 index 36ef6d2c325a9b8e9b2691072092fe2cf74270d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2qC8z3Ln2z=Uf#&dV90aW zfz@N;-|4;9{{=KT9#;x?w1zFeJTv?LotUbl&9N&*_C9K4G_iLuZg|F?!FJ&pdqvU= v2;a>9fbe0S1wR>Y{b(pHDtaMW|BbP8YxsVbn-WS43=9mOu6{1-oD!M<Moly= diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGB.8.out deleted file mode 100644 index 32dec3a4df27e127d58ef95dce4be13820d4ab43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0IC;7_hIn+oy||H=!GPn) z0fnUr|5Fz>^G<r@+PL?C=(bf>r}A7f8qcs)Fx$*vuh_tl@X6*tGb_X7=ZtcHjLN4o beUg%R6TZJV-Tp5F0|SGntDnm{r-UW|*n=tW diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.16.out deleted file mode 100644 index e65898c2d0772891c83d7a79968e9d587bc23e34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=<a@d}hGaCpy<*69KtaIe zB4@;r-|}T|uW6NbiLm{ff6PgslBc-TYOebC)0X!4{=c0&GjL_d4oPk8*I)Gc+!$;c zq#g1b7)lt-8}2bMvNSMTG<{*?a9}TBe!(l?z+lm!?13bmz?_q*7FVmdXoVF60|SGn LtDnm{r-UW|5^6O^ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a08.png.RGBA.8.out deleted file mode 100644 index 8a903f6316ae1cb3b1e81d738223033d01c427b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}UY;(FArY-_FD>L^FyL^# zXl`)k|Nn^Gb?evg#O-WyG?-Ix{fx(@eP;6C*U#@+HK};fZpI2m6NUyhh8v7790+O$ bBfDf%TrK0CFSi*O7#KWV{an^LB{Ts521Y8B diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.16.out deleted file mode 100644 index 978a585d950eb8a278ce21913aa30bc07cdb61c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2190 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 PFfe$!`njxgN@xNAXOjPi diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GA.8.out deleted file mode 100644 index 34c98079618c714c46ee1d48a9c815fbbff4951b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPcACwsa$hIn)?z3QDO;x5DX zVg7AX{_W|<?kXqusD5&AN^IQJw<+x~s|8d0BaWB`?G0`^O-c(pJo=I&gIgOHrdQdV zThz^0xzTfa)z8|m>sP(s=)CmbA%CI$AKJZEm5G$GIy)y<heb(;Z%cT6$}Kzf>EfmQ z_jZ?Pdae@5vQFB&Sb)dKF>`Hc>T4_EE!S-S%=ON94V2Yh7<6Of3a;I@2kYiN6n5NR zfBEp_jKq0a#tXNt4%o3`x1?3mv0KNcX2;x&`2J!0qE_zqjb#aHAx#P45BF%XC?_vn z>2_Oqi<JD{a?Qvc1@AP@hNh`G<z^%(Xw13V+Bosj6?bjv>o+1&D@q>TnfbV4g_-eI z{gAe{wwaH%aLrtBDI@n{R?UeI_vc!9x<BLdd8^%e%VPb+#s|K#J-#8+u5F8m-nFIR z-4*HhqqF%!CHJX^eETFNEy)=d&b;&#Z?CS@d!0EyuV$BD>dgDYXD5`Uy|nhX*V0Qj z4y>+va)8%cT1WTKGx7B`;`!D=vuA49=SHMXG+DN6nVOff{;Eq0*KhUk`}?N#{blpM zvuAxi?Qv#axb0%rT2s4KAzJKS=U?C2E;Z-p$zuB>yYptwzPUa9&i>dHF*`T?^vN~9 zQ?TOOnq6<*_k1~Xxa552&P=)530F63U)i>8+stKWXZ^mlJ+C^*{(x}*<J#j|srPm^ zi*dCEJlqv8d(&<8$HnY&p*FtdG7{-aMYyd0F8W}<f5N}794BW^pI0%f;>kvR8O48( zh3-dMe4U&wcig(-O=tVR&q9~u=Y4GU=HCDFW-<TeTJ|097p5=zUvcaP_sZfshi1m_ z`QW_g`3;HV?>gs2SN+a+@(Qc`a&E)(y053czg#Cgl~GImT~t+K>dU|Pm&*KJ^O~pn z)z<fq%=2byvrc)ISDF2EYFKjS&z&=a<foo&y}!3m{cc%KUe=leH?G{-xb#}~Y@5RT z=Qq-0pZ{3@s8hMvc<DkW=cO}uewUKY|Mfk~#7pt%l3u+zmY(L-`}=uCBqVN|2S-QU zv^X0T8y(HPk^gk@@sApZ)$jg%qabn9*l_cfOSh~}i>%!`p~yGJ!mHgb_3gZkjj`4@ z&L-L$UXHkV!|HtPR>4Ky7Y`-QS^ay3j5L?6qk&1-t@DNZH<nK16_}(lYkAbv=3o9B z#ct*wRQT>1ZW;SlH|921V9@hvGrz63Hra4nxMZpMrsZc?V&A%6cM4j1>dcuX?fsh` qTdglYYin>y<aJDS^z}*h3^O$^{m3}`<_!Y_1B0ilpUXO@geCwFtK*~q diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.16.out deleted file mode 100644 index a78fb79903c56e5634cde5c3e197d31582513b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1812 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 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.GRAY.8.out deleted file mode 100644 index 36f86cfe50f0d43f8f5c68f21dd7bbd716466fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(3LKb|g*Ar`%@6Mge;+eox% zzFO)LIL(Kv@3n+SJrm1Wr5C$i{JQ;w$<~Q)s`3}6ole&r#d*0TT)B3vOYGQ^b9sqJ z;Qd7!x7Jt{H&mvnIXc-HUwSpu@deBB38^~ec3%V+-e7-!=c3HF+|^qdX0BjiJ{fV& z`u=goqxZ_+W$^7TTRlZYq2SVkDJeSobNCA#3@g&lCSK3FdSw&S%%nXB9U|gx=zU>+ z<(z&taeL_5G^OLB91SAt4FisOzy8hm^`6}KwRvW*Gj&%9p6C%cpzWif->=7`vE%W+ z(Ai(J%qE6LHk{bh!w|>xbm;~=rF{OixBkSOTmE&2j)liDiN!4Q8hTq^D!uZ#y=J<< ze!P!M<Odm-dCx5ui-@&!3rkPDYr6V<_vfE3VXWshJ&t!b6`wnyEIWTjgU{#3w;$i$ zymF1(oItKa<>#iQT0Z*H=pR?PWO}^(y}k3UUe!o9QC4XFKG&8@@z|fZeH$~rKK=Li zXlAUa<!KH^fm->d@@sSE_&m9Lll{xjcfX3_rq2mvny^eExu;gXCjIPc^Yrci7v7$| zdgcQi<q69q9zW@5OO$AnNd8c^`$vb}+<r;Mp2A5go=pb7+8zFPURZs8`}_;Xp9?Oi zbAC7L>Ga*Ri%W`s%LM&jRhcncKK}js^~YYk`sMdGHu&ecn~(S9hTWID7k^G-R_v<k z&3}!jl%1PZyZYLF`TMbFSRIq<66NOH{68;h=VHq(S({__)Ye87JM6K$yURVl_h;!e zyIF_*^6Tv8&OiHVQsR+QRcU{eEYeRmJzsDpaeMBy)6+j^#(v~k+!OxwUfc2qbGJ@w zwtEw`HS%n{PfDmklVGB&YA^R`iJI%B3%;$*ySDkIOW5K$PE8HZ7N4?^4>zp1-<Y>O z%XsdUMN&_DmT-D;o_3#Fs<<v$o@qsx>Ex)s(@mRsF0m|~U>G;$TKkU9jqGbfbzMWn z<^(cXI7)D&?%6Q+eX_AjK-8(iP%)e3lAeW41ztw8if{iEU^i_LTeQlJ^}MF)grt@N ju9i!4%41(VUhtn?(rJgvia<_PP=4@q^>bP0l+XkKmllb6 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.16.out deleted file mode 100644 index 2a537f0b23ca95c8e80ccad371cce0d6bdea07a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3767 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 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGB.8.out deleted file mode 100644 index a239300b79763d97817c858de784bc544761313f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 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 AzW@LL diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.16.out deleted file mode 100644 index e83bfd45b19bbde661dce94ecdce1b9a850b3ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3964 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 SdNBh71B0ilpUXO@geCyt>tXQ# diff --git a/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn4a16.png.RGBA.8.out deleted file mode 100644 index 1481fb0c92eb4dc4ebfb5d22688755ec2daba4d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 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 KT-G@yGywpFS`-%m diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.16.out deleted file mode 100644 index 0c13f717f29fe01dddb3f8777beca7463544c53a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=ZhR(-%HVh05@t!V@ArY-_FD>LfV8G*Y zF+2N$&V;;4f3JI*c?4E^cr4|wnZ~0dX*0Lh#PibLlACAh--@`3Mt_t@Xkau+keVR( z;Sz%lqfEp62PO?{F(wTD2N?daS5+NYz*xb=cA<g);a7oW6+#6M85kHCJYD@<);T3K F0RY`vGm8KK diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GA.8.out deleted file mode 100644 index cf54821fadf8c6ba0342844b86d7fd1e5bbd0e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqoIPC}Lp(Z@O_CEHG&uR0 z%#slF6EkEx#nAm@1>@m^4f7YXZTKTqAkMQ#d`8<o#xu<Cni|a;9vM_vK49Ae60c=u Xcq}ilEGQ}+WIltZtDnm{r-UW|G$1A% diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.16.out deleted file mode 100644 index c846ca3e2de24cd86aad7ff2be20142afd35c546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J2DZkZ*$fN}_MR?|As(H{CdmtUHgp7L zHT+n?$ehpcINB@rL-7@cY4ObOni{_|UA|!6P<bHM-~(HL44XdtorZAccTEfP85lk> V2vh|HDFuRz^mO%eS?83{1OTm^B<=tJ diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.GRAY.8.out deleted file mode 100644 index 3e7a231593aac14acd5c14efeedb460ad9444c3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1VBTpB{5R2YqljH;Z5l1*Q z1?2g-B<>3tJ$$YZ@F80u;-E`4>lx>Ry!x79AG*GU1*~CUc&aN<bvRM~G{_WBS3j3^ HP6<r_>Mb1v diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.16.out deleted file mode 100644 index 9c12d3a6cb7e10d647e20671b695d80108701cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0phBY0A4;UC2nmt_{Ln2z=PCv-oV8C-E zro<_S@wdOI8mIG<LaPw}gw<ZR*Rbgo3Es(T7i>EI*5Hvm<J)Z#ANqwo)a(*W&%WFy zvEX{Hfy+}fiA7CsvbWq}b1rL`{X;UM>l(Y`H@5|9zl{}dFou0%{>C#Sl3n(%(2A4y rI9Q&RNo-`kv*I%IBYy?k2h2tt(lseF`6?I~7#KWV{an^LB{Ts5GDt;f diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGB.8.out deleted file mode 100644 index 31978afa8a91334521215178599f61142bdc4390..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0q<OkHhIn+oy?T)MfB}bd zU~pvU_Ka`yyZj#YO}K2Y!o~c<vthv^_moKeS^C*)_*>X6{NZiz$`kp}e#|>huHpKY zi$8oB%GgrP;>G?5$ovS4V4uNw`uu`*2afA~aNh8XL0G|LLrr&G$Uo_tLz7y>85kHC NJYD@<);T3K0RU&pI`jYl diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.16.out deleted file mode 100644 index 1f354e39b3f0356603216a6cebcb89a2ef0ca11c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(2IW`Fwlgp=O!jnf49RGGJHwFchyf3a z`U0iOqd)(zzjV-6dBN(S<sKUw?`FnG95T3}R3V-4JZXPqfBWzJ-{%|;vZr%RyXEM` zbRg-9m{SpxkOJeG^aJ6!3d^E$6_!cuS?{o#_lOFJNMZZa5S**H<iKy&1#Iu<KWt+0 zXi%LNFiDbu^MP!_hdM!xjIGU6ST^t*ykmUh-%#CPuOuxsXYF*K8U_Xi22WQ%mvv4F FO#s^yOy&Rp diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a08.png.RGBA.8.out deleted file mode 100644 index ef0ebe4e27ef70bb1745b0e11feaabc66b8da75e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}`JOJ0ArY-_uNiVR81T3~ zR8Pt9U-;cVl%-$s$lar^6|zAu0yO@}`)b_mVl;@WuAB3JmvOUfDXTm4DYg|qc_S9E z`<coq)i%U5g*=wt;KUzuM~|UWp<~kjM++Fu7F0X1Pq7hTxyc|IVCGQIDE)yUNI`1O Uwf>js3=9kmp00i_>zopr0Q~MZ=l}o! diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.16.out deleted file mode 100644 index 5f9c114f3f741233c882ab9069a7dd6c0f1bd38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2176 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 O7(8A5T-G@yGywp9yHA7w diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GA.8.out deleted file mode 100644 index 058d111de30d9035fa0a9a40d406ce52a44c7bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPcAR(rZQhIn+&oq9U&ih)Sm z{u}eQU05}1;)Dq|Ha?Jy_*k_kdVZtV-GxdTC%2qcvFytg+n1K$y178~>Hayz{~o`b z_o0I6pS{0w%$tLk7j~q(yEAC0voI~3BdXUd_~4NP^E&^w%?nrde-Tq=VVeH?ha>BM z=@+xz*%HsP6jUl`vRP$#I4OSQJ$Z>+`>3Nr!PfrJRZm*l9^E-;!!d2DXtK96Q$F9v zWLFQnZNKFD4;z2y7CYT_m}A$%it20KtKzfgx3PMDFcq?p(VG|}&orw+-*wBYzF_;w zZ+E{@2)3|koNdcFsXE}{V*^Ex#_FC07c#Crd-`^vPzzIB<xBNNwZ~`OlXhGfkiny! zz3S}-{)(7|1rdFRE7-o@beyhX!gesJaF2CGm=zOW_lGO}XE^6|`|iGQQB|n-&;|oz z<(eDTEd8ku3o8=cye3)(r7&@M>ZGNlJh_~Bu<+5s`m|$Wk1fMe*q7X0d?tS3&y&jW z-@f1BRTkUc__U#MqiS|;M)K{rpQmi+?@ViVGG$!9D0QaOPBj_rX`RaVD`fL_JXYQw zv(b5R@WRr&LXG~b=81M26h5)`ejga~=|FYf&PPm}6<;o5-p|>cn)s+S{>DMU7Z=|A zXnd*`C{c3Cuf2=qW<{9%%gEmruWwv9kT0`s;f2ma9+%F&GFG2g=-e`yZ4IZ)<TKL_ zc`%Eosl^r6%0|hpVT+q|qfb^!*jSmjCNb>@zvZ$ii7QLa_AI^0*57wp<l(f|R^ff; zKLmKK_}COY>lR=8Nxqy*^FKKAz5W^B!tCRl#^cuYujl>k9otk(t}M`g_N>or+l}we zb)2T3e|}%-%^O-F;=S`#kIL_bE82UlT9@2y?o+KzXK~~>T;}<@YU>BDMISuwxH)p{ z{qJ4-T5<YB&qx1-WLqBI`Eg%0rC|37hH3UXvpQyO3VjmJz`(%Z>FVdQ&MBb@01s7I ACjbBd diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.16.out deleted file mode 100644 index b874c94c576756ad3a0fdcd722c54a068e64782b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1712 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 diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.GRAY.8.out deleted file mode 100644 index c3245fb1e5cf2f89c7825916eccc1eea00b6ef1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(1#B~KT}5R2a0$&P)ht~@S> z{r<n>znsO%$=NB(eeOWl>%#4p%*to^c$*l%mRw)2Wi5Mf(JSt-h*MXKt>!%3Qmc0K zzvaAlY46g~7<d>|94C2bDSu?Ra897_f@I{xOUeq?-ggu|C(SetI;6~UB7x1J!KL%b zyv<6gFSSmjvi;6))y+PqG3iqHgqTg$jGK184c)BF?)mcdX8s5F4(v)lJ8$CR-JW|d z3-FfRdw+YHX?pn+iMw~N2)jrzOuBn|mSwuRa&3=gy7_!pDVMVI*Gtd8@+@1jyMM;! zw0h-jj&G_W{ruc^?d%tfyn4TA)~-*VH>H-EySmQW`SZh#?YjHlr@WmXw|&mtB`z+r z4&J%ru5<d+<9plt<G0OHQRVEiY0F4^_PF2QzP@6Ah&&IIz|zaMow51*Yks`Ed-N_( z`+G4>N0FPGuT77?KkwfE4>fyx9zJ6;cJUIKy}79NXYO+Qx<BuJ{t|HSid5mx&Wex! zzh+wR>GxktYC9y}<;i(&dcG!R`u_CbXU_GdvGPjC3buQceP2_%yY}TWhR+Mdzu6co z?XC{XdmX)9W#&xYJ)3?PNj_BGR2}y2wo?}qL-9_rjgm65H#cY9&tIa!X<%%8-1pJa zWS6qgciNu!{@a{kT(jsz$DGjLWm5GXGY+1qnXKU&`quhrGq=IPlxJULg_O0w|CYNe zTH<r4%yZ&QD^`ZPJ9*gBnF^op`s~bNbYOy&nK#pd`gq2NcfS5&pWT!`?ej^Qeo(6M MboFyt=akR{0RImd=l}o! diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.16.out deleted file mode 100644 index 8c98fc294128e4b0d68cb363f31913e1aa08defd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3175 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 b{}X@Av4!zs@p2gk1_lOCS3j3^P6<r_`QA{l diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGB.8.out deleted file mode 100644 index 2c36574281524b3c36a737649505b7d46e494b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1110 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c(%h$a=ashIn+Yo#vhQ+Dycu zU**&!VaZCrrj$tw%LNu#dtSfnSpIq2hiwmDN=wc)X;$-CvtyEO(0x9=lL3X+s|yt+ zHdLJ3`zOX~mYRu~)W84lxqRm_`xqSJVCK2t%+Gm5PwCC^{g%7Tt;KaE4Ep-ciApJ) zpZSbWa+yLS%c7kLvz{w{5zsABpOKKX^N*It+{57lhNmCzf5Ce}=c1)ru!+H~LUHl3 zf*G@lgukYC)l7Z3#iW4APkfS{TJVbmH+4Pz{e9-e$EWk$vi!v%qhI@L3wLW<;xi2{ z?~hGaIG-pt=`G;i#rEpZvV0>Sx9L`m{eo&?t7kgwp87$w#h!C7)2gYy_b<K-a(%pN zYQfc**vJ6xTcUzH|0;huwvhk8!>-3q(|^UjV!8En@;P7S*QUxPdcIFt_Ab6&&>*C7 zJ!G|i)$Rq}FGcqTWq3HSE_YqjK5@2mx3wdeVc1OvR{0Nnd+y)(a{dKRr<3y=nNx2q znAcvtbN})|PCJE0Mw5^Y?cxuf&g;*=(mMB7S>naLNgfi(u8&#bCbJ#C=y3cnvy@lB z1!vy;4?H&Z8}=`YirjT(x3hI)*>B}CzV((nFXWiXJn%R8z-67V{o&g(H}NeOj?d66 zYSQSiFz9^7>}B!c#|im>Lt;1VK2^ELF8CaIP42DIth(~&>a*<k`uj+(dDzME<DbjU zV=41v{9A4ci}+qhI`rHmpPS9=hv<xoU*~qI7_XR@q9E6)CT&pd^y#*K`rDY@bK?)+ z-_X84f!+ScIpGhVp9?pfykMzz{K*!{w})~A<hvYqrj^&-{c$+zp!Ay?pCUHJ1>0@9 zn<szs&5qjS(2Y4Kcrw$uC(T;2rlO?j;hVZoUu<nQCx1RQSMjt#`JTKRZ_A`h&V8+W z_F-1Vl;ykm+ZK3kan%0NAU?0M;_<d+F9N&vE!g+ece1^`{e`77dKPW#bM1bW8__uL zzJ8r#UqM58+>ZOju^TTvVfH*UVR3lK^*7d+rcbY~a-Duj@5I(p57|}fk};cKpO>m( zRegV_=EK^gs~g^UxIda<xHS6GniV{e{Z;k*6MNP!^WJYEVs*ncvDrRglU+e*u!&Bq zsi3P*m)&8VOs=er)1Kb4syR`$WbUGw@we9<m*24}LUyM}mAlo14uwRImq#vcdJ(An z@nJz~|Hlazw2g$fy#C;SkTZ*=_L0+M?pO__4oT6y7DZeBZ(S93sXoX3R8RKxhi7Y- zEaP~o%k5cTvc2exhO177vCoS2uMb(pn4bEUQeMS+cf*&Gn<YvgL{)f<Za(6Ow~*6! zZeR4%$KK`lox=y$Y1dgT>C^X|<0roD`^~boj>;MS(|r|`-IF9WMLQhAoMbl1DNQh+ zou<jBE%0UkC3c~k_KB>UrvGtST4JkpxMgL=T;>1koVWONi~m@1Zn?)H|0({eHIc9X a$p7hWSSz@HvOWU?1B0ilpUXO@geCwqJ_*nO diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.16.out deleted file mode 100644 index 51ea33fa528d3e15b66720658ca58b32c9ecd8c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3419 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 Jmvv4FO#tNTgGK-V diff --git a/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/basn6a16.png.RGBA.8.out deleted file mode 100644 index a78219c29b7368cc6908948fc83104b5ec0b62eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANMUt)4E9ArY;6r}-8=vJq&L z|HEwdfJuGjNj2}h1CcYlpXuCbm~}Q~a){9EO$UwsJ&canB>nKp8@upQ%MhKt{`<35 zn(mBqG;}%m|MzWYM}ZA&JDAq?xw)@B%qk-&+~(eweRPM{5mt>-iNcTxRd?eBSdLs5 z<S?GNTroyBk2%JDLGKRTHAjU*E?6d{aX4Q~X4uy-fzPL9hvaAdk4y_Vf<qXd^7K3P zUok%We6Fz2fwG6oRVVb_oF;xi@_~(i03&n5Cb17(-A5m^%-JH-DAByPhhsj2U-uNH zH%E8+m^u{mZ;avd^I(W)m~osTWZDkFbBv!-4^`TAOgCOp!>Hiw>>`*g?a&!Df$zqB ziH|%A-9dib8i%Am@+}a!H&dW*P1q5)2aD9r^&}eHI>eoRa1_L-&Jnwlvi>MLJI_9Q zrprz;<$fVb*8U7voNTTi;&c#No^o;RkJMY8*X6FvV=MUDbJZiG<G6d0a>=zdeP*jJ zJ(8Tj6weUf&v{&Qj+lMd<sDK71O?;{|I^(1Uh2uunWak^gKU>vT$ggd`~%;Ie{&|S zQ;g?(T{n~OP}H1j7fllwR65STy%<`ips#<#EBZ}lbI}9g3g(Jx&mVOSI#Nf@&f<Q^ zc)-FS(c)PQ_Y)nbgK39<as0U&BY%ML!3NKtHM_*k54r6rePAWXAgnFJeXL=L)mP=5 z?MLdroVPttH~YiK)th5kze{>23f3AkwS5lVr#hwaC-<MmyM15t8?MKC36)EF2Wql? z&%a=rFz@w==rZZzd(*7G-v71uuJ#emGhQFE3Zx67X2i5N{5HQ+c6j%-G;?Ox@Iv{y z@7KS%B)fjkzIO?`+vDXooKXyT5Wd|&P36iHtyvfSw+mJtNiBI=*I;{FMNv&H@$|gE zb=<R=ZEBsSI7XE8c?fVC?`*ov)sUu=9Q{YSqM3R2m*)5>XJ!O`>gG3-v5+x~Wwfig z?|h^0#rFdF34cSrg%s~wcEEbi$4NDxT+U6B;_siOYUy9Ih@+yq`em7e<?CsO9eng< z8#?723hO^lu>I;%zN7x2_4$|P{3$LPOj0p1QcNO(lKeHn4?q9=cjs-}srP;d9C!te zaq=3PEH?bOd7E9MzTD&~rjmlJilTP9e0;igqKd47lB&j8Hv9I;?OvPVpj9ujh<U=< z<9RRKJvuHcYZpxuY1w;XDyQ(eiYsR{I5i_CeJ}77;ukRT@%=G%9pi5{%~`)DhE5VJ zOuE<|{=;O4ZG(5S|5fLh89|RPJ}R(T*A~2?(7GWqb8GVNUsdn8^p(B*bu5hC1;0E> zD`I|d;Zfjs0mfI)cI$Ni+Pwcg=jNa-$-l)ao93h@b;r;6c60lquooA;>G|w5SiFb% z?B}NpiZUO6g{^LT<F9kcxR~pZ^hc?FsrBp=_;#55+F#0_SYK_W`%Yn(l)%mTGu4A4 z((?Q><fIQ-7_!yaoo{Emx;<HzHE|V3-VyCTad#rJ)QtHg7=pRk4qa(sG<e*lwB^=D zCf5mny!RY@yZV0Ffj4YBMeIaP<%~~R7c6CRD0g<9&=;x4m?CDc+sL_7MCgv(>W~BV Zygm!B^~CiYV_;xl@O1TaS?83{1OUAO7H|Ln diff --git a/_tools/code_generators/libs/png++/test/cmp/gray_16.out b/_tools/code_generators/libs/png++/test/cmp/gray_16.out deleted file mode 100644 index e405f4e1253a266f180645472b751ce0e18a69c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36072 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	R 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 diff --git a/_tools/code_generators/libs/png++/test/cmp/gray_packed_1.png.out b/_tools/code_generators/libs/png++/test/cmp/gray_packed_1.png.out deleted file mode 100644 index 238628050db4b5b95143b97049d1782b39be9cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMg|53hG<6jNCpN5Ax{^_5RRG29IQ-jp$-QO aG$I*x%(Xx0w&rFSNR_9npUXO@geCyu=MYu^ diff --git a/_tools/code_generators/libs/png++/test/cmp/gray_packed_2.png.out b/_tools/code_generators/libs/png++/test/cmp/gray_packed_2.png.out deleted file mode 100644 index fb0e9c7c9bcf4edf0c78d00db465d9abdd3d12d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;ICI$uu2APGnoeT^NQl2i3Are!QC$urO$!H|p i;9%uBzMvtIWi=y%UUq%s9PxsDkZMm?KbLh*2~7Z*coR1O diff --git a/_tools/code_generators/libs/png++/test/cmp/gray_packed_4.png.out b/_tools/code_generators/libs/png++/test/cmp/gray_packed_4.png.out deleted file mode 100644 index 5d5563ab28e9e2bef551619226bf1b51186cea84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I76t|ehRF|4XfiM`M0>h8hG<NDd%;k$L4kqw z;bJDy6%MRg0SCE4Hb9w<$`+Otl5_HYwtu&E(mHN=?d!A|*{_T5=L>RhxUdK@Nj5e) txIS=Lpje=EK~RFjheeEO_W%C#H`tqs{xh~_s@8z4^K|udS?83{1OTx@EuH`X diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.GA.16.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.GA.16.out deleted file mode 100644 index ca364b29b8a77b77e5c2b922735ab84e4ce878e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0Tu=Z#(z)ZRxvOz7JIrlhD5X;4Y{3nSb@jZ z<In%?rI+dw_-EhB^!JXqs@AyoNNCc5XOl|#H3W+FwlRKgZODIM_~vw);NKlg8`K#N z@A|=*a8H$Q``?FQ9ky$`Ut68gX3BFYy3?s7I)mX%4Ku5TMXvc79f#s#L7O`aH#Q5* zS;DK5tnXxSQXq9>>JIfy6$S-Q@|?9Cia)nCNFLb4mbH&tb4x=lcVl{jf2h_*FNX7+ zChRf?o_n%SQu;4%d4Zv(-&R{}>&~Ap8ClA;YlY3G%we@QTlHJlQM)2jv18W*s{^5? zC$?_XV14PZlI2$CnQIB>7#5v25fSlG@tAvL)^CB*h0mN^U3C~$WUtsLoSYo7SYj`` zJO>BQmo=pec)T3kxi8=8^FKF--}+zkhUaYmf<jCm@QL|;wNl@=+F^Bu--cTb{@+v& z?TpyoC?t5XA-KhBeX#G%a<;ZpIjWnctrFSWV#^d2dS&_sb7$RYwVeGg@;h(d)y)um iW%htiY{k((O#GccK1y~!y2!x5z~JfX=d#Wzp$P!TJh5B= diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.GA.8.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.GA.8.out deleted file mode 100644 index 2fb3afaf4051b3dbb820cf2f2275e88390540691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*Lm#&so4FBupZJw06<Lp(a?2A%FZtiU6q z^8f$#t(X2Ckc(2iI&ad26|D#4m^9gZE^)Lb^r!z}`1+ikN5Ua|!(pCX2}gR=uk;>& z@pZvRme>V`$!)(r>epP8F7f4ImX^(zkcgOZHL*D{VPVy>k4&X!OztEmIM^Cb?$Gs? zzjRFJifTqd4G%N(*VnpY9`~7ENo|<S9Md4XV*Lrdf&xQ@@D7JN!mQ_dp8G1YFKXZA zV|4%O;nTTMItpiHo~mSIeYh)ip-J2_;kA=_;zG9L%qkHaCzhYg+HiA*tW1WE*J-Ab zty`XKQZt)YbH7Wc(PiPkfJvU$X5OyeQ7yl~xSs!#=nIXT>wV{)mJ|0~eo~LC#$A`? zi@5FbrN@hBH2U~<E^@H0_w-vE+c;?w=Zmb9ekxCbOyndYa(}I9Dm(u+s%!d=>4w{H rc;9)yV+!wfg~?^CUmTlS{xILX_T!_s_n9dS3=9mOu6{1-oD!M<*ovl= diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.16.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.16.out deleted file mode 100644 index 81139f7173154098c701104e297b8be549dd75ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0R{#J#=^Ffe;F7UT|HeKLp(a?2A$4pG2ofw z@$Y~B?Ww<*ZMQV7Qdj6M6ZYX(xpIzM%(dmlV@Z3V&)tm7Y!_nX(=PBTr`aUzGfCOr ze3ZGQ`Dl;iGiLvdaSL`E$kdeVdGO%DL$h}Nw&wPiQ;!K>(Y&15-pu^<l!##UG`l6e zkt>8V3jRp*@jVlk^Zpv`5X=0mih+HGW36KuV{@{@DuKow+^lDNp2sS(E^6Q9Vs!Vc z|6<>M)|9Er^I3d(?eZCQD^{|<iM^o~v$C<&fp;CtlFK2cKT^){u=Pe}dN$}zQ`5^1 zO7{G|_k@f9*VA?-waB!0?;lEMH>~>;K0((Z{p9OwPqw}(yjU{xOyC3CEVYFDFCwSO zolj&dU8NGndh2KLrY(G|MP5n?-Kxb?CwN_~NJ?1xay8d2+wIvW;~oVbyAq`TamV8r lvpY_6OEePvg|be_AG7@Uqm%Vg9|HpegQu&X%Q~loCIBWppbh{4 diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.8.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.GRAY.8.out deleted file mode 100644 index 9dd1ecdd1f282df6d202c52ae2890c8ea1b7b3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWMny5veGCkY3Z5>GAr`&06CC@R4R~Bd zPky(Lp7@Mu^9(Mx&5JxI7XGp2R#$A?ru3lZzxZ*BKWkrm1^>(`sm?k7Avk4Grmz35 zrMcYkXU?3l_C0fEcgn08<r8&G3a9BzI{b*|@|(a@ZY^T{^8`;iaetoYYIIiTk@QKW zNR^uOxAIFXFGvUlXk=t=U<xo{`ta1HP_$qX7weQXlPE^lA6GXDdhN^X4Ul1Ic(kI_ zLu0`dx4YLJJiqMnzY^!&+w-lsKWe?&rNHy`dR6wNjgJ;`U*tV*{Wiuy@EzNOzu8k} zRi#R6)LG=GxqY0>YuuH8hi%F9^6JVNl1C@Me#S6|%jEW9)(yrJ+B9X{mcA&=Jlke; zT*co__p(~0U8M8OCr@7;3p$b!+wkSki=+06ULSv)Q@EnSz`(%Z>FVdQ&MBb@00QBY AUjP6A diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.16.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.16.out deleted file mode 100644 index 9dfaf8d7f7020d9e0fd2d5e2bb12b1aa41512044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0VW0p#@qdjWeg0Ag`O^sArY--r`i@BRuE{l zPYaoF?&Y0jUrdWW$Q-q7x}+(qsiM{`cr8gxy35@9^gml$2R(rX{T&B2rCxse*~b1L zIM3yJ*So0ek0<5Fe3HAk^(#kAV}8IxzFymP4D!-q_8mN0DpQ(OcFhbp$ha)y#kI)! z1^=EGOc8Jv<;;9>w`K1ICnrl2Zws#2i>zr6*c&8!a^qLePFt(~hULKS(B>^G0-K92 zwz2J6G?n*Nx0civQC*V_+FH5W1zwc%Cv>^ZFHP$D`^Nk5vPRS95YAw>*5H(b3u>m# zlGJ#2a4}EG_J@jWQ_Xj_IsUB;GtQ{!?vvQE*P~ogV(+qQo;UZd^fZ1g)|H5u9+xW~ z(Gb7mpz7zI7vJ~(H@BVUzv1@(Gi5({?weI7u%2@EmhoY{d*PCO1JhS$@0y8Bxz67I zg+(_=M<u1R{^HU7D=YHCev6AT>pbf%U(7W=>{_TAre$#K!lm^A340c*iit=hTlB_j f7~Ct6`Y*pXchPU2*Y0Kv3=9mOu6{1-oD!M<>JGGq diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.8.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGB.8.out deleted file mode 100644 index ac0d03179b22e92fe52521b5967f9ce1f7546790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$#%}q$rVI>>#-1*YAs(GuCmU{RQ4nyE z4`s`FmbR=d?r`(_z-!7G&(7aqxW>dN8TRkW6xG8e+ut@AwTbIl$JIE?bMtPF&6trG z_MRurO6+puOqpYQB0GYA|8UN4G5jGB{mHy(lJC}8OW0(&S4vEhX72fT?1N~$(ACSw z1nS;RS|KO>T&w5Qnw$+vHLvFEw=ntgVG2XcY8HVlam+$%EgiO*vWZ01Hmta6cQtR- zGl%10a*g7($D=Ot`tNMotQhj)e^8|2k3iSf3chfz&cGOrCu(!UPViZ;EU2A!j;r-? zNzjBj*VZn&9X>%Wf3?Efwz!#d?PK1V)L-BF-Cgch+SS_Ci`&@O%CcO^l~q|0ZFwT- zetE!xeUBYn{?2aZdKJZf^-2-DeUP`zokjb~E;Lv@Um#ifW`W_>_YdM%<km6lyS?Z) U>+{YS1_lNOPgg&ebxsLQ0L1g1J^%m! diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.16.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.16.out deleted file mode 100644 index 47cf3ff50ab01fd8f31d400b6331e3cdb4d8d099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I0X7B(#*nwu6d4#8r+T_LhGaC}4L2-1tibbk z&-8<LFX?6<i&@P6KJb#V#q8Y|4^9veH8|ukA>${TqRQWz=42fmhVJ||ZXZ8X{K*f_ zI{4&6w;qSA+}Top-sxAGyjQhdC|rN=5!Zo7$9;<oJe^P3a6e}-?_9=slh=z$W7f^T ze5Nu9YY*6edK<F);K_$GcRNa)xTPQ#vBgo(V7H@ZLJ70q0{3J?<_$Y`p1is6Sj8e) zkJ<IXeSG#yxjR%vbQh>3US`S?dZ)F()hUcoh;uV*hRTxU%{zWCIBv<n(0+XJKH2L` z&(5|AbvEv1`y$bi>Db!XyWOF$ang3j7RG0m7y24!eO|!HZ0&!jiY;nRM<|cUKJHVJ z6Ltu9NeJxYz08wwrz?=nWc_1xHWT6B8#hKUMEu$1+2x(|PxjBdde8mu1#@RB-FRB< zaXN{Y`GC7Yoi^(f6Q7SuMFTDyeBD2VDaypBFoV^@#OJTGro-aIu2|6vixXdkhaTYI z4HgMK(7_vAAI#cwLE!p+Z$@RaBVRX*7&skV`!|xcC!!$x|70dN4UgOZ+0U}B{Bl*S S?<4~Q1B0ilpUXO@geCx6k-~)l diff --git a/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.8.out b/_tools/code_generators/libs/png++/test/cmp/interlace.png.RGBA.8.out deleted file mode 100644 index fe428a3b8ddffa69ca35129b82aec0615fd76aed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`MwVKyBnAdXUr!gukcig3Q>=?x3<O-} zui|*ZlfI-SCYgVq`%PP>6pP8tu5Q=<H_uq5>0o^M?o|&VuZ8m(&NZsLc@#S`@$dcc zvw{7Q=<$d%tw)bU`0;#o+RIq)C4G5{3G-&{81Xf1+ZP0{(OSmHcF&I2YFWhLl8g^# zK5ZV$AL>*|{S#lywmrk-N4J6Um9AS2q8jz5ruZ+MaDby`I@6ryR)%*8Y7P|!j1%N| z7@qJ)F+6SlrCD}$6MsTN_skhx6C1bI{dnv+wdry@7wflpji3krI+<7()=pTeut(fT zWJy_4h+~zxo5+)Stm~Wpe0~rZP$jkfSE9G$-9kH&E4+t00<2%LU)U-A{_p<O*R?^? zpY)~QEjCN~Va0OiQG<8QWah+2=lGU%T3b%=ui41_^oY1+fd8Er4%UTBnXe0qTNT(A uE@S@NA<XwhozJ2`e&f>ve~(zzGv1oD@{494+h+y_1_n=8KbLh*2~7ZJ0isU; diff --git a/_tools/code_generators/libs/png++/test/cmp/palette1.png.out b/_tools/code_generators/libs/png++/test/cmp/palette1.png.out deleted file mode 100644 index ee4323b2fe29283fed6817592868242f40aec608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmeAS@N?(olHy`uVBq!ia0y~yU|<AcMrH;E2G!ePrx+L**aCb)Tp8*?(D75RAOiyf km#2$k2*=Fi1O^5MCI-eYg(=Gz7#J8lUHx3vIVCg!0D*N8fdBvi diff --git a/_tools/code_generators/libs/png++/test/cmp/palette2.png.out b/_tools/code_generators/libs/png++/test/cmp/palette2.png.out deleted file mode 100644 index ba7fad816501e85bd3c5fe116053567aedfac430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93 zcmeAS@N?(olHy`uVBq!ia0y~yU|<4aCT0c(2L2mQw=*y>@C5jTxH9Z#u&)Qf{S5nK q&Rl*668Cg*4B?oWERf*Az`!ttp^)iq1|tIl1B0ilpUXO@geCx(5*9=N diff --git a/_tools/code_generators/libs/png++/test/cmp/palette4.png.out b/_tools/code_generators/libs/png++/test/cmp/palette4.png.out deleted file mode 100644 index 1b1132bbe7b67dc1563d0e2d032c496601f7d58e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@7G?$p1~bLQI~W)k3<7*YTp8Xo@ZaZ`KQFJp zU*CScz5jgw`2P6(dJyc7@1O5Kf4%+s{rdaQ%b&l`fB!whd$Zl1vlti{G(BA$LpWw8 zCxn#wrVAKxu1;VuvXX4*iR5uOmc^!!%+EZba2n%@9qbG@FYta`dD-MN0|Nttr>mdK II;Vst00;0g>Hq)$ diff --git a/_tools/code_generators/libs/png++/test/cmp/palette8.png.out b/_tools/code_generators/libs/png++/test/cmp/palette8.png.out deleted file mode 100644 index 1b5ea446d6037c855034c9cc6b28bfee7e90fe9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4rT@hhA$5${$yZaW(e>Jab@_&!0?xW@ed=@ zZzkqn%q%}ySbwmxeP?6;#?JATgYyd~*Jm#7Pux5od3ZnY^1bKdf5$KIRzUELpwMd} z;a9>UFGWOOh>ATI6MrTy@l-<ciKNtHDd|VjG7n{BAIQqxmy^FIuW(mE@s6U>Z6)Pf z$|^TiRBx!NT~|}Trmk^SL-UHJ)@3d2OWHaYb#yQ2>YdlqKc{bS*1+(Lq0wn0<5R{a zCrwOGn3^3oGe2f-an!={h^5tGE9*nnHV18N57^r6x3k}8@37awagU?ZZYSqm&MrG$ zTz9y-ZFh6u=I*i8!*h$L*Jdy8P2N5meSA0g`mOi#U*{jNHXv|KV9@HI;8npPD?>t8 zgoZ5-3ttu<u{0ubNo3UGsOUw}F$-g27sSTRkBgrdpD;HeaZX~=?4;yb$tg2aQfH*5 zO;1aomYy*+BXde-*5s`0N!d9Qb8;u-=Jn_0_vIJ#78Ldr7IhaDcNLd(mXvmsmbI6a zx0P44R#diBRy9{uH&xd(*3>rC*42YxLv2H2O=DAaQ*%{wOJz%IMQdAmTYFi1M`=fA zNoQAaS9ei&Phn4QL2qAvUw>Zzgxm=eb0$v8o-{dY@|4UeQ!}PcOP@A9ZTgJV88cI6 z&Ptv&J8AZu#5r>l=FW?sH$QIvg4hKMV-_xoUbHxB@sh|TOCy#p3tzT8Z25}N6)Qtl zt_ohYI%xHpz%^?F)~@qkx88642Hy=EeKv0L-n7|k^A^u7TRpaJbKkbzZTk+_9Xnli z?sDF>+iCY6$31%;_U^Oax8H960owxyZ4Mr?K6KdX@Da-+M=g#XGe36R?Dz@O6DLhh zo-#gl+UWEd!!u_M&YsghcV6%O1>Fl5buM1gzI0jZ@)gZ1S2eC)Q@?gy?fMPX8#h&M z-cr7GTj};4#XENu?%tEXcVF)Q1K9@;Wgb3~e)L%C@e|1>PbHo{6Myzx?D-4P7cWI# zz7l@*TIlr~!8dOO-oE31_nz<l2i^}Kc|LyP{`8sa^B2x9Upc;hWB>M@?fVbbA3s@s z{$l?1o9Xu-#y@`<{{Cb5H*M#fVg?2#WltB!kcv4+&oWPvU|?X_xHk9pHW2!p1)*=x zvrGQm=&;~`V-p*<oKnh)3yFu?xaAd-mYfJ&<kl^xoVMmh;iF^S^A!>o9r2u`<~>g- zb=8&3OUu0HD<&^H6S*nv^gQMCb$2R1Jv$x0AYtJl*Df*bxJ4-|FQuNErX9a9Y3ZrZ zRbi{+7N@PfRr>1M>iY{47a#MTWtM$!QR?bzxwp1u-(Q%#{9Np=ve)+(r?0<P`|I0l z`Go(>6aF`z_^<G!-r$ox%TM{PKm5-B+Liw+PxwFa#D9$^^(LR}*?!7*|LJ%BcU<|u z@Pz-JC;qEEsW<v$&-!zI*B^i9f6JBs8&CK@^TdChC-r8Z?Ad?L@BVY%`QLNp|J)P) zx1RW~^rYVK(|(qp@m+uPo&QZ&{;xgZ|I`!zwVu?Qe%jCWGrs%Jdgp)FmH$gm_}_ct zzuJ>}<4^lpf8Ou<lkfa*yYheQ3IFGw_^<b*-u%;k_Mi8=|Ganp_g(ov`-K0^C;lrw z`ET&4p5>=~*B^Q3fBnk;)hGO)eB!_6lm8~4>e+tUcmJ91{O`Q-fAI<byHEUAee&Pv zQ$6d?{at_Jo&T*@{%=0v|Lhb0b)Wn<`&7^VbAR`r`_BK~EC1)8@W1`Uf8{6t4L|*7 z`B~rf$KLtheC7Z86aG&>@n8GNf74I@*?!h{|Jm>S@4oVX`3e8~PyAPZ^56K=f7YM> zyZ+QW|J$$p-+sdX`6vGCKlyL|=|B6=|J{H7|K_h+c<|EScYJ>t7#J8lUHx3vIVCg! E0Hz$%lK=n! diff --git a/_tools/code_generators/libs/png++/test/cmp/palette8_tRNS.png.out b/_tools/code_generators/libs/png++/test/cmp/palette8_tRNS.png.out deleted file mode 100644 index 0d3da33341fabbf3f16d661c5f6453f1cb4a788b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1652 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 af7QZ+m;S!v`^&(<z~JfX=d#Wzp$Pz0?N?C% diff --git a/_tools/code_generators/libs/png++/test/convert_color_space.cpp b/_tools/code_generators/libs/png++/test/convert_color_space.cpp deleted file mode 100644 index 2f598de..0000000 --- a/_tools/code_generators/libs/png++/test/convert_color_space.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2007,2008 Alex Shulgin - * - * This file is part of png++ the C++ wrapper for libpng. PNG++ is free - * software; the exact copying conditions are as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -void -print_usage() -{ - std::cerr << "usage: convert_color_space RGB|RGBA|GRAY|GA 8|16" - << " INFILE OUTFILE" << std::endl; -} - -int -main(int argc, char* argv[]) -try -{ - if (argc != 5) - { - print_usage(); - return EXIT_FAILURE; - } - char const* space = argv[1]; - int bits = atoi(argv[2]); - char const* infile = argv[3]; - char const* outfile = argv[4]; - - if (bits != 8 && bits != 16) - { - print_usage(); - return EXIT_FAILURE; - } - if (strcmp(space, "RGB") == 0) - { - if (bits == 16) - { - png::image< png::rgb_pixel_16 > image(infile); - image.write(outfile); - } - else - { - png::image< png::rgb_pixel > image(infile); - image.write(outfile); - } - } - else if (strcmp(space, "RGBA") == 0) - { - if (bits == 16) - { - png::image< png::rgba_pixel_16 > image(infile); - image.write(outfile); - } - else - { - png::image< png::rgba_pixel > image(infile); - image.write(outfile); - } - } - else if (strcmp(space, "GRAY") == 0) - { - if (bits == 16) - { - png::image< png::gray_pixel_16 > image(infile); - image.write(outfile); - } - else - { - png::image< png::gray_pixel > image(infile); - image.write(outfile); - } - } - else if (strcmp(space, "GA") == 0) - { - if (bits == 16) - { - png::ga_pixel_16 ga(1); // test alpha_pixel_traits - - png::image< png::ga_pixel_16 > image(infile); - image.write(outfile); - } - else - { - png::ga_pixel ga(1); // test alpha_pixel_traits - - png::image< png::ga_pixel > image(infile); - image.write(outfile); - } - } - else - { - print_usage(); - return EXIT_FAILURE; - } -} -catch (std::exception const& error) -{ - std::cerr << "convert_color_space: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/test/dump.cpp b/_tools/code_generators/libs/png++/test/dump.cpp deleted file mode 100644 index 038ab6d..0000000 --- a/_tools/code_generators/libs/png++/test/dump.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -// inline png::uint_16 -// to_png_order(png::uint_16 x) -// { -// return ((x & 0xff) << 8) | (x >> 8); -// } - -int -main(int argc, char* argv[]) -try -{ - if (argc != 2) - { - throw std::runtime_error("usage: dump PNG"); - } - char const* file = argv[1]; - png::image< png::gray_pixel_16 > image(file); - for (size_t y = 0; y < image.get_height(); ++y) - { - for (size_t x = 0; x < image.get_width(); ++x) - { - if (x) - { - putchar(' '); - } - printf("%04x", image[y][x]); - } - putchar('\n'); - } -} -catch (std::exception const& error) -{ - std::cerr << "dump: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/test/generate_gray_packed.cpp b/_tools/code_generators/libs/png++/test/generate_gray_packed.cpp deleted file mode 100644 index d2106e7..0000000 --- a/_tools/code_generators/libs/png++/test/generate_gray_packed.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2007,2008 Alex Shulgin - * - * This file is part of png++ the C++ wrapper for libpng. PNG++ is free - * software; the exact copying conditions are as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -template< class pixel > -void -generate_image(png::image< pixel >& image, char const* filename) -{ - for (size_t j = 0; j < image.get_height(); ++j) - { - for (size_t i = 0; i < image.get_width(); ++i) - { - image.set_pixel(i, j, pixel(i + j)); - } - } - image.write(filename); -} - -int -main(int argc, char* argv[]) -try -{ - size_t const width = 32; - size_t const height = 32; - - png::image< png::gray_pixel_1 > image1(width, height); - generate_image(image1, "gray_packed_1.png.out"); - - png::image< png::gray_pixel_2 > image2(width, height); - generate_image(image2, "gray_packed_2.png.out"); - - png::image< png::gray_pixel_4 > image4(width, height); - generate_image(image4, "gray_packed_4.png.out"); -} -catch (std::exception const& error) -{ - std::cerr << "generate_gray_packed: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/test/generate_palette.cpp b/_tools/code_generators/libs/png++/test/generate_palette.cpp deleted file mode 100644 index 4fb9f97..0000000 --- a/_tools/code_generators/libs/png++/test/generate_palette.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2007,2008 Alex Shulgin - * - * This file is part of png++ the C++ wrapper for libpng. PNG++ is free - * software; the exact copying conditions are as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -template< typename pixel > -void -generate_image(png::image< pixel >& image) -{ - typedef png::pixel_traits< pixel > traits; - size_t colors = 1 << traits::get_bit_depth(); - size_t size = colors / 2; - image.resize(size, size); - - png::palette palette(colors); - for (size_t c = 0; c < colors; ++c) - { - palette[c] = png::color(c * 255 / colors, - (colors - c - 1) * 255 / colors, - c * 255 / colors); - } - image.set_palette(palette); - for (size_t j = 0; j < image.get_height(); ++j) - { - for (size_t i = 0; i < image.get_width(); ++i) - { - image.set_pixel(i, j, i + j); - } - } -} - -int -main() -try -{ - png::image< png::index_pixel_1 > image1; - generate_image(image1); - image1.write("palette1.png.out"); - - png::image< png::index_pixel_2 > image2; - generate_image(image2); - image2.write("palette2.png.out"); - - png::image< png::index_pixel_4 > image4; - generate_image(image4); - image4.write("palette4.png.out"); - - png::image< png::index_pixel > image8; - generate_image(image8); - image8.write("palette8.png.out"); - - png::image< png::index_pixel > image8_tRNS; - generate_image(image8_tRNS); - png::tRNS trns(256); - for (size_t i = 0; i < trns.size(); ++i) - { - trns[i] = i; - } - image8_tRNS.set_tRNS(trns); - image8_tRNS.write("palette8_tRNS.png.out"); -} -catch (std::exception const& error) -{ - std::cerr << "generate_palette: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/test/interlace.png b/_tools/code_generators/libs/png++/test/interlace.png deleted file mode 100644 index 8a3f4a9d97036598c0a572b59a1128d7ce668b82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$#%}q$rVI=WoCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`*k*U4ox*r1%?I&21X4}7sn8f<69^1-PEig&}yHq<B@I^?HzxZ{ruu1 z?i0?H++jNGz_3|*r?s_T!ufvngy%B+eeWti=n0FliS0MoaNv@y_8d!{X9s5T_f>D2 zw7v7^!Tcu8O3D4A{F8L=-+k64_hrqLEFC_#8J`aRFpKBjE#GWddw1&wX|`m=_S+ja zDAvr1+P8;?r(n7O--?zA4(B;pGkODBpS9>;n4!@0D}B55Rm%&>7q48{ta+hey0wg9 z3*X26DWVyj&UJiYjdtZL=57gHkj?kJ{G`@}oy||SMX_3yO^C~Xui$$4!p^zk?(a?h z=We;*zo#ev>i1=n+oabDt6a(z7FiOly22~o|AXr<FQ$oK@;OB=-D1hgtZb5Bs>-S7 uIbS_PA=dkXkCp$02rIu2`j__oXV`ap(Qjq-JuVCk3=E#GelF{r5}E)m8k{cx diff --git a/_tools/code_generators/libs/png++/test/read_write_gray_packed.cpp b/_tools/code_generators/libs/png++/test/read_write_gray_packed.cpp deleted file mode 100644 index 1f51c54..0000000 --- a/_tools/code_generators/libs/png++/test/read_write_gray_packed.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2007,2008 Alex Shulgin - * - * This file is part of png++ the C++ wrapper for libpng. PNG++ is free - * software; the exact copying conditions are as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -void -print_usage() -{ - std::cerr << "usage: read_write_gray_packed 1|2|4 INFILE OUTFILE" - << std::endl; -} - -template< class pixel > -void -test_image(char const* infile, char const* outfile) -{ - png::image< pixel > image(infile, png::require_color_space< pixel >()); - image.write(outfile); -} - -int -main(int argc, char* argv[]) -try -{ - if (argc != 4) - { - print_usage(); - return EXIT_FAILURE; - } - char const* bits = argv[1]; - char const* infile = argv[2]; - char const* outfile = argv[3]; - - if (strcmp(bits, "1") == 0) - { - test_image< png::gray_pixel_1 >(infile, outfile); - } - else if (strcmp(bits, "2") == 0) - { - test_image< png::gray_pixel_2 >(infile, outfile); - } - else if (strcmp(bits, "4") == 0) - { - test_image< png::gray_pixel_4 >(infile, outfile); - } - else - { - print_usage(); - return EXIT_FAILURE; - } -} -catch (std::exception const& error) -{ - std::cerr << "read_write_gray_packed: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/test/read_write_param.cpp b/_tools/code_generators/libs/png++/test/read_write_param.cpp deleted file mode 100644 index c755f4d..0000000 --- a/_tools/code_generators/libs/png++/test/read_write_param.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -int -main() -{ - std::cerr << "read_write_param: do not run this test--it's compile-only" - << std::endl; - exit(1); - - typedef png::image< png::rgb_pixel > image; - image image1; // default contructor - image image2("test2.png"); // char const* - char test3[] = "test3.png"; // char* - image image3(test3); - image image4(std::string("test4.png")); - - image1.write("test4.png"); // char const* - char test5[] = "test5.png"; - image1.write(test5); // char* - image1.write(std::string("test6.png")); -} diff --git a/_tools/code_generators/libs/png++/test/test.sh b/_tools/code_generators/libs/png++/test/test.sh deleted file mode 100644 index 9329b0a..0000000 --- a/_tools/code_generators/libs/png++/test/test.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -status=0 - -for i in *.png; do - for j in RGB RGBA GRAY GA; do - for k in 8 16; do - out=$i.$j.$k.out - echo ./convert_color_space $j $k $i $out - ./convert_color_space $j $k $i $out && cmp $out cmp/$out \ - || status=1 - done; - done; -done - -echo ./generate_gray_packed -./generate_gray_packed || status=1 -for i in 1 2 4; do - out=gray_packed_$i.png.out - cmp $out cmp/$out || status=1 -done - -for i in 1 2 4; do - in=basn0g0$i.png - out=$in.out - echo ./read_write_gray_packed $i $in $out - ./read_write_gray_packed $i $in $out && cmp $out cmp/$out || status=1 -done - -echo ./generate_palette -./generate_palette || status=1 -for i in 1 2 4 8; do - out=palette$i.png.out - cmp $out cmp/$out || status=1 -done -cmp palette8_tRNS.png.out cmp/palette8_tRNS.png.out || status=1 - -echo ./write_gray_16 -./write_gray_16 && cmp gray_16.out cmp/gray_16.out || status=1 - -test $status -eq 0 && echo 'PNG++ PASSES TESTS' || echo 'PNG++ FAILS TESTS' -exit $status diff --git a/_tools/code_generators/libs/png++/test/write_gray_16.cpp b/_tools/code_generators/libs/png++/test/write_gray_16.cpp deleted file mode 100644 index 6c7f922..0000000 --- a/_tools/code_generators/libs/png++/test/write_gray_16.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2007,2008 Alex Shulgin - * - * This file is part of png++ the C++ wrapper for libpng. PNG++ is free - * software; the exact copying conditions are as follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#include <iostream> -#include <ostream> - -#include <png.hpp> - -int -main() -try -{ - png::image< png::gray_pixel_16 > image(256, 256); - for (size_t y = 0; y < image.get_height(); ++y) - { - for (size_t x = 0; x < image.get_width(); ++x) - { - png::gray_pixel_16 pix = x*y; - image[y][x] = pix; - } - } - image.write("gray_16.out"); -} -catch (std::exception const& error) -{ - std::cerr << "write_gray_16: " << error.what() << std::endl; - return EXIT_FAILURE; -} diff --git a/_tools/code_generators/libs/png++/writer.hpp b/_tools/code_generators/libs/png++/writer.hpp index 05e28e8..448dfd5 100644 --- a/_tools/code_generators/libs/png++/writer.hpp +++ b/_tools/code_generators/libs/png++/writer.hpp @@ -88,7 +88,7 @@ namespace png void write_png() const { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -103,7 +103,7 @@ namespace png */ void write_info() const { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -115,7 +115,7 @@ namespace png */ void write_row(byte* bytes) { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -127,7 +127,7 @@ namespace png */ void write_end_info() const { - if (setjmp(m_png->jmpbuf)) + if (setjmp(png_jmpbuf(m_png))) { throw error(m_error); } @@ -135,7 +135,7 @@ namespace png } private: - static void write_data(png_struct* png, byte* data, size_t length) + static void write_data(png_struct* png, byte* data, png_size_t length) { io_base* io = static_cast< io_base* >(png_get_error_ptr(png)); writer* wr = static_cast< writer* >(io); -- GitLab