|  |  | @ -53,7 +53,7 @@ RECENT REVISION HISTORY: | 
			
		
	
		
		
			
				
					
					|  |  |  |       2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes |  |  |  |       2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes | 
			
		
	
		
		
			
				
					
					|  |  |  |       2.11  (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 |  |  |  |       2.11  (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 | 
			
		
	
		
		
			
				
					
					|  |  |  |                          RGB-format JPEG; remove white matting in PSD; |  |  |  |                          RGB-format JPEG; remove white matting in PSD; | 
			
		
	
		
		
			
				
					
					|  |  |  |                          allocate large structures on the stack; 
 |  |  |  |                          allocate large structures on the stack; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                          correct channel count for PNG & BMP |  |  |  |                          correct channel count for PNG & BMP | 
			
		
	
		
		
			
				
					
					|  |  |  |       2.10  (2016-01-22) avoid warning introduced in 2.09 |  |  |  |       2.10  (2016-01-22) avoid warning introduced in 2.09 | 
			
		
	
		
		
			
				
					
					|  |  |  |       2.09  (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED |  |  |  |       2.09  (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED | 
			
		
	
	
		
		
			
				
					|  |  | @ -96,7 +96,7 @@ RECENT REVISION HISTORY: | 
			
		
	
		
		
			
				
					
					|  |  |  |     Ryamond Barbiero        Paul Du Bois       Engin Manap        github:snagar |  |  |  |     Ryamond Barbiero        Paul Du Bois       Engin Manap        github:snagar | 
			
		
	
		
		
			
				
					
					|  |  |  |     Michaelangel007@github  Oriol Ferrer Mesia Dale Weiler        github:Zelex |  |  |  |     Michaelangel007@github  Oriol Ferrer Mesia Dale Weiler        github:Zelex | 
			
		
	
		
		
			
				
					
					|  |  |  |     Philipp Wiesemann       Josh Tobin         github:rlyeh       github:grim210@github |  |  |  |     Philipp Wiesemann       Josh Tobin         github:rlyeh       github:grim210@github | 
			
		
	
		
		
			
				
					
					|  |  |  |     Blazej Dariusz Roszkowski                  github:sammyhw |  |  |  |     Blazej Dariusz Roszkowski                  github:sammyhw     GrayHatter@uTox | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | */ |  |  |  | */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -267,11 +267,11 @@ RECENT REVISION HISTORY: | 
			
		
	
		
		
			
				
					
					|  |  |  | // ===========================================================================
 |  |  |  | // ===========================================================================
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //
 |  |  |  | //
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // ADDITIONAL CONFIGURATION
 |  |  |  | // ADDITIONAL CONFIGURATION
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // 
 |  |  |  | //
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | //  - You can suppress implementation of any of the decoders to reduce
 |  |  |  | //  - You can suppress implementation of any of the decoders to reduce
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //    your code footprint by #defining one or more of the following
 |  |  |  | //    your code footprint by #defining one or more of the following
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //    symbols before creating the implementation.
 |  |  |  | //    symbols before creating the implementation.
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // 
 |  |  |  | //
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_JPEG
 |  |  |  | //        STBI_NO_JPEG
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_PNG
 |  |  |  | //        STBI_NO_PNG
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_BMP
 |  |  |  | //        STBI_NO_BMP
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -281,11 +281,11 @@ RECENT REVISION HISTORY: | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_HDR
 |  |  |  | //        STBI_NO_HDR
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_PIC
 |  |  |  | //        STBI_NO_PIC
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_NO_PNM   (.ppm and .pgm)
 |  |  |  | //        STBI_NO_PNM   (.ppm and .pgm)
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // 
 |  |  |  | //
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | //  - You can request *only* certain decoders and suppress all other ones
 |  |  |  | //  - You can request *only* certain decoders and suppress all other ones
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //    (this will be more forward-compatible, as addition of new decoders
 |  |  |  | //    (this will be more forward-compatible, as addition of new decoders
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //    doesn't require you to disable them explicitly):
 |  |  |  | //    doesn't require you to disable them explicitly):
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // 
 |  |  |  | //
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_JPEG
 |  |  |  | //        STBI_ONLY_JPEG
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_PNG
 |  |  |  | //        STBI_ONLY_PNG
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_BMP
 |  |  |  | //        STBI_ONLY_BMP
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -295,7 +295,7 @@ RECENT REVISION HISTORY: | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_HDR
 |  |  |  | //        STBI_ONLY_HDR
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_PIC
 |  |  |  | //        STBI_ONLY_PIC
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //        STBI_ONLY_PNM   (.ppm and .pgm)
 |  |  |  | //        STBI_ONLY_PNM   (.ppm and .pgm)
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // 
 |  |  |  | //
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | //   - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
 |  |  |  | //   - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //     want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
 |  |  |  | //     want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //
 |  |  |  | //
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1761,7 +1761,7 @@ static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) | 
			
		
	
		
		
			
				
					
					|  |  |  |             // magnitude code followed by receive_extend code
 |  |  |  |             // magnitude code followed by receive_extend code
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); |  |  |  |             int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); | 
			
		
	
		
		
			
				
					
					|  |  |  |             int m = 1 << (magbits - 1); |  |  |  |             int m = 1 << (magbits - 1); | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (k < m) k += (-1 << magbits) + 1; |  |  |  |             if (k < m) k += (~0U << magbits) + 1; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             // if the result is small enough, we can fit it in fast_ac table
 |  |  |  |             // if the result is small enough, we can fit it in fast_ac table
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (k >= -128 && k <= 127) |  |  |  |             if (k >= -128 && k <= 127) | 
			
		
	
		
		
			
				
					
					|  |  |  |                fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits)); |  |  |  |                fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits)); | 
			
		
	
	
		
		
			
				
					|  |  | @ -3594,6 +3594,7 @@ static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) |  |  |  | static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |    (void)ri; // This unused warning is safe to ignore.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    unsigned char* result; |  |  |  |    unsigned char* result; | 
			
		
	
		
		
			
				
					
					|  |  |  |    stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); |  |  |  |    stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); | 
			
		
	
		
		
			
				
					
					|  |  |  |    j->s = s; |  |  |  |    j->s = s; | 
			
		
	
	
		
		
			
				
					|  |  | @ -4606,7 +4607,7 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) | 
			
		
	
		
		
			
				
					
					|  |  |  |             s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); |  |  |  |             s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); | 
			
		
	
		
		
			
				
					
					|  |  |  |             z->depth = stbi__get8(s);  if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16)  return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); |  |  |  |             z->depth = stbi__get8(s);  if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16)  return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); | 
			
		
	
		
		
			
				
					
					|  |  |  |             color = stbi__get8(s);  if (color > 6)         return stbi__err("bad ctype","Corrupt PNG"); |  |  |  |             color = stbi__get8(s);  if (color > 6)         return stbi__err("bad ctype","Corrupt PNG"); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (color == 3 && z->depth == 16)                  return stbi__err("bad ctype","Corrupt PNG"); |  |  |  |             if (color == 3 && z->depth == 16)                  return stbi__err("bad ctype","Corrupt PNG"); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); |  |  |  |             if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); | 
			
		
	
		
		
			
				
					
					|  |  |  |             comp  = stbi__get8(s);  if (comp) return stbi__err("bad comp method","Corrupt PNG"); |  |  |  |             comp  = stbi__get8(s);  if (comp) return stbi__err("bad comp method","Corrupt PNG"); | 
			
		
	
		
		
			
				
					
					|  |  |  |             filter= stbi__get8(s);  if (filter) return stbi__err("bad filter method","Corrupt PNG"); |  |  |  |             filter= stbi__get8(s);  if (filter) return stbi__err("bad filter method","Corrupt PNG"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -4889,7 +4890,7 @@ static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) | 
			
		
	
		
		
			
				
					
					|  |  |  |    info->offset = stbi__get32le(s); |  |  |  |    info->offset = stbi__get32le(s); | 
			
		
	
		
		
			
				
					
					|  |  |  |    info->hsz = hsz = stbi__get32le(s); |  |  |  |    info->hsz = hsz = stbi__get32le(s); | 
			
		
	
		
		
			
				
					
					|  |  |  |    info->mr = info->mg = info->mb = info->ma = 0; |  |  |  |    info->mr = info->mg = info->mb = info->ma = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |    
 |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |    if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); |  |  |  |    if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); | 
			
		
	
		
		
			
				
					
					|  |  |  |    if (hsz == 12) { |  |  |  |    if (hsz == 12) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       s->img_x = stbi__get16le(s); |  |  |  |       s->img_x = stbi__get16le(s); | 
			
		
	
	
		
		
			
				
					|  |  | @ -4974,7 +4975,7 @@ static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req | 
			
		
	
		
		
			
				
					
					|  |  |  |    stbi__bmp_data info; |  |  |  |    stbi__bmp_data info; | 
			
		
	
		
		
			
				
					
					|  |  |  |    STBI_NOTUSED(ri); |  |  |  |    STBI_NOTUSED(ri); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    info.all_a = 255;   
 |  |  |  |    info.all_a = 255; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |    if (stbi__bmp_parse_header(s, &info) == NULL) |  |  |  |    if (stbi__bmp_parse_header(s, &info) == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |       return NULL; // error code already set
 |  |  |  |       return NULL; // error code already set
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -5093,7 +5094,7 @@ static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req | 
			
		
	
		
		
			
				
					
					|  |  |  |          stbi__skip(s, pad); |  |  |  |          stbi__skip(s, pad); | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |    } |  |  |  |    } | 
			
		
	
		
		
			
				
					
					|  |  |  |    
 |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |    // if alpha channel is all 0s, replace with all 255s
 |  |  |  |    // if alpha channel is all 0s, replace with all 255s
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    if (target == 4 && all_a == 0) |  |  |  |    if (target == 4 && all_a == 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |       for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) |  |  |  |       for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) | 
			
		
	
	
		
		
			
				
					|  |  | @ -6538,7 +6539,7 @@ static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) | 
			
		
	
		
		
			
				
					
					|  |  |  |    void *p; |  |  |  |    void *p; | 
			
		
	
		
		
			
				
					
					|  |  |  |    stbi__bmp_data info; |  |  |  |    stbi__bmp_data info; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |    info.all_a = 255;   
 |  |  |  |    info.all_a = 255; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |    p = stbi__bmp_parse_header(s, &info); |  |  |  |    p = stbi__bmp_parse_header(s, &info); | 
			
		
	
		
		
			
				
					
					|  |  |  |    stbi__rewind( s ); |  |  |  |    stbi__rewind( s ); | 
			
		
	
		
		
			
				
					
					|  |  |  |    if (p == NULL) |  |  |  |    if (p == NULL) | 
			
		
	
	
		
		
			
				
					|  |  | @ -7013,38 +7014,38 @@ This software is available under 2 licenses -- choose whichever you prefer. | 
			
		
	
		
		
			
				
					
					|  |  |  | ------------------------------------------------------------------------------ |  |  |  | ------------------------------------------------------------------------------ | 
			
		
	
		
		
			
				
					
					|  |  |  | ALTERNATIVE A - MIT License |  |  |  | ALTERNATIVE A - MIT License | 
			
		
	
		
		
			
				
					
					|  |  |  | Copyright (c) 2017 Sean Barrett |  |  |  | Copyright (c) 2017 Sean Barrett | 
			
		
	
		
		
			
				
					
					|  |  |  | Permission is hereby granted, free of charge, to any person obtaining a copy of 
 |  |  |  | Permission is hereby granted, free of charge, to any person obtaining a copy of | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | this software and associated documentation files (the "Software"), to deal in 
 |  |  |  | this software and associated documentation files (the "Software"), to deal in | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | the Software without restriction, including without limitation the rights to 
 |  |  |  | the Software without restriction, including without limitation the rights to | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
 |  |  |  | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | of the Software, and to permit persons to whom the Software is furnished to do 
 |  |  |  | of the Software, and to permit persons to whom the Software is furnished to do | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | so, subject to the following conditions: |  |  |  | so, subject to the following conditions: | 
			
		
	
		
		
			
				
					
					|  |  |  | The above copyright notice and this permission notice shall be included in all 
 |  |  |  | The above copyright notice and this permission notice shall be included in all | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | copies or substantial portions of the Software. |  |  |  | copies or substantial portions of the Software. | 
			
		
	
		
		
			
				
					
					|  |  |  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
 |  |  |  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
 |  |  |  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
 |  |  |  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
 |  |  |  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
 |  |  |  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
 |  |  |  | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | SOFTWARE. |  |  |  | SOFTWARE. | 
			
		
	
		
		
			
				
					
					|  |  |  | ------------------------------------------------------------------------------ |  |  |  | ------------------------------------------------------------------------------ | 
			
		
	
		
		
			
				
					
					|  |  |  | ALTERNATIVE B - Public Domain (www.unlicense.org) |  |  |  | ALTERNATIVE B - Public Domain (www.unlicense.org) | 
			
		
	
		
		
			
				
					
					|  |  |  | This is free and unencumbered software released into the public domain. |  |  |  | This is free and unencumbered software released into the public domain. | 
			
		
	
		
		
			
				
					
					|  |  |  | Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
 |  |  |  | Anyone is free to copy, modify, publish, use, compile, sell, or distribute this | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | software, either in source code form or as a compiled binary, for any purpose, 
 |  |  |  | software, either in source code form or as a compiled binary, for any purpose, | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | commercial or non-commercial, and by any means. |  |  |  | commercial or non-commercial, and by any means. | 
			
		
	
		
		
			
				
					
					|  |  |  | In jurisdictions that recognize copyright laws, the author or authors of this 
 |  |  |  | In jurisdictions that recognize copyright laws, the author or authors of this | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | software dedicate any and all copyright interest in the software to the public 
 |  |  |  | software dedicate any and all copyright interest in the software to the public | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | domain. We make this dedication for the benefit of the public at large and to 
 |  |  |  | domain. We make this dedication for the benefit of the public at large and to | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | the detriment of our heirs and successors. We intend this dedication to be an 
 |  |  |  | the detriment of our heirs and successors. We intend this dedication to be an | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | overt act of relinquishment in perpetuity of all present and future rights to 
 |  |  |  | overt act of relinquishment in perpetuity of all present and future rights to | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | this software under copyright law. |  |  |  | this software under copyright law. | 
			
		
	
		
		
			
				
					
					|  |  |  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
 |  |  |  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
 |  |  |  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
 |  |  |  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
 |  |  |  | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
 |  |  |  | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |  |  |  | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
			
		
	
		
		
			
				
					
					|  |  |  | ------------------------------------------------------------------------------ |  |  |  | ------------------------------------------------------------------------------ | 
			
		
	
		
		
			
				
					
					|  |  |  | */ |  |  |  | */ | 
			
		
	
	
		
		
			
				
					|  |  | 
 |